暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

索引列重复导致的enq: TX - row lock contention性能故障

丽鹏数据库技术分享 2021-04-21
738

今天下午接到同事电话,说Tuxedo中间件有点堵,让看一下数据库有没有问题!于是马上抓了一个AWR:


下面记录一下处理的经过:

1 首先,从报告头中看到DB Time达到135分钟,(DB Time)/Elapsed=4.5,这个比值在这个时间段来说有点偏高:





2,看到Top 1是enq: TX - row lock contention等待事件,也就是说过去半个小时发生了比较严重的行级锁等待事件。




通常,产生enq: TX - row lock contention事件的原因有以下几种可能:

  • 不同的session更新或删除同一条记录;

  • 唯一索引有重复索引;

  • 位图索引同时被更新或同时并发的向位图索引字段上插入相同字段值;

  • 并发的对同一个数据块上的数据进行update操作;

  • 等待索引块完成分裂


3,于是又做了一个ADDM,发现都是在tf_b_trade表发生的阻塞



4,查看tf_b_trade表的索引,可以看到主键索引trade_id在别的索引中也存在,于是可以判断唯一索引有重复索引导致。



5,从被阻塞的3条sql的执行计划也可以看出使用的不是同一个索引,这就导致两个索引同时被更新


6,问题原因找到了,解决方法就是去掉重复的索引。

文章转载自丽鹏数据库技术分享,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论