网站首页 > 技术文章 正文
故障发生的经过
这也是之前的一个处理case, 事故发生在早上8点左右,业务高峰期,客户的沟通群里,消息几百条,各个厂商都在抱怨,系统无法使用。 登录到数据库服务器,第一时间看了负载不高,随即马上登录到数据库,查看当前的等待事件。 发现有大量的 行级锁等待:enq:Tx-row lock contention。 第一时间判定大概率研发SQL导致的,恢复业务you'xian立即批量 kill了造成锁的SQL会话,半个小时候后,同样的情况又出现,大量的行级锁,无奈之下,顶着压力,慢慢找问题,期间为了缓解业务使用,多次进行了kill 会话的操作。
处理问题的那段事件,第一时间判断是SQL问题,短时间内让研发看代码,然后修改并迭代, 这是不可能的。之前的经验出现过很多次,DBA和研发之间,互相推诿的情况屡见不鲜,研发更多的是希望从数据库层面,能优化掉就优化掉,最好不需要修改代码,而DBA往往是希望从代码角度进行优化,毕竟仅仅从数据库优化是有限的,而且有些代码明确的违反了数据库的设计原则,DBA也需要从原则上坚持其权威性。回到那次故障的处理过程中, 当时数据库频频需要kill会话来缓解业务,可想而知,当时的压力有多大,具有强大的心理素质是DBA的基本要求之一。
功夫不负有心人,在查看表结构的时候,发现有一张表,建立了位图索引,这是一个突破点,一般情况下,在高并发的OLTP的业务环境下,这是禁止使用的。 随即问了驻厂的实施工程师,发现这个索引是最近新建的。 OMG,确定了原因之后,立马删除了索引,情况有了明显改善。
故障分析
从下面的AWR报告来看,当时负载不高
连接数和会话数当前都只有700多。目前数据库设置的最大值可达到2000以上。
目前数据库的等待事件,主要的等待都花在了enq:Tx-row lock contention 行级锁等待。
当前的数据库会话信息
Oracle数据库,数据库一般不会出现insert之间互相阻塞,所以怀疑是不是有特殊类型,发现表OUTPAYMT列SUBMITFLAG创建了位图索引。
bitmap index与b-tree索引不同,bitmap index索引键值指向多行,因此当发生DML时,oracle会锁定索引包含的多行记录,Oracle官方解释位图索引是为数据仓库或环境设计,适用于
1.低基数,distinct值小于表的行数,越小越好,
2.只读表或不做DML操作,bitmap index不适用OLTP系统。
目前看这个表的列SUBMITFLAG 只存了两个值-1和0。
解决方案及建议
删除这个位图索引,改成普通b-tree索引,业务系统恢复正常。
B-TREE索引,一般情况下选择普通的b-tree索引,也是oracle默认的索引。
位图索引的使用场景: 位图索引, 对于不同的值很少的列,且数据量较大,且DML操作很少,这种情况可以选择使用位图索引。比如性别,只有男和女 且DML操作也会很少,此时选择位图索引,效率可能会更高。
猜你喜欢
- 2024-10-24 DBA日记之Oracle等待事件cursor: mutex x
- 2024-10-24 oracle数据库学习,发展方向有哪些?
- 2024-10-24 选择XTREMIO提高ORACLE DBA工作效率
- 2024-10-24 ORACLE DBA TOP SQL查询 oracle查询dba用户
- 2024-10-24 DBA日记之Oracle数据库索引一 oracle数据库索引怎么看?
- 2024-10-24 2018年 oracle自治数据库云 DBA工作三大重点!
- 2024-10-24 互动送书-《Oracle DBA工作笔记》签名版
- 2024-10-24 Oracle DBA做SQL优化的最佳思路 基于oracle的sql优化如何
- 2024-10-24 DBA常用sql之Oracle 《oracle dba入门》
- 2024-10-24 DBA必备知识|Oracle 托管文件 (OMF)详解
你 发表评论:
欢迎- 620℃几个Oracle空值处理函数 oracle处理null值的函数
- 612℃Oracle分析函数之Lag和Lead()使用
- 601℃0497-如何将Kerberos的CDH6.1从Oracle JDK 1.8迁移至OpenJDK 1.8
- 597℃Oracle数据库的单、多行函数 oracle执行多个sql语句
- 593℃Oracle 12c PDB迁移(一) oracle迁移到oceanbase
- 584℃【数据统计分析】详解Oracle分组函数之CUBE
- 574℃最佳实践 | 提效 47 倍,制造业生产 Oracle 迁移替换
- 563℃Oracle有哪些常见的函数? oracle中常用的函数
- 最近发表
- 标签列表
-
- 前端设计模式 (75)
- 前端性能优化 (51)
- 前端模板 (66)
- 前端跨域 (52)
- 前端缓存 (63)
- 前端aes加密 (58)
- 前端脚手架 (56)
- 前端md5加密 (54)
- 前端路由 (61)
- 前端数组 (73)
- 前端js面试题 (50)
- 前端定时器 (59)
- 前端获取当前时间 (50)
- Oracle RAC (76)
- oracle恢复 (77)
- oracle 删除表 (52)
- oracle 用户名 (80)
- oracle 工具 (55)
- oracle 内存 (55)
- oracle 导出表 (62)
- oracle约束 (54)
- oracle 中文 (51)
- oracle链接 (54)
- oracle的函数 (58)
- 前端调试 (52)
本文暂时没有评论,来添加一个吧(●'◡'●)