一次enq: TX - index contention等待事件处理
收到告警短信:
BOMC一般告警,告警2次,最后告警时间:03-03 22:21,监控对象:/XX系统/数据库/ORACLE数据库/XXX.XX.XX.XX*XXXDB_LE_DBS/ORACLE实例/XXX.XX.XX.XX*XXXDB2_LE_DBS,告警内容:实时检查,ip:XXX.XX.XX.XX,程序长时间持有锁数量大于1,当前值为2[BOMC]
一般数据库存在锁为正常情况,也可判断为瞬时值,但是持续收到三次的告警信息,于是登录数据库检查一下情况。
检查数据库等待事件:

查看到涉及到相同的SQL语句,等待事件为enq: TX - index contention,请求模式为4,并且与gc cr块争用(Gc cr request 表示2节点中访问的数据并不在本地缓存中,需要从1节点的缓存中读取并传输到本地的过程引起的一致性读等待)。
查看到SQL语句是插入数据事务操作,咨询相关人员每天为定时插入数据操作,并且确认存在业务堆积情况,首先确认可以先杀该会话。
杀完会话后,还是持续有会话连接进来,并且涉及等待时间同上面一致。
对于mos上面对enq: TX - index contention等待事件的解释(Troubleshooting 'enq: TX - index contention' Waits (文档 ID 873243.1)):

一般出现在对表的高并发的DML操作时,当一个事务需要向一个索引块插入数据时,该索引块正好发生了索引分裂,则插入事务需要等待分裂事务;
或者采取更简便的方法,收集问题时段的AWR报告,检查部分指标:


紧急处理:
a) 降低应用并发度,降低index争用;
b) 使用反向索引重建,或使用hash分区重建索引;
c) 如索引字段使用sequence,可考虑增加sequence cache来增加键值跳度避免争用。
根据上面的思路,通过SQL_TEXT语句定位涉及该等待事件的对象,查询是否有其他的会话对这个对象高并发操作:
既然当前还是存在等待事件,那么直接通过视图查询信息:
查找正在执行的对象信息
select sid,serial#,sql_id,machine,program,status from v$session where sql_id in(select sql_id from v$sql_plan where OBJECT_NAME=upper('XXXX_201803'));


通过对象定位,可以看到节点1开启并行度为10对这个表进行删除数据,且根据参数CPU该并行度也存在不合理设置,并且program为sqlplus发起的语句会话。可以判断出是人为操作或者是定时任务运行该语句。同时可以在主机层面发现存在多个ora_p进程,可以反向定位SQL.
咨询该业务人员,该操作为清理历史数据部署的定时任务脚本。说明情况及KILL的风险后确认可以对该会话KILL。
根据实际业务注意评估回滚事务相关信息,加快回滚速度参数FAST_START_PARALLEL_ROLLBACK = HIGH,undo信息。
业务侧kill该会话,数据库KILL会话。对这个会话进行处理后,节点二的enq: TX - index contention等待时间消失,业务反馈没有延迟情况。
虽然该等待事件已经处理了,但是从SQL语句看出并行删除是很大的事务操作,查看该事务回滚情况:

事务回滚后,后续处理:
该等待一般由于业务繁忙导致,通过降低并发或调整索引可以避免,反向索引由于对范围查询有一定影响,需要进行评估,hash索引分区也可以一定程度避免争用。
根据该情况,业务侧对这个定时脚本进行调整:调整并行度,并且减少删除数据条数循环,加快删除提交。
PS:后续注意事项部分继续更新。
一次enq: TX - index contention等待事件处理的更多相关文章
- Tuning “enq:TX – row lock contention” events
enq是一种保护共享资源的锁定机制,一个排队机制 排它机制从一个事务的第一次改变直到rollback or commit 结束这个事务, TX等待mode是6,当一个session 在一个表的行级锁定 ...
- ORACLE等待事件:enq: TX - row lock contention
enq: TX - row lock contention等待事件,这个是数据库里面一个比较常见的等待事件.enq是enqueue的缩写,它是一种保护共享资源的锁定机制,一个排队机制,先进先出(FIF ...
- 大表建立索引引发enq: TX - row lock contention等待
今天要给一张日志表(6000w数据)建立索引,导致生产系统行锁部分功能卡住 create index idx_tb_cid on tb_login_log(user_id); 开始执行后大概花费了20 ...
- enq: TX - row lock contention“等待事件的处理
enq: TX - row lock contention“等待事件的处理 session1: SQL> conn scott/triger Connected. SQL> CRE ...
- 解决一则enq: TX – row lock contention的性能故障
上周二早上,收到项目组的一封邮件: 早上联代以下时间点用户有反馈EDI导入"假死",我们跟踪了EDI导入服务,服务是正常在跑,可能是处理的慢所以用户感觉是"假死" ...
- oracle 11g enq: JI – contention等待事件
最近使用物化视图同步的环境在大量刷新的时候频繁出现enq: JI – contention等待事件,经查: JI enqueue is acquired in exclusive mode on th ...
- AWR之-enq TX - row lock contention的性能故障-转
1 对这一个小时进行AWR的收集和分析,首先,从报告头中看到DB Time达到近500分钟,(DB Time)/Elapsed=8,这个比值偏高: Snap Id Snap Time Sessio ...
- [Oracle] enq: TX - row lock contention 优化案例
依据开发反馈.近期每天早上7:30应用会报警.应用的日志显示数据库连接池满了.新的连接被拒绝. 首先.我做了ASH报告(报告区间:7:25 ~ 7:35),从ASH的等待事件发现enq: TX - r ...
- 记一则update 发生enq: TX - row lock contention 的处理方法
根据事后在虚拟机中复现客户现场发生的情况,做一次记录(简化部分过程,原理不变) 客户端1执行update语句 SQL> select * from test; ID NAME --------- ...
随机推荐
- html块、含样式的标签
html块 1.div标签 块元素,表示一块内容,没有具体的语义. 2.span标签 行内元素,表示一行中的一小段内容,没有具体的语义. 含样式和语义的标签 1.em标签 行内元素,表示语气中的强调词 ...
- luogu3292 幸运数字 (点分治+线性基)
首先第一眼是一个倍增套线性基,但是$O(Qlog^2Vlog^N)=10^{10}$的复杂度... 即使是st表也只是变成了$O(Nlog^2Vlog^N)$啊 考虑点分治,相对于倍增显著减少了线性基 ...
- Star sky CodeForces - 835C
用一个三维数组cnt[x][y][k]表示从(1, 1)到(x, y)亮度为k的个数,然后查询的时候就是对于每一个亮度,计算出这个亮度t秒后的亮度和当前这个亮度的个数,答案就是他们的乘积, 然后遍历每 ...
- selenium的等待~
既然使用了selenium,那么必然牺牲了一些速度上的优势,但由于公司网速不稳定,导致频频出现加载报错,这才意识到selenium等待的重要性. 说到等待又可以分为3类, 1.强制等待 time.sl ...
- linux下的标准输出和错误输出重定向
如果想要将对应信息输出到某个文件中,就用对应的数字加上重定向符号“>”,会将这些信息,重新定向到指定的文件中,即可.简单说明:系统默认的stdin,stdout,stderr,都是送往屏幕,所以 ...
- 工作笔记:/bin/bash^M: 坏的解释器: 没有那个文件或目录 问题解决
问题原因: 由于windows上换行符为CR LF而在Linux下是 LF 导致出现上述问题 解决方案 1. 在windows下 可以使用nodepad打开该shell文件,然后将shell文件中的格 ...
- Dubbo x Cloud Native 服务架构长文总结(很全)
Dubbo x Cloud Native 服务架构长文总结(很全) mercyblitz SpringForAll社区 3天前 分享简介 Cloud Native 应用架构随着云技术的发展受到业界特别 ...
- ssh整合hibernate 使用spring管理hibernate二级缓存,配置hibernate4.0以上二级缓存
ssh整合hibernate 使用spring管理hibernate二级缓存,配置hibernate4.0以上二级缓存 hibernate : Hibernate是一个持久层框架,经常访问物理数据库 ...
- docker学习5--docker数据卷(volume)
https://blog.csdn.net/dream_broken/article/details/52314993 1.什么是数据卷volume 为了了解什么是Docker Volume,首先我们 ...
- 回调函数: 一定要在函数名前加上 CALLBACK,否则有可能引起内存崩溃!
今天又遇到一个莫名其妙的内存崩溃问题,问题代码 EnumChildWindows(...): EnumChildWindows(hwnd_panel_text_watermark, (WNDENUMP ...