Дек 292012
 

Начиная с версии 10g, в представлении v$session появилось поле blocking_session, которое содержит SID сессии, блокирующей исходную. В 11.2.0.3 всё стало ещё удобнее, ибо появилось поле final_blocking_session, в котором указан SID сессии, являющейся "корнем" дерева блокировок. Убиваем её и либо всё дерево блокировок разрешается, либо "корнем" становится другая сессия. Как говорится, в таком случае надо смыть, повторить.

Если поля final_blocking_session в v$session нет, то нам поможет иерархический запрос.

Предположим, что нам надо узнать, кто же в конечном счёте заблокировал сессию с SID = 675. Иерархический запрос будем строить начиная с искомой сессии и соединять ветви по полям blocking_session и sid:

SELECT 
	LEVEL, 
	s.sid, 
	s.serial#, 
	s.osuser, 
	s.program,
	s.module,
	s.machine 
FROM v$session s
START WITH sid = 675
CONNECT BY PRIOR s.blocking_session = s.sid
ORDER BY 1 DESC;

Первая строка, которую вернёт запрос - это и будет та самая final_blocking_session. Если нет желания видеть всё дерево, то можно завернуть результат в подзапрос и взять только первую запись.
Этот запрос будет работать начиная с версии 10g.

  4 комментария to “Иерархический запрос к v$session для поиска блокировок”

  1. v$wait_chains еще забыли упомянуть, отличная вью.

  2. А я по идее автора вотактй скрипт бахнул:

    select 
    lpad(' ', 3*level)||sid||'' as Tree_sid, level,username,program
    from v$session a1
    where sid in (select sid FROM v$session
    where blocking_session in (select blocking_session from v$session where blocking_session is not null)
    union
    select blocking_session from v$session where blocking_session is not null)
    start with a1.blocking_session is  null
    connect by prior A1.SID = a1.blocking_session 
    ORDER SIBLINGS BY a1.sid desc
    

 Leave a Reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre lang="" line="" escaped="" cssfile="">

(обязательно)

(обязательно)