MSSQL 2005请求模式为S,请求类型为锁定

时间:2014-04-24 08:42:35

标签: sql-server database locking database-locking

我的问题是我的数据库。我使用mssql 2005和管理工作室。我可以通过使用活动监视器看到被阻止的进程,在那里我看到一个被阻止的进程列表。我使用其process_id杀死了阻止的进程,但这次阻止了另一个进程。我正在杀戮,但阻止仍在循环中继续。被阻止的进程'attirubites是请求模式= S请求类型= LOCK AND请求状态= GRAND。有人帮我这个吗?

1 个答案:

答案 0 :(得分:1)

首先,如果请求被授予,则不会被阻止;当请求等待锁定时发生阻塞。

其次,当您查看哪个进程被阻塞时,通常会有一个层次结构,例如,SPID 63被SPID 128阻止,但SPID 128也被SPID 98阻止,而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
)