关于SQLServer死锁的诊断和定位
在SQLServer中经常会发生死锁情况,必须连接到企业管理器—>管理—>当前活动—>锁/进程 ID去查找相关死锁进程和定位死锁的原因。
通过查询分析器也要经过多个系统表(sysprocesses,sysobjects等)和系统存储过程(sp_who,sp_who2,sp_lock等),而且不一定能够直接定位到。
本存储过程参考sp_lock_check和sysprocesses系统表,同时利用了DBCC命令,直接将死锁和造成死锁的进程和相关语句列出,以方便分析和定位。
Create procedure sp_check_deadlock as set nocount on /* select --创建被锁进程临时表 --创建之间的关联表 DECLARE dbcc_inputbuffer CURSOR READ_ONLY DECLARE @lockedspid int FETCH NEXT FROM dbcc_inputbuffer INTO @belockedspid,@lockedspid WHILE (@@fetch_status <> -1) --print '被堵塞进程' INSERT INTO #tempbelocktracestatus INSERT INTO #templocktracestatus INSERT INTO #locktracestatus END FETCH NEXT FROM dbcc_inputbuffer INTO @belockedspid,@lockedspid END CLOSE dbcc_inputbuffer DEALLOCATE dbcc_inputbuffer select * from #locktracestatus return (0) -- sp_check_deadlock |
执行该存储过程
exec sp_check_deadlock |
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/6517/viewspace-350618/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/6517/viewspace-350618/