oracle数据库借助ASH报告对enq: TX - row lock contention(行锁阻塞)问题进行排查
1、什么是ASH报告
ASH报告是(Active Session History单词简写) ,利用 ASH 报告可以分析持续时间通常只有几分钟的瞬间性能问题 根据各种维度(如 time、session、module、action 或 sql_id )或这些维度的组合进行确定范围或目标的性能分析,瞬间性能问题持续的时间。
2、生成ASH报告
cmd窗口连接登录到数据库 sqlplus / as sysdba;
在SQL提示符中键入:@?/RDBMS/ADMIN/ashrpt.sql
选择报告输出格式,直接回车默认html,输入生成报告的起时间例如:03/15/25 08:59:00 ,再输入持续时间(分钟)例如:30,最后报告文件名称直接回车使用默认值即可。
报告默认输出到目录C:\Users\Administrator
3、使用报告对行阻塞问题进行排查
从ASH的等待事件发现enq: TX - row lock contention竟然高达88.31%。例如以下所看到的
enq: TX - row lock contention等待事件是一种行的等待事件,以下三种情况会导致此事件出现:
1、多个会话业务更新或者删除同一行记录。2、对创建位图索引的列值更新。3、对主键或唯一键插入相同记录
下一步就是找这个等待事件主要由哪些SQL引起的:点击SQLID栏的链接跳转到对应的sql语句,对语句在业务场景中的应用进行分析,看是否导致了上述说的几种情况产生了行锁争用,进行语句优化或业务逻辑调整即可。
附:ASH报告内容说明
使用 ash 报告,在生成 ash 报告之后,可以重新检索哪些标识为短暂性能问题的信息。ash 报告的内容分成了以下几个部分:
Top Evnets
顶级等待事件部分描述了被抽样会话活动中由用户,后台等产生的顶级等待事件,使用这些信息可以识别是哪些等待事件造成了短暂的性能问题 . 顶级等待事件包含以下部分:
1)Top User Events 顶级用户事件:这部分信息显示了在抽样会话活动中占很高百分比的用户进程等待事件
2 )Top Background Events 顶级后台事件:这部分信息显示了在抽样会话活动中占很高百分比的后台进程等待事件。
3 )Top Event P1/P2/P3 Values 顶级等待事件参数 P1/P2/P3:这部分信息显示了在抽样会话活动中占很高百分比的等待事件的参数值它通过总的等待时间 (%Event) 百分比进行排序后被显示 . 对于每一个等待事件 p1 , p2 , p3 的值与等待事件参数 parameter 1 , parameter 2 , parameter 3 这三个列相关联 。
Load Profile
load profile 部分描述了在抽样的会话活动中的负载分析 . 使用这部分信息可以识别造成短暂性能问题的服务,客户或 sql 命令类型 . 负载概要部分包含以下部分信息 :
1) top service/module:这部分信息显示了在抽样会话活动中占很高百分比的服务和模块信息
2 ) top client ids:这部分信息显示了在抽样会话活动中占很高百分比的客户端的 id 信息它是数据库会话中应用程序的特定标识符
3 ) top sql command types:这部分信息显示了在抽样会话活动中占很高百分比的sql命令类型比如 select 或 update
4 ) top phases of execution:这部分信息显示了在抽样会话活动中占很高百分比的执行步骤比如 sql , pl/sql 和 java 的编译和执行操作 .
Top Sql
顶级 sql 部分描述了抽样会话活动中的顶级 sql 语句,使用这部分信息可以识别出造成短暂性能问题的高负载 sql 语句,顶级 sql 部分包含以下信息 :
1 ) top sql with top events:这部分信息显示了在抽样会话活动中占总的等待事件很高百分比的 sql 语句 .
2 ) top sql with top row sources:这部分信息显示了在抽样会话活动中占很高百分比的 sql 语句和它们的详细执行计划信息 . 通过这部分信息可以识别出哪部分的 sql 执行消耗了大量的 sql 执行时间
3 ) top sql using literals:这部分信息显示了在抽样会话活动中占很高百分比的使用 literal 值的 sql 语句 . 可以重新检查这部分 sql 语句看是否能使用绑定变量来代替 literal 值 .
4 ) top parsing module/action:这部分信息显示了在抽样会话活动中当执行解析 sql 语句时占很高百分比的模块和操作
5 ) complete list of sql text:这部分信息显示了顶级 sql 语句的完整的文本内容
6 ) top pl/sql:这部分信息显示了在抽样会话活动中占很高百分比的 pl/sql 过程 .
7 ) top java:这部分信息显示了在抽样会话活动中占很高百分比的 java 程序
top sessions
这部分信息描述了会话正在等待的一个特定等待事件。使用这部分信息来识别在抽样会话活动中占很高百分比的会话它们可能是造成短暂性能问题的原因 .top sessions 部分包含以下信息 :
1 ) top sessions:这部分信息显示了在抽样会话活动中占很高百分比的等待会话
2 ) top blocking sessions:这部分信息显示了在抽样会话活动中占很高百分比的阻塞会话
3 ) top sessions running pqs:这部分信息显示了哪些在抽样会话活动中占很高百分比的正处于等待的并行查询
top objects/files/latches
这部分信息显示了通常最消耗数据库资源的信息括以下部分 :
1 ) top db objects :这部分信息显示了在抽样会话活动中占所有引用对象很高百分比的数据库对象 ( 比如表和索引 )
2 ) top db files :这部分信息显示了在抽样会话活动中占访问量很高百分比的数据库文件
3 ) top latches:这部分信息显示了在抽样会话活动中占很高百分比的闩锁信息
闩锁是一种简单低级别串行化机制用来保护 sga 中的共享数据结构 . 比如闩锁保护当前访问数据库和缓冲区缓存中数据块结构的用户列表 . 当维护或查找这些结构时服务器或后台进程请求持有闩锁的时间是非常短暂的 . 闩锁的实现依赖于操作系统特别是一个进程等待获取一个闩锁多长时间 .
4 ) Activity over time:这一部分是 ash 报告信息最丰富的一部分 . 这部分信息对于长时间周期的 ash 报告来说因为在分析期间它提供了关于活动和工作负载概要深层次的详细信息 .activity over time 会被分成 10 个时段 . 每个时段的大小基于分析所持续的时间 . 第一个和最后一个时段是奇怪 . 所有内部时段是相等的大小它们可以相互比较 . 例如,如果分析时间持续 10 分钟那么所有的时段将会是每个一分钟 . 然后如果分析时间持续 9 分 30 秒,那么外部的时段可能是每个 15 秒内部的时段可能每个 1 分钟 。
特定时段中每个时段包含的信息如下 :
列 描述
slot time( 持续时间 ) 时段的持续时间
solt count:在时段中抽样会话的数量
event:在时段中顶级的三个等待事件
event count : ash 抽样等待的等待事件的数量
%event :ash 抽样等待的等待事件在整个分析期间所占的百分比
当比较内部时段时,通过识别异常的 event count 和 slot count 列执行一个倾斜分析 .event count 列的异常指示了在抽样会话中等待的等待事件数量增加了 .slot count 列的异常指示活动的会自豪感增加了,因为 ash 数据只从活动会话中进持抽样说明数据库的负载增加了 . 通常来说当活动会话抽样的数理和与这些会话相关的等待事件增加时那么这个时段可能会造成短暂性能问题,
网络参考文献,感谢博主分享:
https://blog.csdn.net/cmbzwa6940/article/details/100298827
https://www.cnblogs.com/yutingliuyl/p/6733676.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· winform 绘制太阳,地球,月球 运作规律
· 上周热点回顾(3.3-3.9)
2022-03-03 oracle 根据节点id递归查询全部的父节点(转载)