0

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

4

1 回答 1

1

首先,如果一个请求被 GRANTed,那么它就不会被阻塞;当请求正在等待锁定时发生阻塞。

其次,当你查看哪个进程被哪个阻塞时,通常有一个层次结构,例如,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
)
于 2014-04-24T08:52:05.980 回答