Продолжая серию шпаргалок по Oracle - сегодня речь пойдет о блокировках.
Вариантов, когда образуется толпа ждущих сессий, может быть масса, и у каждого DBA есть свой набор разнообразных селектов для вычисления "вредных" транзакций.
Вскрываю свою копилку:
Вариант 1
Вариант 2 (oracle 10g and higher)
Можно еще использовать представление DBA_BLOCKERS.
via
Вариантов, когда образуется толпа ждущих сессий, может быть масса, и у каждого DBA есть свой набор разнообразных селектов для вычисления "вредных" транзакций.
Вскрываю свою копилку:
Вариант 1
SELECT h.sid as Holder, w.sid as Waiter, h.id1, h.id2, h.lmode, h.request, h.type, h.ctime, w.ctime as wtime FROM V$LOCK h, V$LOCK w WHERE (h.id1, h.id2, h.type) IN ((w.id1, w.id2, w.type)) AND h.request=0 AND w.request>0
Вариант 2 (oracle 10g and higher)
with b as ( select vb.sid, vb.blocking_session from v$session vb where vb.blocking_session is not null ), s as ( select vs.sid from v$session vs where vs.sid in (select b.blocking_session from b ) ) select v.blocking_session,v.sid,v.serial#,v.osuser, v.username,v.status,v.machine, v.program,v.module,v.action, v.blocking_session_status,v.blocking_instance,v.event,v.state,v.saddr, v.sql_id,v.sql_hash_value,v.prev_sql_id,v.prev_hash_value, v.ROW_WAIT_OBJ#,v.ROW_WAIT_BLOCK#,v.ROW_WAIT_ROW#,v.ROW_WAIT_FILE# from v$session v where (v.sid in (select sid from b) or v.sid in (select sid from s) ) order by 1 nulls last
Можно еще использовать представление DBA_BLOCKERS.
via
Комментариев нет:
Отправить комментарий