MSSQL 2005 Режим запроса - S, а Тип запроса - Блокировка
Моя проблема с моей базой данных. Я использую mssql 2005 и Management Studio. Я вижу заблокированные процессы с помощью монитора активности, и там я вижу список заблокированных процессов. Я убил процесс, который заблокирован, используя его process_id, но на этот раз другой процесс блокируется. Я убиваю, но блокировка продолжается как петля. Атрибуты заблокированного процесса: режим запроса =S тип запроса =LOCK AND статус запроса =GRAND. Есть ли кто-нибудь, чтобы помочь мне с этим?
1 ответ
Прежде всего, если запрос ПРЕДОСТАВЛЯЕТСЯ, то он не блокируется; блокировка происходит, когда запрос ожидает блокировки.
Во-вторых, когда вы смотрите, какой процесс по какой блокирован, обычно существует иерархия, например, SPID 63 блокируется SPID 128, но SPID 128 также блокируется SPID 98, который, в свою очередь, блокируется SPID 101 То, что вам нужно, - это определить, кто последний, глава цепочки блокировок, кто блокирует других, но не блокируется сам, и разобраться с этим.
Вот запрос, который поможет вам определить блокировщик головы:
select r.session_id, r.host_name, r.program_name,
r.login_name, r.nt_domain, r.nt_user_name,
r.total_elapsed_time/1000 as total_elapsed_time_sec, getdate() as vrijeme,
(select text from sys.dm_exec_sql_text(c.most_recent_sql_handle)) as sql_text
from sys.dm_exec_connections c
inner join sys.dm_exec_sessions r on r.session_id = c.session_id
where r.is_user_process = 1
and exists (
select *
from sys.dm_os_waiting_tasks r2
where r2.blocking_session_id = r.session_id
)
and not exists (
select *
from sys.dm_os_waiting_tasks r3
where r3.session_id = r.session_id
)