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

目录
相关文章
|
1天前
|
SQL 存储 Oracle
Oracle数据库SQL语句详解与应用指南
在数字化时代,数据库已成为各类企业和组织不可或缺的核心组件。Oracle数据库作为业界领先的数据库管理系统之一,广泛应用于各种业务场景。掌握Oracle数据库的SQL语句是数据库管理员、开发人员及运维人员的基本技能。本文将详细介绍Oracle数据库SQL语句的基本概念、语法、应用及最佳实践。一、Or
14 3
|
14天前
|
Oracle 关系型数据库 数据库
Oracle数据恢复—异常断电导致Oracle数据库数据丢失的数据恢复案例
Oracle数据库故障: 机房异常断电后,Oracle数据库启库报错:“system01.dbf需要更多的恢复来保持一致性,数据库无法打开”。数据库没有备份,归档日志不连续。用户方提供了Oracle数据库的在线文件,需要恢复zxfg用户的数据。 Oracle数据库恢复方案: 检测数据库故障;尝试挂起并修复数据库;解析数据文件。
|
14天前
|
Oracle NoSQL 关系型数据库
主流数据库对比:MySQL、PostgreSQL、Oracle和Redis的优缺点分析
主流数据库对比:MySQL、PostgreSQL、Oracle和Redis的优缺点分析
42 2
|
14天前
|
缓存 关系型数据库 MySQL
MySQL数据库优化:提升性能和扩展性的关键技巧
MySQL数据库优化:提升性能和扩展性的关键技巧
39 2
|
1天前
|
SQL 数据处理 数据库
警惕!这八个 SQL 习惯正在拖垮数据库性能
【10月更文挑战第3天】在日常的数据库开发与维护工作中,编写高效、清晰的SQL语句是每位数据工程师的必修课。然而,不当的SQL编写习惯不仅能降低查询效率,还可能给同事的工作带来不必要的困扰。今天,我们就来揭秘八种常见的“专坑同事”SQL写法,助你避免成为那个无意间拖慢整个团队步伐的人。
8 0
|
1天前
|
SQL 数据处理 数据库
SQL语句优化与查询结果优化:提升数据库性能的实战技巧
在数据库管理和应用中,SQL语句的编写和查询结果的优化是提升数据库性能的关键环节
|
1天前
|
SQL 存储 数据库
慢SQL对数据库写入性能的影响及优化策略
在数据库管理系统中,慢SQL(即执行缓慢的SQL语句)不仅会影响查询性能,还可能对数据库的写入性能产生不利影响
|
24天前
|
缓存 关系型数据库 数据库
如何优化 PostgreSQL 数据库性能?
如何优化 PostgreSQL 数据库性能?
26 2
|
2天前
|
监控 druid Java
HikariCP:数据库连接池性能新标杆
【10月更文挑战第2天】在Java应用开发中,数据库连接池作为提升数据库访问性能的关键组件,其重要性不言而喻。长期以来,Druid以其强大的监控、扩展性和稳定性,在业界赢得了广泛的认可与应用。然而,近年来,一个名为HikariCP的轻量级连接池逐渐崭露头角,以其惊人的速度和低资源消耗,挑战着Druid的霸主地位。今天,我们就来深入探讨,HikariCP为何能够如此迅速地“干掉”传统连接池,成为新的性能标杆。
13 0
|
5天前
|
存储 关系型数据库 MySQL
四种数据库对比MySQL、PostgreSQL、ClickHouse、MongoDB——特点、性能、扩展性、安全性、适用场景
四种数据库对比 MySQL、PostgreSQL、ClickHouse、MongoDB——特点、性能、扩展性、安全性、适用场景

推荐镜像

更多