0
点赞
收藏
分享

微信扫一扫

enq: TX – index contention

niboac 2022-03-19 阅读 75

索引插入通常发生在索引的右边,当在单调递增的列上定义索引时,大量且高并发的DML(先删除后插入)会导致索引不能及时的放入指定的位置,oracle内部会根据索引的实际存储情况,对索引进行叶块的分裂操作,以满足索引的维护需求,这个过程会导致该等待事件的产生。

可考虑的解决办法:

1.创建hash或REVERSE索引

可根据 ​AWR 报告的 'Segments by Row Lock Waits'​ 中列出的索引进行修改

REVERSE索引(REVERSE索引也是一种B树索引,但它物理上将按照列顺序保存的每个索引键值进行了反转。例如,索引键是20,用16进制存储这个标准B树索引键的两个字节是C1,15,那么反向索引存储的字节就是15,C1)带来的问题是影响索引范围扫描。

2.考虑增加序列的缓存大小

适用于索引使用了序列,序列属性建议设置为noorder,尤其在rac中,每个实例使用具有不同范围的序列键,能有效降低块拆分的可能性。

alter sequence <owner>.<seq name> cache <required value>;

3.大量清除数据后考虑重建或收缩索引

执行alter index rebuild 或 alter index shrink 命令有助于减少等待。

4.增加索引的PCT_FREE 

​​较高的 PCT_FREE 将有助于避免索引块上的 ITL 争用。当一个块中的所有可用 ITL 当前都在使用中并且 PCT_FREE 区域中没有足够的空间供 Oracle 动态分配新的 ITL 插槽时,就会发生 ITL 争用。​

​​http://download.oracle.com/docs/cd/B19306_01/server.102/b14211/design.htm#sthref112​​

Troubleshooting 'enq: TX - index contention' Waits (Doc ID 873243.1)

举报

相关推荐

0 条评论