收到告警短信:

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等待事件处理的更多相关文章

  1. Tuning “enq:TX – row lock contention” events

    enq是一种保护共享资源的锁定机制,一个排队机制 排它机制从一个事务的第一次改变直到rollback or commit 结束这个事务, TX等待mode是6,当一个session 在一个表的行级锁定 ...

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

    enq: TX - row lock contention等待事件,这个是数据库里面一个比较常见的等待事件.enq是enqueue的缩写,它是一种保护共享资源的锁定机制,一个排队机制,先进先出(FIF ...

  3. 大表建立索引引发enq: TX - row lock contention等待

    今天要给一张日志表(6000w数据)建立索引,导致生产系统行锁部分功能卡住 create index idx_tb_cid on tb_login_log(user_id); 开始执行后大概花费了20 ...

  4. enq: TX - row lock contention“等待事件的处理

      enq: TX - row lock contention“等待事件的处理   session1: SQL> conn scott/triger Connected. SQL> CRE ...

  5. 解决一则enq: TX – row lock contention的性能故障

    上周二早上,收到项目组的一封邮件: 早上联代以下时间点用户有反馈EDI导入"假死",我们跟踪了EDI导入服务,服务是正常在跑,可能是处理的慢所以用户感觉是"假死" ...

  6. oracle 11g enq: JI – contention等待事件

    最近使用物化视图同步的环境在大量刷新的时候频繁出现enq: JI – contention等待事件,经查: JI enqueue is acquired in exclusive mode on th ...

  7. AWR之-enq TX - row lock contention的性能故障-转

    1 对这一个小时进行AWR的收集和分析,首先,从报告头中看到DB Time达到近500分钟,(DB Time)/Elapsed=8,这个比值偏高:   Snap Id Snap Time Sessio ...

  8. [Oracle] enq: TX - row lock contention 优化案例

    依据开发反馈.近期每天早上7:30应用会报警.应用的日志显示数据库连接池满了.新的连接被拒绝. 首先.我做了ASH报告(报告区间:7:25 ~ 7:35),从ASH的等待事件发现enq: TX - r ...

  9. 记一则update 发生enq: TX - row lock contention 的处理方法

    根据事后在虚拟机中复现客户现场发生的情况,做一次记录(简化部分过程,原理不变) 客户端1执行update语句 SQL> select * from test; ID NAME --------- ...

随机推荐

  1. urllib的实现---timeout,获取http响应码,重定向,proxy的设置

    1.Timeout设置超时 只能修改Socket设置全局Timeout #! /usr/bin/env python3 import socket import urllib.request # ti ...

  2. js中获取css样式属性值

    关于js中style,currentStyle和getComputedStyle几个注意的地方 (1)用js的style只能获取元素的内联样式,内部样式和外部样式使用style是获取不到的.针对css ...

  3. 计算机网络实验八实验报告——应用Packet Tracer 5.0模拟器工具对WLAN进行配置

    计算机网络实验八实验报告 一.实验目的 1.熟练使用Packet Tracer 5.0模拟器: 2.应用Packet Tracer 5.0模拟器工具对WLAN进行配置. 二.实验环境 一台PC机. 模 ...

  4. js 触摸的Event--获取触摸位置

    继上一篇js原生拖拽之后,现在又来写一下移动端touch列表,获取触摸位置.pc端的event事件,鼠标的位置信息在上一篇,点此进入上一篇. touch有3个事件:touchstart,touchmo ...

  5. nodejs的某些api~(六)HTTPS

    node的HTTPS模块接口与HTTP其实差不多,就是多了一个认证证书,私钥的配置等等,API都相似的. 在客户端服务器通信的方法中,只有HTTPS是最安全的,它的原理是客户端和服务器发送自己的公钥, ...

  6. 在Vue框架中使用百度地图

    1.首先在index.html中引入百度地图 <script type="text/javascript" src="http://api.map.baidu.co ...

  7. ggplot2画histogram(坐标轴刻度值字体大小,坐标轴标题字体大小,柱形宽度,大标题字体大小、居中)

    见链接:https://www.r-bloggers.com/how-to-make-a-histogram-with-ggplot2/ 写的很完整. 此外,关于一些参数的用法: theme(plot ...

  8. Serlect的笔记二(request 、 ersponse)

    Web服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的request对象.和代表响应的response对象. 下面这两个对象的基本理解: 一.HttpServletRequ ...

  9. Codeforce 867 C. Ordering Pizza (思维题)

    C. Ordering Pizza It's another Start[c]up finals, and that means there is pizza to order for the ons ...

  10. 原生JS实现全选和不全选

    案例演示 源代码 <!DOCTYPE html> <html> <head lang="en"> <meta charset=" ...