2026-03-12 20:23:15
This commit is contained in:
61
tpt/swc.sql
Normal file
61
tpt/swc.sql
Normal file
@@ -0,0 +1,61 @@
|
||||
COL obj FOR A30
|
||||
COL objt FOR A50
|
||||
COL wait_chain FOR A300 WORD_WRAP
|
||||
COL distinct_sids FOR 9999 HEAD "#Blkrs"
|
||||
COL "%This" FOR A6
|
||||
|
||||
PROMPT
|
||||
PROMPT -- Display Session Wait Chain Signatures script v0.1 BETA by Tanel Poder ( https://tanelpoder.com )
|
||||
|
||||
|
||||
WITH
|
||||
bclass AS (SELECT /*+ INLINE */ class, ROWNUM r from v$waitstat)
|
||||
, sq AS (
|
||||
SELECT
|
||||
REPLACE(SYS_CONNECT_BY_PATH(&1, '->'), '->', ' -> ')
|
||||
||CASE WHEN CONNECT_BY_ISLEAF = 1 AND ses.blocking_session IS NOT NULL
|
||||
THEN ' -> [idle blocker '||ses.blocking_instance||','||ses.blocking_session||' ('||ses.program||')]' ELSE NULL
|
||||
END path
|
||||
FROM (
|
||||
SELECT
|
||||
s.*
|
||||
, CASE WHEN s.type = 'BACKGROUND' AND s.program LIKE '%(DBW%)' THEN
|
||||
'(DBWn)'
|
||||
WHEN s.type = 'BACKGROUND' OR REGEXP_LIKE(s.program, '.*\([PJ]\d+\)') THEN
|
||||
REGEXP_REPLACE(SUBSTR(s.program,INSTR(s.program,'(')), '\d', 'n')
|
||||
ELSE
|
||||
'('||REGEXP_REPLACE(REGEXP_REPLACE(s.program, '(.*)@(.*)(\(.*\))', '\1'), '\d', 'n')||')'
|
||||
END || ' ' program2
|
||||
, NVL(s.event||CASE WHEN event like 'enq%' AND state = 'WAITING'
|
||||
THEN ' [mode='||BITAND(p1, POWER(2,14)-1)||']'
|
||||
WHEN s.event IN (SELECT name FROM v$event_name WHERE parameter3 = 'class#')
|
||||
THEN ' ['||NVL((SELECT class FROM bclass WHERE r = s.p3),'undo @bclass '||s.p3)||']' ELSE null END,'ON CPU')
|
||||
|| ' ' event2
|
||||
, TO_CHAR(CASE WHEN state = 'WAITING' THEN p1 ELSE null END, '0XXXXXXXXXXXXXXX') p1hex
|
||||
, TO_CHAR(CASE WHEN state = 'WAITING' THEN p2 ELSE null END, '0XXXXXXXXXXXXXXX') p2hex
|
||||
, TO_CHAR(CASE WHEN state = 'WAITING' THEN p3 ELSE null END, '0XXXXXXXXXXXXXXX') p3hex
|
||||
FROM
|
||||
gv$session s
|
||||
) ses, (SELECT
|
||||
object_id,data_object_id,owner,object_name,subobject_name,object_type
|
||||
, owner||'.'||object_name obj
|
||||
, owner||'.'||object_name||' ['||object_type||']' objt
|
||||
FROM dba_objects) o
|
||||
WHERE
|
||||
ses.row_wait_obj# = o.object_id(+)
|
||||
CONNECT BY NOCYCLE
|
||||
( PRIOR ses.blocking_session = ses.sid
|
||||
AND PRIOR ses.blocking_instance = ses.inst_id
|
||||
)
|
||||
START WITH (ses.state='WAITING' AND ses.wait_class!='Idle') AND &2
|
||||
)
|
||||
SELECT
|
||||
COUNT(*) sessions
|
||||
, path wait_chain
|
||||
FROM
|
||||
sq
|
||||
GROUP BY
|
||||
path
|
||||
ORDER BY
|
||||
sessions DESC
|
||||
/
|
||||
Reference in New Issue
Block a user