云计算百科
云计算领域专业知识百科平台

enq: TX - index contention(索引分裂)

原因:

 一般出现在对表的高并发的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();

根据实际情况严重程度进行如下紧急处理:

  • 降低应用并发度,降低index争用;
  • 使用反向键索引重建,或使用hash分区重建索引;(可以,但是刘老虎不推荐,不能做范围查找,索引块占内存比较多)
  • 如索引字段使用sequence,可考虑增加sequence cache来增加键值跳度避免争用。
  • 【后续分析】

    该等待一般由于业务繁忙导致,通过降低并发或调整索引可以避免,反向索引由于对范围查询有一定影响,需要进行评估,hash索引分区也可以一定程度避免争用。

    赞(0)
    未经允许不得转载:网硕互联帮助中心 » enq: TX - index contention(索引分裂)
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!