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

简介: 朋友公司的某铁路集团医保系统出现性能问题业务不能正常办理,下面是出现性能问题时的awr报告 从等待事件来看主要是出现了多处锁竞争.

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

2

3

4

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

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

Enq:TX – row lock contention 等待事件,主要是由于要修改的记录已经被其它会话所持有排他锁产生的.通过查看Segments by Row Lock Waits信息可以看出主要是由sys_serial表产生的.
7
这是一个手工维护各业务表的主键序列的表.而不是选择由序列生成器来生成主键造成的.语句为
select cur_num_no from SYS_SERIAL where serial_type=:"SYS_B_0" for update
8

由上面的信息可知产生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报告如下
9

10

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

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

12

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

13

14

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

16

现在数据库运行较好.

问题原因有以下两个
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这个问题需要修改各业表主键的生成方式比如使用序列生成器.

目录
相关文章
|
20天前
|
存储 Oracle 关系型数据库
数据库数据恢复—ORACLE常见故障的数据恢复方案
Oracle数据库常见故障表现: 1、ORACLE数据库无法启动或无法正常工作。 2、ORACLE ASM存储破坏。 3、ORACLE数据文件丢失。 4、ORACLE数据文件部分损坏。 5、ORACLE DUMP文件损坏。
68 11
|
1月前
|
Oracle 关系型数据库 数据库
Oracle数据恢复—Oracle数据库文件有坏快损坏的数据恢复案例
一台Oracle数据库打开报错,报错信息: “system01.dbf需要更多的恢复来保持一致性,数据库无法打开”。管理员联系我们数据恢复中心寻求帮助,并提供了Oracle_Home目录的所有文件。用户方要求恢复zxfg用户下的数据。 由于数据库没有备份,无法通过备份去恢复数据库。
|
1月前
|
存储 Oracle 关系型数据库
oracle数据恢复—Oracle数据库文件大小变为0kb的数据恢复案例
存储掉盘超过上限,lun无法识别。管理员重组存储的位图信息并导出lun,发现linux操作系统上部署的oracle数据库中有上百个数据文件的大小变为0kb。数据库的大小缩水了80%以上。 取出&并分析oracle数据库的控制文件。重组存储位图信息,重新导出控制文件中记录的数据文件,发现这些文件的大小依然为0kb。
|
26天前
|
存储 Oracle 关系型数据库
服务器数据恢复—华为S5300存储Oracle数据库恢复案例
服务器存储数据恢复环境: 华为S5300存储中有12块FC硬盘,其中11块硬盘作为数据盘组建了一组RAID5阵列,剩下的1块硬盘作为热备盘使用。基于RAID的LUN分配给linux操作系统使用,存放的数据主要是Oracle数据库。 服务器存储故障: RAID5阵列中1块硬盘出现故障离线,热备盘自动激活开始同步数据,在同步数据的过程中又一块硬盘离线,RAID5阵列瘫痪,上层LUN无法使用。
|
4月前
|
监控 Oracle 关系型数据库
"深度剖析:Oracle SGA大小调整策略——从组件解析到动态优化,打造高效数据库性能"
【8月更文挑战第9天】在Oracle数据库性能优化中,系统全局区(SGA)的大小调整至关重要。SGA作为一组共享内存区域,直接影响数据库处理能力和响应速度。本文通过问答形式介绍SGA调整策略:包括SGA的组成(如数据缓冲区、共享池等),如何根据负载与物理内存确定初始大小,手动调整SGA的方法(如使用`ALTER SYSTEM`命令),以及利用自动内存管理(AMM)特性实现智能调整。调整过程中需注意监控与测试,确保稳定性和性能。
397 2
|
5月前
|
存储 缓存 Oracle
Oracle数据库可扩展性和性能
【7月更文挑战第6天】
98 7
|
存储 SQL 负载均衡
达梦数据库与Oracle数据库:功能、性能和适用场景对比
数据库在现代信息技术领域中扮演着至关重要的角色。在企业级应用中,选择正确的数据库管理系统对于数据存储、处理和查询效率至关重要。本文将对比两个备受关注的数据库管理系统——达梦数据库和Oracle数据库,从功能、性能和适用场景等方面进行深入探讨,以帮助读者在选择合适数据库时做出明智的决策。
2876 1
|
SQL Oracle 安全
Oracle优化01-引起数据库性能问题的因素
Oracle优化01-引起数据库性能问题的因素
175 0

推荐镜像

更多