事件 enq: TX - contention

1  概述:

    Tx锁等待在数据库中常见,今天说说一个关于 Enq:Tx – index contention等待案例的。

关于TX锁,常见的等待有以下几个,其中 enq: TX - index contention 的等待类型 Concurrency,不是 Application。也就是说这个等待是一个并发等待,但是不是应用程序导致的锁。

 

enq: TX - row lock contention

enq: TX - allocate ITL entry

enq: TX - index contention

enq: TX - contention

 

2  现象:

    数据库会话告警,超过阀值。1分钟内恢复。 V$SESSION中,存在大量 enq: TX - index contention的等待
  事件 enq: TX - contention_第1张图片

 


通过sql_id,我们可以知道这个sql语句类似如下,是一个INSERT语句

 

INSERT INTO  T1

VALUES(  S_1.NEXTVAL,   ……………………);

 

 

通过查询对象,可以发现等待的对象时T表的主键


3  问题分析:

    Insert 数据,发现主键等待。仔细分析了业务场景,存在这样的一种业务:在很短的时间内,大量在T表内INSERT数据,那么由于主键是自增长的,很短的时间数据全部写入一个或者几个索引块,导致了索引则争用。

    这种情况,oracle数据库在子自增长主键,如果insert非常繁忙是存在的,现有的解决方案也非常简单,如果不需要按照主键范围搜索,那么就做一个反向索引,让相似的值反向后,落到不同的索引块中,减缓这种并发。

    由于是线上系统,主键不能删除,只能重建

 

ALTER  INDEX  PK_T  REBUILD ONLINE  REVERSE;

4  问题解决

  在测试环境中,复现了上述现象,并且重建索引,问题解决。正式环境处理,问题解决

 

 

 


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/617982/viewspace-1448263/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/617982/viewspace-1448263/

你可能感兴趣的:(事件 enq: TX - contention)