oracle数据库enq: TX - allocate ITL entry性能诊断

朋友公司的某铁路集团医保系统出现性能问题业务不能正常办理,下面是出现性能问题时的awr报告

从等待事件来看主要是出现了多处锁竞争.其中enq: TX - allocate ITL entry等待事件是由于缺省情况下创建的表的INITRANS参数为1,索引的INITRANS参数值为2.当有太多的并发DML操作同时操作相同的数据块或索引块就会出现这个等待事件,可以通过查看Segments by ITL Waits部分的信息来了解出现大量并发DML操作的对象

从下面的信息可以看出消耗时间最长的语句都是数据更新操作

Enq:TX – row lock contention 等待事件,主要是由于要修改的记录已经被其它会话所持有排他锁产生的.通过查看Segments by Row Lock Waits信息可以看出主要是由sys_serial表产生的.

这是一个手工维护各业务表的主键序列的表.而不是选择由序列生成器来生成主键造成的.语句为
select cur_num_no from SYS_SERIAL where serial_type=:"SYS_B_0" for update

由上面的信息可知产生enq: TX - allocate ITL entry 和Enq:TX – row lock contention等待的主要对象是:
表:
KC19
KC21
KC40
KCE1
KC24
kcd9
kcd4
索引:
PK_KC24
IDX_KC40
PK_KC19
IDX_KC21
PK_KCE1
PK_KC21

知道主要原因了就有解决方法:
对于enq: TX - allocate ITL entry等待事件对主要竞争对象执行以下语句来修改INITRANS参数值:
Alter table kc19 initrans 50;
Alter table kc21 initrans 50;
Alter table kc40 initrans 50;
Alter table kce1 initrans 50;
Alter table kc24 initrans 50;
Alter table kcd9 initrans 50;
Alter table kcd4 initrans 50;

Alter table kc19 move;
Alter table kc21 move;
Alter table kc40 move;
Alter table kce1 move;
Alter table kc24 move;
Alter table kcd9 move;
Alter table kcd4 move;

Alter index pk_kc24 rebuild initrans 50 online;
Alter index idx_kc40 rebuild initrans 50 online;
Alter index pk_kc19 rebuild initrans 50 online;
Alter index idx_kc21 rebuild initrans 50 online;
Alter index pk_kce1 rebuild initrans 50 online;
Alter index pk_kc21 rebuild initrans 50 online;
对于Enq:TX – row lock contention等待事件主要是由
select cur_num_no from SYS_SERIAL where serial_type=:"SYS_B_0" for update
所以要解决这个问题需要修改各业表主键的生成方式不要使用上面的这种方法.

下面的图表是在执行上面的修改操作之后下午业务高峰期的awr报告如下

现在主要的就是enq: TX – row lock contention等待的这个需要修改程序结构

下面的图表是在执行上面的修改操作之后第二天上午业务高峰期8点到9点的awr报告如下

下面的图表是在执行上面的修改操作之后第二天上午业务高峰期9点到10点的awr报告如下

下面的图表是在执行上面的修改操作之后第二天上午业务高峰期10点到11点的awr报告如下

现在数据库运行较好.

问题原因有以下两个
1.由于并发更新的对象的initrans参数过小当出现大量并发插入,更新操作时出现了enq: TX - allocate ITL entry等待事件.
2.由于各业务表的主键序列值是由程序SYS_SERIAL表来维护的,每次生成主键值是都要执行
select cur_num_no from SYS_SERIAL where serial_type=:"SYS_B_0" for update
产生了Enq:TX – row lock contention等待事件

解决方法:
1.对enq: TX - allocate ITL entry等待事件对主要竞争对象执行以下语句来TRANS参数值
2.所以要解决Enq:TX – row lock contention这个问题需要修改各业表主键的生成方式比如使用序列生成器.

时间: 2024-09-12 16:34:48

oracle数据库enq: TX - allocate ITL entry性能诊断的相关文章

【MOS】 Troubleshooting waits for enq: TX - allocate ITL entry(1472175.1)

Troubleshooting waits for 'enq: TX - allocate ITL entry' (文档 ID 1472175.1) In this Document Symptoms Cause Solution   Increase INITRANS   Increase PCTFREE   A Combination of increasing both INITRANS and PCTFREE References APPLIES TO: Oracle Database

[20150721]enq TX - allocate ITL entry

[20150721]enq TX - allocate ITL entry.txt --昨天我做了一个测试链接: http://blog.itpub.net/267265/viewspace-1742243/ --本想通过这个例子说明为什么8K数据块Hakan Factor=736? --晚上我想到一种这种特殊的表会不会产生enq TX - allocate ITL entry,也就是itl不足的情况. 1.建立测试环境: SCOTT@test> @ &r/ver1 PORT_STRING 

关于enq: TX - allocate ITL entry的问题分析

今天发现系统在下午1点左右的时候负载比较高,就抓取了一个最新的awr报告. Snap Id Snap Time Sessions Cursors/Session Begin Snap: 20892 26-Nov-14 13:20:17 3623 5.4 End Snap: 20893 26-Nov-14 13:30:17 3602 5.4 Elapsed:   10.01 (mins)     DB Time:   365.56 (mins)     来看看是否有top的等待事件,对于其它的几个

【故障处理】队列等待之TX - allocate ITL entry案例

[故障处理]队列等待之TX - allocate ITL entry案例 1  BLOG文档结构图       2  前言部分 2.1  导读和注意事项 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道的知识,~O(∩_∩)O~: ① enq: TX - allocate ITL entry等待事件的解决 ② 一般等待事件的解决办法 ③ 队列等待的基本知识 Tips: ① 本文在ITpub(http://blog.itpub.net/26736162).博客园(ht

[20140130]关于enq TX-allocate ITL entry

  昨天遇到一例enq TX - allocate ITL entry等待事件,就是维护人员打开多个会话更新一个表的某个字段,开始以为等待与undo有关,查 看才发现是"enq TX - allocate ITL entry",因为没有业务操作,建议修改为ctas来建立新表,建立相关索引,然后改名完成操作. 实际上,一般正常的业务操作,很少遇到这个等待事件,如果出现一般是pctfree设置太小或者由于记录程度增大,导致pctfree减少,以及块 上事务太多而导致问题. 做一个简单的比喻

介绍了Oracle数据库锁的种类及研究

本文通过对Oracle数据库锁机制的研究,首先介绍了Oracle数据库锁的种类,并描述了实际应用中遇到的与锁相关的异常情况,特别对经常遇到的由于等待锁而使事务被挂起的问题进行了定位及解决,并对死锁这一比较严重的现象,提出了相应的解决方法和具体的分析过程. 数据库是一个多用户使用的共享资源.当多个用户并发地存取数据时,在数据库中就会产生多个事务同时存取同一数据的情况.若对并发操作不加控制就可能会读取和存储不正确的数据,破坏数据库的一致性. 加锁是实现数据库并发控制的一个非常重要的技术.当事务在对某

ORACLE 归档空间满导致的enq: TX - row lock contention

  2016年10月10日,客户一预警系统发生会话数飙高,系统响应极慢,后来确诊根源是归档空间满,引起所有redo耗尽,导致会话堆积,下面是处理过程.  操作系统:HP-UX B.11.31 U ia64  数据库版本:ORACLE 10.2.0.5 RAC  按照常规处理思路,首先查看RAC数据库的告警日志:  实例1的告警日志 Mon Oct 10 19:24:48 EAT 2016 ORACLE Instance orcl1 - Can not allocate log, archival

ORACLE等待事件:enq: TX - row lock contention

enq: TX - row lock contention等待事件,这个是数据库里面一个比较常见的等待事件.enq是enqueue的缩写,它是一种保护共享资源的锁定机制,一个排队机制,先进先出(FIFO).enq: TX - row lock contention等待事件,OACLE将其归类为application级别的等待事件.有些场景是因为应用逻辑设计不合理造成的.下面我们看看enq: TX - row lock contention的英文介绍: This wait indicates ti

《Oracle数据库性能优化方法论和最佳实践》——3.2 数据库登录流程的相关指标与优化

3.2 数据库登录流程的相关指标与优化 2.6节已经介绍过数据库登录流程的分解如下: Step 1:客户端登录请求. Step 2:listener处理和响应. Step 3:服务进程派生. Step 4:进程初始化和session初始化. Step 5:用户验证和权限判断. Step 6:session审计. Step 7:登录触发器. Step 8:响应客户端. 对于数据库登录流程来说,业务需求表述的输入请求和技术层面的输入请求完全一致.每次数据库登录都对应着一次客户端登录请求,输出响应时间