Sunday, December 6, 2020

Check Table Lock History information using v$active_session_history:



 Lock History information – v$active_session_history:
====================================================
SELECT LEVEL,
sample_time,
session_id  blocked_sid,
connect_by_root blocking_session ultimate_blocker_sid,
Sys_connect_by_path(blocking_session, ‘/’)
|| ‘/’
|| session_id  blocking_path
FROM   (— Blocked Sessions
SELECT s.session_id,
s.blocking_session,
s.sample_time
FROM   v$active_session_history s
–s.dbid = 70854992
— AND s.instance_number = 1
–AND s.snap_id BETWEEN 62234 and 62235
WHERE  s.blocking_session IS NOT NULL
AND s.event IN ( ‘enq: TX – row lock contention’ )
UNION
— Blocking Sessions
SELECT s.session_id,
s.blocking_session,
s.sample_time
FROM   v$active_session_history s
— s.dbid =
–AND s.instance_number = 1
–AND s.snap_id BETWEEN 622 and 629
WHERE  s.blocking_session IS NULL
AND s.event IN ( ‘enq: TX – row lock contention’,
‘enq: TM – contention’
,
‘enq: UL – contention’,
‘enq: TX – allocate ITL entry’ )
AND EXISTS (SELECT ‘exists’
FROM   v$active_session_history bs
–bs.dbid = 70854992
–AND bs.instance_number = 1
–AND bs.snap_id BETWEEN 622 and 629
WHERE  bs.blocking_session = s.session_id
AND bs.sample_time = s.sample_time
AND bs.blocking_session IS NOT NULL
AND bs.event IN (
‘enq: TX – row lock contention’ )))
CONNECT BY NOCYCLE PRIOR session_id = blocking_session
AND PRIOR sample_time = sample_time
ORDER  BY sample_time; 
========================================================

What we can do, if the required information not found in v$active_session_history?

We can get it from dba_hist_active_sess_history view.

========================================================

SELECT LEVEL,
sample_time,
session_id                       blocked_sid,
connect_by_root blocking_session ultimate_blocker_sid,
Sys_connect_by_path(blocking_session, ‘/’)
|| ‘/’
|| session_id                    blocking_path
FROM   (— Blocked Sessions
SELECT s.session_id,
s.blocking_session,
s.sample_time
FROM   dba_active_sess_history s
— WHERE s.dbid = 70854992
— AND s.instance_number = 1
WHERE  s.snap_id BETWEEN ‘&StSnap’ AND ‘&EdSnap’
AND s.blocking_session IS NOT NULL
AND s.event IN ( ‘enq: TX – row lock contention’,
‘enq: TM – contention’,
‘enq: UL – contention’,
‘enq: TX – allocate ITL entry’ )
UNION
— Blocking Sessions
SELECT s.session_id,
s.blocking_session,
s.sample_time
FROM   dba_active_sess_history s
— s.dbid = 70854992
— s.instance_number = 1
WHERE  s.snap_id BETWEEN ‘&StSnap’ AND ‘&EdSnap’
AND s.blocking_session IS NULL
AND s.event IN ( ‘enq: TX – row lock contention’,
‘enq: TM – contention’
,
‘enq: UL – contention’,
‘enq: TX – allocate ITL entry’ )
AND EXISTS (SELECT ‘exists’
FROM   dba_hist_active_sess_history bs
— bs.dbid = 70854992
— bs.instance_number = 1
WHERE  bs.snap_id BETWEEN ‘&StSnap’ AND ‘&EdSnap’
AND bs.blocking_session = s.session_id
AND bs.sample_time = s.sample_time
AND bs.blocking_session IS NOT NULL
AND bs.event IN (
‘enq: TX – row lock contention’,
‘enq: TM – contention’,
‘enq: UL – contention’,
‘enq: TX – allocate ITL entry’
)))
CONNECT BY NOCYCLE PRIOR session_id = blocking_session
AND PRIOR sample_time = sample_time
ORDER  BY LEVEL DESC,
blocked_sid,

sample_time; 

No comments:

Post a Comment