赵靖宇 数据和云

墨墨导读:ENQ: TX - row lock contention等待事件,是Oracle数据库里最常见的等待事件之一,一般是由于不同的session更新或删除同一条记录、唯一索引有重复索引、位图索引同时被更新或同时并发的向位图索引字段上插入相同字段值等几种可能性,但是在11.2.0.3 到 11.2.0.4的数据库版本中,可能还会出现因为Oracle数据库bug而触发全局死锁。



问题描述



这种全局死锁的触发条件为:

1. 11.2.0.3 到 11.2.0.4的数据库版本
2. Table Statistics Gatherings(表统计信息收集)and High Execution of Update sys.col_usage$(大量执行更新sys.col_usage$表)

问题表现



1)在数据库的ash中,发现大量的enq:TX – row lock contention等待事件。
2)在数据库实例的alert日志中,出现以下类似报错代码:


详述由ENQ:TX – ROW LOCK CONTENTION引起的全局死锁处理过程_Jav
3)在trace报错的对应trace日志中,出现以下类似代码:

详述由ENQ:TX – ROW LOCK CONTENTION引起的全局死锁处理过程_Jav_02详述由ENQ:TX – ROW LOCK CONTENTION引起的全局死锁处理过程_Jav_03


故障解决



针对上述情况,根据Oracle官方文档Global Enqueue Services Deadlock Detected During Table Statistics Gatherings and High Execution of Update sys.col_usage$ (文档 ID 2347644.1)描述,建议应用数据库补丁19591060。

Apply Patch 19591060 which is merge patch for BUGS 16470836 and 17715578.
The fix for Bug 16470836 improves this greatly by only flushing the colusage/monitoring info for the gathered table.
The fix for Bug 17715578 further improves the performance of updating sys.mon_mods$.