當前位置:首頁 » 編程語言 » sqlserversplock
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

sqlserversplock

發布時間: 2023-08-27 01:15:43

sqlServer死鎖的解除方法

SQL Server死鎖使我們經常遇到的問題 下面就為您介紹如何查詢SQL Server死鎖 希望對您學習SQL Server死鎖方面能有所幫助

SQL Server死鎖的查詢方法

exec master dbo p_lockinfo 顯示死鎖的進程 不顯示正常的進程

exec master dbo p_lockinfo 殺死死鎖的進程 不顯示正常的進程

SQL Server死鎖的解除方法

Create proc p_lockinfo

@kill_lock_spid bit= 是否殺掉死鎖的進程 殺掉 僅顯示

@show_spid_if_nolock bit= 如果沒有死鎖的進程 是否顯示正常進程信息 顯示 不顯示

as

declare @count int @s nvarchar( ) @i int

select id=identity(int ) 標志

進程ID=spid 線程ID=kpid 塊進程ID=blocked 資料庫ID=dbid

資料庫名=db_name(dbid) 用戶ID=uid 用戶名=loginame 累計CPU時間=cpu

登陸時間=login_time 打開事務數=open_tran 進程狀態=status

工作站名=hostname 應用程序名=program_name 工作站進程ID=hostprocess

域名=nt_domain 網卡地址=net_address

into #t from(

select 標志= 死鎖的進程

spid kpid a blocked dbid uid loginame cpu login_time open_tran

status hostname program_name hostprocess nt_domain net_address

s =a spid s =

from mastersysprocesses a join (

select blocked from mastersysprocesses group by blocked

)b on a spid=b blocked where a blocked=

union all

select |_犧牲品_>

spid kpid blocked dbid uid loginame cpu login_time open_tran

status hostname program_name hostprocess nt_domain net_address

s =blocked s =

from mastersysprocesses a where blocked<>

)a order by s s

select @count=@@rowcount @i=

if @count= and @show_spid_if_nolock=

begin

insert #t

select 標志= 正常的進程

spid kpid blocked dbid db_name(dbid) uid loginame cpu login_time

open_tran status hostname program_name hostprocess nt_domain net_address

from mastersysprocesses

set @count=@@rowcount

end

if @count>

begin

create table #t (id int identity( ) a nvarchar( ) b Int EventInfo nvarchar( ))

if @kill_lock_spid=

begin

declare @spid varchar( ) @標志 varchar( )

while @i<=@count

begin

select @spid=進程ID @標志=標志 from #t whereid=@i

insert #t exec( dbcc inputbuffer( +@spid+ ) )

if @標志= 死鎖的進程 exec( kill +@spid)

set @i=@i+

end

end

else

while @i<=@count

begin

select @s= dbcc inputbuffer( +cast(進程ID as varchar)+ ) from #t whereid=@i

insert #t exec(@s)

set @i=@i+

end

select a * 進程的SQL語句=b EventInfo

from #t a join #t b on a id=b id

lishixin/Article/program/SQLServer/201311/22183

⑵ 如何批量殺死sqlserver死鎖

如何批量殺死sqlserver死鎖
使用sp_lock可以查看鎖的信息, 使用kill 可以把產生鎖的聯接刪除。 產生鎖,一般是開發過程的處理有問題。 還有就是增加關鍵字或是索引,減小鎖的粒度。