原因:
一般出现在对表的高并发的DML操作时,当一个事务需要向一个索引块插入数据时,该索引块正好发生了索引分裂,则插入事务需要等待分裂事务
分析:
查找分裂对象:
方法1:查看该等待事件对应SQL的执行计划,检查这些SQL执行中正在使用的索引对象是哪些。
方法2:收集问题时段的AWR报告,检查Segments by Row Lock Waits部分指标。
处理:
根据实际情况严重程度进行如下紧急处理:
a)降低应用并发度,降低index争用;
b)使用反向索引重建(提升了写性能,降低了读性能),或使用hash分区重建索引; 如索引字段使用sequence,可考虑增加sequence cache来增加键值跳度避免争用
——————————————————————–
【故障现象】
某些DML语句执行缓慢,查询等待事件出现“enq: TX – index contention”等待。
【可能故障原因】
- 一般出现在对表的高并发的DML操作时,当一个事务需要向一个索引块插入数据时,该索引块正好发生了索引分裂,则插入事务需要等待分裂事务;
【应急措施】
查找是哪些SQL语句导致大量的争用:
set line 200
select inst_id,sid,event,sql_id from gv$session
where event=’enq: TX – index contention’
order by sql_id;
查看执行计划,检查这些SQL执行中正在使用的索引对象是哪些:
set line 200 pagesize 100
select * from table(dbms_xplan.display_cursor(‘&sqlid’));
或者采取更简便的方法,收集问题时段的AWR报告,检查Segments by Row Lock Waits部分指标:

手工产生一个AWR快照的方法如下:
exec DBMS_WORKLOAD_REPOSITORY.create_snapshot();
根据实际情况严重程度进行如下紧急处理:
【后续分析】
该等待一般由于业务繁忙导致,通过降低并发或调整索引可以避免,反向索引由于对范围查询有一定影响,需要进行评估,hash索引分区也可以一定程度避免争用。
网硕互联帮助中心






评论前必须登录!
注册