【发布时间】:2013-06-30 18:09:48
【问题描述】:
我正在尝试创建一个 SQL 脚本来杀死所有被阻止的进程。
我错过了什么吗?
declare @max_count int, @count int, @sqlstring varchar(100)
declare @spid_table table (spid int NOT NULL)
INSERT @spid_table
select spid
from master.dbo.sysprocesses
where spid in (select blocked from master.dbo.sysprocesses where blocked > 0)
select @max_count = MAX(spid) FROM @spid_table
select top 1 @count = spid from @spid_table
while @count <= @max_count
begin
select @sqlstring = 'kill ' + CONVERT(varchar(4), @count)
exec(@sqlstring)
end
【问题讨论】:
-
一个小错误-
WHERE spid IN (SELECT spid /*blocked*/ ....) -
杀掉被屏蔽的?好吧,射击无辜者,而不是调查欺负者(拦截者)......
-
@RemusRusanu 那么你如何惩罚这个恶霸?有没有更好的方法来找到罪魁祸首?而不是在哪里被阻止 >0?
-
是的,
blocked是拦截器的 SPID。递归地应用,直到找到链的顶部,即阻塞而没有被阻塞的那个。调查那个在做什么。使用像sp_whoisactive这样的工具。
标签: sql sql-server kill kill-process