ITPub博客

首页 > 数据库 > Oracle > [20211111]补充完善ash_wait_chains脚本.txt

[20211111]补充完善ash_wait_chains脚本.txt

原创 Oracle 作者:lfree 时间:2021-11-11 10:49:25 1 删除 编辑

[20211111]补充完善ash_wait_chains脚本.txt

--//tanel poder 提供的脚本ash_wait_chains对于分析阻塞很好用.
--//但是我写的命令太长了,昨天查找我以前写的脚本浪费许多时间.我决定把它打个包,便于自己以后调用.

@ tpt/ash/ash_wait_chains BLOCKING_SESSION||','||BLOCKING_SESSION_SERIAL#||',@'||BLOCKING_INST_ID||'=>'||session_id||','||SESSION_SERIAL#||',@'||inst_id||'=>'||event 1=1 sysdate-1/1440 sysdate

--//脚本如下:
$ cat wcx.sql
@ tpt/ash/ash_wait_chains BLOCKING_SESSION||','||BLOCKING_SESSION_SERIAL#||',@'||BLOCKING_INST_ID||'=>'||session_id||','||SESSION_SERIAL#||',@'||inst_id||'=>'||event 1=1 &&1 &&2

$ cat wcy.sql
@ tpt/ash/ash_wait_chains BLOCKING_SESSION||','||BLOCKING_SESSION_SERIAL#||',@'||BLOCKING_INST_ID||'=>'||session_id||','||SESSION_SERIAL#||',@'||inst_id||'=>'||event "&&3" &&1 &&2

--//简单说明一下:
--//参数1 监测开始时间. 参数2 监测结束时间 注意不要有空格 参数3一些过滤条件.我加了双引号.
--//另外取时间范围不要太长,一般取5-10分钟为佳.
--//例子:
@ wcx sysdate-5/1440 sysdate

@ wcy sysdate-1/24 sysdate "event='latch free'"

--//注:第3个参数有空格,必须使用双引号.
--//另外作者还提供dash_wait_chains脚本查询dba_hist_active_sess_history视图.因为阻塞一般很少事后分析,d开头命令我很少用。
--//不过使用时我遇到问题,才发现我写错一个地方。

SYS@book> @tpt/ash/dash_wait_chains "blocking_session||','||blocking_session_serial#||',@'||blocking_inst_id||' => '||session_id||','||session_serial#||'@'||inst_id||' => '||event2" 1=1 sysdate-0.3/1440 sysdate

-- Display ASH Wait Chain Signatures script v0.6 BETA by Tanel Poder ( https://tanelpoder.com )
      , REPLACE(SYS_CONNECT_BY_PATH(blocking_session||','||blocking_session_serial#||',@'||blocking_inst_id||' => '||session_id||','||session_serial#||'@'||inst_id||' => '||event2, '->'), '->', ' -> ')||CASE WHEN CONNECT_BY_ISLEAF = 1 AND d.blocking_session IS NOT NULL THEN ' -> [idle blocker '||d.blocking_inst_id||','||d.blocking_session||','||d.blocking_session_serial#||(SELECT ' ('||s.program||')' FROM gv$session s WHERE (s.inst_id, s.sid , s.serial#) = ((d.blocking_inst_id,d.blocking_session,d.blocking_session_serial#)))||']' ELSE NULL END path -- there's a reason why I'm doing this
                                                                                                                                                            *
ERROR at line 63:
ORA-00904: "INST_ID": invalid identifier

--//顺便说一下前几天我升级了ash_wait_chains.sql,dash_wait_chains.sql,因为链接
--//http://blog.itpub.net/267265/viewspace-2795478/ => [20211012]ORA-12850.txt  的原因。
--//理论讲两个脚本的区别就算一个访问v$active_session_history,另外一个访问dba_hist_active_sess_history的区别。
--//对比两个视图结构才发现dba_hist_active_sess_history使用INSTANCE_NUMBER。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/267265/viewspace-2841682/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
熟悉oracle相关技术,擅长sql优化,rman备份与恢复,熟悉linux shell编程。

注册时间:2008-01-03

  • 博文量
    4006
  • 访问量
    7969593