查看前端对应的sql脚本_分享几个实用脚本--查看历史会话等待事件对应的session信息...

概述

今天主要介绍下怎么查看历史会话等待事件对应的session信息。

以下基于Oracle11.2.0.4版本。


思路:

以enq: TX - row lock contention等待时间为例。通过如下sql查询到相关的session信息。

select * from DBA_HIST_ACTIVE_SESS_HISTORY where event like '%enq: TX - row lock contention%'

DBA_HIST_ACTIVE_SESS_HISTORY 中的blocking_session字段关联DBA_HIST_ACTIVE_SESS_HISTORY中的session_id找到对应的sql_id从而得到会话信息。

注意此会话需发生在awr快照信息默认的保存天数以内。


1、查看awr时间段

这里选择快照时间段为58525到58569之间。

select to_char(s.startup_time, 'dd Mon "at" HH24:mi:ss') instart_fmt, di.instance_name inst_name, di.db_name db_name, s.snap_id snap_id, to_char(s.end_interval_time, 'dd Mon YYYY HH24:mi') snapdat, s.snap_level lvl from dba_hist_snapshot s, dba_hist_database_instance di where di.dbid = s.dbid and di.instance_number = s.instance_number and di.startup_time = s.startup_time order by db_name, instance_name, snap_id;
9109a0da17557857646ca9cdc44af5ae.png

2、查看等待事件为行锁的session

select a.snap_id, a.sql_id, a.session_id, a.session_serial#, a.blocking_session, a.blocking_session_serial#, a.blocking_session_status from DBA_HIST_ACTIVE_SESS_HISTORY a where event like '%enq: TX - row lock contention%' and snap_id between 58525 and 58569;
0f627da820e6052bc8adf0d9be050772.png

3、查看阻塞会话,并统计阻塞次数

select a.blocking_session, a.blocking_session_serial#, count(a.blocking_session) from DBA_HIST_ACTIVE_SESS_HISTORY a where event like '%enq: TX - row lock contention%' and snap_id between 58525 and 58569 group by a.blocking_session, a.blocking_session_serial# order by 3 desc

阻塞会话466总共阻塞了2152次

d15d441a2ba8c6d9f5e857000fd9200c.png

4、查看阻塞会话的sql_id和被阻塞的sql_id,条件为阻塞大于19次的

select distinct b.sql_id,c.blocked_sql_id,b.session_id,b.session_serial#,b.sql_opname,b.event,b.module,b.program,b.machine from DBA_HIST_ACTIVE_SESS_HISTORY b, (select a.sql_id as blocked_sql_id, a.blocking_session, a.blocking_session_serial#, count(a.blocking_session) from DBA_HIST_ACTIVE_SESS_HISTORY a where event like '%enq: TX - row lock contention%' and snap_id between 58525 and 58569 group by a.blocking_session, a.blocking_session_serial#,a.sql_id having count(a.blocking_session) > 19 order by 3 desc) c where b.session_id = c.blocking_session and b.session_serial# = c.blocking_session_serial# and b.snap_id between 58525 and 58569;
56626ff99c0a008676a925357c80a8b1.png

觉得有用的朋友多帮忙转发哦!后面会分享更多devops和DBA方面的内容,感兴趣的朋友可以关注下~

61f24ccabf849406b29763ab33eeb98d.gif
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值