一次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 --------- ...
随机推荐
- 【原创】线段树query模板对比! 新手线段树的一个容易出错的问题!!因为我就糊涂了一整天.......
我们解决问题的最好方法就是拿实例来举例子 我们来看tyvj1038或计蒜客 “管家的忠诚” 老管家是一个聪明能干的人.他为财主工作了整整10年,财主为了让自已账目更加清楚.要求管家每天记k次账,由于管 ...
- luogu3292 幸运数字 (点分治+线性基)
首先第一眼是一个倍增套线性基,但是$O(Qlog^2Vlog^N)=10^{10}$的复杂度... 即使是st表也只是变成了$O(Nlog^2Vlog^N)$啊 考虑点分治,相对于倍增显著减少了线性基 ...
- http_proxy_module模块常用参数
Nginx的upstream模块相当于是建立一个函数库一样,把后端的服务器地址放在了一个池子里,而proxy模块则是从这个池子里调用了这些服务器. http_proxy_module模块常用参数: p ...
- NowCoder--牛可乐发红包脱单ACM赛C_区区区间间间
题目链接:C_区区区间间间 思路:算贡献,求出每个数为当前最大值时所在的区间个数,和每个数为最小值的区间个数 和这个题有点类似 搭配食用效果更佳 点击这里 #include<bits/stdc+ ...
- MyBatis深入浅出--入门
mybatis概述 mybatis简介 MyBatis 是支持定制化 SQL.存储过程以及高级映射的优秀的持久层框架. MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集. ...
- Arcgis for qml - 鼠标拖拽移动
以实现鼠标拖拽文本图层为例 GitHub:ArcGIS拖拽文本 作者:狐狸家的鱼 目的是利用鼠标进行拖拽. 实现两种模式,一种是屏幕上的拖拽,第二种是地图上图层的挪动. 屏幕上的拖拽其实跟ArcGIS ...
- How MVC pattern Flows
以上MVC流程中Model和View不存在依赖关系 以上MVC流程View和Model存在耦合关系(依赖关系越少越好)
- 你真的知道什么是【共享Session】,什么是【单点登录】吗?
一直有人问,为什么我实现的共享session不能单点登录,今天我也抽时间准备好好说一下. 我要喷(别喷我) 首先,网上水货文章很多,CSDN居多.CSDN转载率很高,也就是说同相同文章有很多,换汤不换 ...
- linux下静态库和动态库的制作
一.静态库 1.编写.c文件,在其中实现函数源代码,同时制作头文件 2.将.c文件转为.o文件 gcc -c xxx.c -o xxx.o 3.将*.o转换成库文件 a ...
- JS事件(三)部分常用事件
1.滚动条事件scroll EventUtil.addHandler(window,"scroll",function(event){ if(document.compatMode ...