查詢Sqlserver數(shù)據(jù)庫死鎖的一個存儲過程分享
使用sqlserver作為數(shù)據(jù)庫的應(yīng)用系統(tǒng),都避免不了有時候會產(chǎn)生死鎖, 死鎖出現(xiàn)以后,維護人員或者開發(fā)人員大多只會通過sp_who來查找死鎖的進程,然后用sp_kill殺掉。利用sp_who_lock這個存儲過程,可以很方便的知道哪個進程出現(xiàn)了死鎖,出現(xiàn)死鎖的問題在哪里.
創(chuàng)建sp_who_lock存儲過程
CREATE procedure sp_who_lock as begin declare @spid int declare @blk int declare @count int declare @index int declare @lock tinyint set @lock=0 create table #temp_who_lock ( id int identity(1,1), spid int, blk int ) if @@error<>0 return @@error insert into #temp_who_lock(spid,blk) select 0 ,blocked from (select * from master..sysprocesses where blocked>0)a where not exists(select * from master..sysprocesses where a.blocked =spid and blocked>0) union select spid,blocked from master..sysprocesses where blocked>0 if @@error<>0 return @@error select @count=count(*),@index=1 from #temp_who_lock if @@error<>0 return @@error if @count=0 begin select '沒有阻塞和死鎖信息' return 0 end while @index<=@count begin if exists(select 1 from #temp_who_lock a where id>@index and exists(select 1 from #temp_who_lock where id<=@index and a.blk=spid)) begin set @lock=1 select @spid=spid,@blk=blk from #temp_who_lock where id=@index select '引起數(shù)據(jù)庫死鎖的是: '+ CAST(@spid AS VARCHAR(10)) + '進程號,其執(zhí)行的SQL語法如下' select @spid, @blk dbcc inputbuffer(@spid) dbcc inputbuffer(@blk) end set @index=@index+1 end if @lock=0 begin set @index=1 while @index<=@count begin select @spid=spid,@blk=blk from #temp_who_lock where id=@index if @spid=0 select '引起阻塞的是:'+cast(@blk as varchar(10))+ '進程號,其執(zhí)行的SQL語法如下' else select '進程號SPID:'+ CAST(@spid AS VARCHAR(10))+ '被' + '進程號SPID:'+ CAST(@blk AS VARCHAR(10)) +'阻塞,其當(dāng)前進程執(zhí)行的SQL語法如下' dbcc inputbuffer(@spid) dbcc inputbuffer(@blk) set @index=@index+1 end end drop table #temp_who_lock return 0 end GO
在查詢分析器中執(zhí)行:
exec sp_who_lock
直到最后的結(jié)果為:**
相關(guān)文章
一道關(guān)于數(shù)據(jù)庫(經(jīng)典父子級 ID 關(guān)聯(lián))更新題
這篇文章主要介紹了一道關(guān)于數(shù)據(jù)庫(經(jīng)典父子級 ID 關(guān)聯(lián))更新題,大家?guī)兔ο胂脒€有其它解決思路沒有?2015-06-06
SQL Server 創(chuàng)建約束圖解(唯一 主鍵)
SQLServer中有五種約束,Primary Key約束、Foreign Key約束、Unique約束、Default約束和Check約束,今天使用SQL Server2008來演示下這幾種約束的創(chuàng)建和使用的方法2016-07-07
sqlserver 合并列數(shù)據(jù)的實現(xiàn)
本文主要介紹了sqlserver 合并列數(shù)據(jù)的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-01-01
sql server 自定義分割月功能詳解及實現(xiàn)代碼
這篇文章主要介紹了sql server 自定義分割月功能詳解及實現(xiàn)代碼的相關(guān)資料,需要的朋友可以參考下2016-10-10
SQL Server中使用Trigger監(jiān)控存儲過程更改腳本實例
這篇文章主要介紹了SQL Server中使用Trigger監(jiān)控存儲過程更改腳本實例,本文使用一個表來記錄存儲過程更改過程,需要的朋友可以參考下2015-07-07
SQL Server中修改“用戶自定義表類型”問題的分析與方法
這篇文章主要給大家介紹了關(guān)于SQL Server中修改“用戶自定義表類型”問題的分析與方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2017-09-09
SQL?Server縱表轉(zhuǎn)橫表的實現(xiàn)示例
在使用SQL?Server數(shù)據(jù)庫的過程中我們經(jīng)常會遇到需要將查詢結(jié)果從縱表轉(zhuǎn)成橫表的問題,本文就來介紹一下SQL?Server縱表轉(zhuǎn)橫表示例,感興趣的可以了解一下2023-12-12
SQL Server 日期函數(shù)CAST 和 CONVERT 以及在業(yè)務(wù)中的使用介紹
。最近時間剛從客戶端轉(zhuǎn)入后臺寫服務(wù),對于后臺數(shù)據(jù)庫以及服務(wù)的書寫完全是個小白,所以最近寫的肯定沒有太多技術(shù)含量2013-01-01

