Wykrywanie blokujących zapytań to jedno z zadań administratora baz danych. Administrator powinien dysponować gotowym zapytaniem umożliwiającym natychmiastowe zdobycie informacji na temat sesji, w ramach których zostały uruchomione zapytania blokujące inne zapytania. Poniżej przykładowe zapytanie realizujące to zadanie.
SELECT
r.session_id AS blocked_session_id,
t.text AS blocked_batch,
r.blocking_session_id,
(
SELECT t1.text
FROM sys.dm_exec_connections AS r1
CROSS APPLY
sys.dm_exec_sql_text(r1.most_recent_sql_handle
) AS t1
WHERE r1.session_id = r.blocking_session_id
) AS blocking_batch,
s.login_name AS blocking_login_name,
s.host_name AS blocking_host_name,
s.program_name AS blocking_program_name
FROM sys.dm_exec_requests AS r
INNER JOIN sys.dm_exec_sessions AS s
ON r.blocking_session_id = s.session_id
CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) AS t
WHERE r.blocking_session_id <> 0;
Patrz też:
jak wyświetlić listę sesji MS SQLserwer 2008