Create procedure sp_check_deadlock as set nocount on /* selectITPUB个人空间6lE|*`f4`/0jE spid 被锁进程 ID, Mao^#Qz9w~6517 blocked 锁进程 ID, 2WO+G;a2KSP6517 status 被锁状态 , !j0Qzbhx6517 SUBSTRING(SUSER_SNAME(sid),1,30) 被锁进程登陆帐号 , %i'j/Z;w(G7v3fO)Sf2E6517 SUBSTRING(hostname,1,12) 被锁进程用户机器名称 ,ITPUB个人空间 h9@uU2W&e6eT SUBSTRING(DB_NAME(dbid),1,10) 被锁进程数据名称 , wUX /2o6517 cmd 被锁进程命令 , U}]fa8x,U?"q {6517 waittype 被锁进程等待类型 4[P1M[VM@Y$r6517 FROM master..sysprocessesITPUB个人空间9O2s"OQ*@ WHERE blocked>0ITPUB个人空间*PD2C,Z%G iq -ZVf4d4y/bz6517 --dbcc inputbuffer(66) 输出相关锁进程的语句 */ITPUB个人空间_ R~!kt;TW a -H4HSV1O6517 -- 创建锁进程临时表 CREATE TABLE #templocktracestatus (ITPUB个人空间&X7X8Ix8z,` @8~ EventType varchar(100),ITPUB个人空间mn^V ` Parameters INT, w'a"r p!G6517 EventInfo varchar(200) dDM2z&l0A6517 ) ITPUB个人空间xPuK^ KF5I&o%Y 9d#}g`_y(j6517 -- 创建被锁进程临时表 CREATE TABLE #tempbelocktracestatus (ITPUB个人空间Z%Gs-WhVe+J EventType varchar(100),ITPUB个人空间*uGw]SQ6Q#C Parameters INT,ITPUB个人空间(dYn7GzC0Vm EventInfo varchar(200) HF-D8L4lA2v6517 ) b6Rn+x|QG6517 -- 创建之间的关联表 CREATE TABLE #locktracestatus (ITPUB个人空间 O+Q4J,D1W6V belockspid INT,ITPUB个人空间lPzl+@a$u c belockspidremark varchar(20),ITPUB个人空间)f1C7pk2k�Z7@] ? belockEventType varchar(100),ITPUB个人空间&j.hMa j:S belockEventInfo varchar(200), S6Oud%M PJ$Qy6517 lockspid INT,ITPUB个人空间0TY%p/-Vj lockspidremark varchar(20),ITPUB个人空间A.h.o0KZ z| lockEventType varchar(100),ITPUB个人空间%O"^#V3qA0E i lockEventInfo varchar(200)ITPUB个人空间'v!ApW4EuL ) yw X/mnf/Z6517 ITPUB个人空间+Uk-UBQ c @5_+s7M -- 获取死锁进程 ITPUB个人空间QA+^ g+ZAB DECLARE dbcc_inputbuffer CURSOR READ_ONLYITPUB个人空间do3Z0R%z V FOR select spid 被锁进程 ID,blocked 锁进程 IDITPUB个人空间hZ#K}7[y T ] FROM master..sysprocessesITPUB个人空间_D5ma'j+ow!w WHERE blocked>0 DECLARE @lockedspid int ITPUB个人空间.z/b-Yw{U;hjDy DECLARE @belockedspid intITPUB个人空间5j9ik:l,RJ V*|J~5T4H.Y.m7K6517 OPEN dbcc_inputbufferITPUB个人空间 d*aC[6_ FETCH NEXT FROM dbcc_inputbuffer INTO @belockedspid,@lockedspid WHILE (@@fetch_status <> -1)ITPUB个人空间1P}`iy;{/U$YZ BEGIN WSw [Q6Bun+v6517 IF (@@fetch_status <> -2) D[d kF wl6517 BEGIN --print ' 被堵塞进程 'ITPUB个人空间tvs+^ {t(p:Q --select @belockedspid _+B`P2k+MX/6517 --dbcc inputbuffer(@belockedspid)ITPUB个人空间/Gj[V T --print ' 堵塞进程 'ITPUB个人空间S x$}[7{,P --select @lockedspid w3i+UDzM OtK6517 --dbcc inputbuffer(@lockedspid) INSERT INTO #tempbelocktracestatus Im%B;}l6517 EXEC('DBCC INPUTBUFFER('+@belockedspid+')') INSERT INTO #templocktracestatus 5b4Eq*y0GpC6517 EXEC('DBCC INPUTBUFFER('+@lockedspid+')') INSERT INTO #locktracestatus 6EN h5l$v WV1Wh6517 select @belockedspid,' 被锁进程 ',a.EventType,a.EventInfo,@lockedspid,' 锁进程 ',b.EventType,b.EventInfo 5/suz,a/mq6517 from #tempbelocktracestatus a,#templocktracestatus b END FETCH NEXT FROM dbcc_inputbuffer INTO @belockedspid,@lockedspid END CLOSE dbcc_inputbuffer DEALLOCATE dbcc_inputbuffer select * from #locktracestatus return (0) -- sp_check_deadlock d3lB'XI{7[o0q6517 |