查找SQL Server Blocking进程

来源:互联网 发布:java游戏内购破解版 编辑:程序博客网 时间:2024/05/27 20:12

更新数据仓库的时候,遇到有人正在查询报表,会导致更新操作无法进行。

比较简单粗暴的方法是查找到blocking进程,把它强行杀掉:P


1.查找blocking进程。SPID为进程号,QUERY为进程的查询TSQL语句,先观察以避免误杀。

SELECT SPID=p.spid,
       DBName = convert(CHAR(20),d.name),
       ProgramName = program_name,
       LoginName = convert(CHAR(20),l.name),
       HostName = convert(CHAR(20),hostname),
       Status = p.status,
       BlockedBy = p.blocked,
       LoginTime = login_time,
       QUERY = CAST(TEXT AS VARCHAR(MAX))
FROM   MASTER.dbo.sysprocesses p
       INNER JOIN MASTER.dbo.sysdatabases d
         ON p.dbid = d.dbid
       INNER JOIN MASTER.dbo.syslogins l
         ON p.sid = l.sid
       CROSS APPLY sys.dm_exec_sql_text(sql_handle)
WHERE  p.blocked = 0
       AND EXISTS (SELECT 1
                   FROM   MASTER..sysprocesses p1
                   WHERE  p1.blocked = p.spid)

2.杀掉进程

KILL SPID -- 进程号,整数




0 0