隨筆 - 6  文章 - 129  trackbacks - 0
          <2025年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          常用鏈接

          留言簿(14)

          隨筆檔案(6)

          文章分類(467)

          文章檔案(423)

          相冊

          收藏夾(18)

          JAVA

          搜索

          •  

          積分與排名

          • 積分 - 827660
          • 排名 - 49

          最新評論

          閱讀排行榜

          評論排行榜

          轉:http://database.51cto.com/art/201011/233039.htm
          SQL Server死鎖使我們經常遇到的問題,下面就為您介紹如何查詢SQL Server死鎖,希望對您學習SQL Server死鎖方面能有所幫助。

          SQL Server死鎖的查詢方法:

          1. exec master.dbo.p_lockinfo 0,0 ---顯示死鎖的進程,不顯示正常的進程  
          2.  
          3. exec master.dbo.p_lockinfo 1,0 ---殺死死鎖的進程,不顯示正常的進程 

          SQL Server死鎖的解除方法:

          1. Create proc p_lockinfo  
          2. @kill_lock_spid bit=1, --是否殺掉死鎖的進程,1 殺掉, 0 僅顯示  
          3. @show_spid_if_nolock bit=1 --如果沒有死鎖的進程,是否顯示正常進程信息,1 顯示,0 不顯示  
          4. as  
          5.  
          6. declare @count int,@s nvarchar(1000),@i int  
          7. select id=identity(int,1,1),標志,  
          8. 進程ID=spid,線程ID=kpid,塊進程ID=blocked,數據庫ID=dbid,  
          9. 數據庫名=db_name(dbid),用戶ID=uid,用戶名=loginame,累計CPU時間=cpu,  
          10. 登陸時間=login_time,打開事務數=open_tran, 進程狀態=status,  
          11. 工作站名=hostname,應用程序名=program_name,工作站進程ID=hostprocess,  
          12. 域名=nt_domain,網卡地址=net_address  
          13. into #t from(  
          14. select 標志='死鎖的進程',  
          15. spid,kpid,a.blocked,dbid,uid,loginame,cpu,login_time,open_tran,  
          16. status,hostname,program_name,hostprocess,nt_domain,net_address,  
          17. s1=a.spid,s2=0 
          18. from master..sysprocesses a join (  
          19. select blocked from master..sysprocesses group by blocked  
          20. )b on a.spid=b.blocked where a.blocked=0 
          21. union all  
          22. select '|_犧牲品_>',  
          23. spid,kpid,blocked,dbid,uid,loginame,cpu,login_time,open_tran,  
          24. status,hostname,program_name,hostprocess,nt_domain,net_address,  
          25. s1=blocked,s2=1 
          26. from master..sysprocesses a where blocked<>0  
          27. )a order by s1,s2  
          28.  
          29. select @count=@@rowcount,@i=1 
          30.  
          31. if @count=0 and @show_spid_if_nolock=1 
          32. begin  
          33. insert #t  
          34. select 標志='正常的進程',  
          35. spid,kpid,blocked,dbid,db_name(dbid),uid,loginame,cpu,login_time,  
          36. open_tran,status,hostname,program_name,hostprocess,nt_domain,net_address  
          37. from master..sysprocesses  
          38. set @count=@@rowcount  
          39. end  
          40.  
          41. if @count>0  
          42. begin  
          43. create table #t1(id int identity(1,1),a nvarchar(30),b Int,EventInfo nvarchar(255))  
          44. if @kill_lock_spid=1 
          45. begin  
          46. declare @spid varchar(10),@標志 varchar(10)  
          47. while @i<=@count  
          48. begin  
          49.    select @spid=進程ID,@標志=標志 from #t where id=@i  
          50.    insert #t1 exec('dbcc inputbuffer('+@spid+')')  
          51.    if @標志='死鎖的進程' exec('kill'+@spid)  
          52.    set @i=@i+1  
          53. end  
          54. end  
          55. else  
          56. while @i<=@count  
          57. begin  
          58.    select @s='dbcc inputbuffer('+cast(進程ID as varchar)+')' from #t where id=@i  
          59.    insert #t1 exec(@s)  
          60.    set @i=@i+1  
          61. end  
          62. select a.*,進程的SQL語句=b.EventInfo  
          63. from #t a join #t1 b on a.id=b.id  
          64. end  


          posted on 2012-05-28 18:04 Ke 閱讀(1548) 評論(0)  編輯  收藏 所屬分類: sql server
          主站蜘蛛池模板: 大足县| 密云县| 宝丰县| 永川市| 高雄县| 台南县| 南昌市| 盐源县| 临洮县| 库车县| 平远县| 工布江达县| 江永县| 宣汉县| 鹤山市| 塔城市| 从江县| 苍溪县| 大埔县| 和平县| 利辛县| 沙河市| 凤翔县| 宜黄县| 汉沽区| 宾阳县| 馆陶县| 宣威市| 瑞金市| 新竹市| 社旗县| 凤台县| 永德县| 建湖县| 兴义市| 阿图什市| 禹城市| 文昌市| 亚东县| 托克逊县| 河西区|