欢迎光临
我们一直在努力

分析死锁的方法-数据库专栏,SQL Server

建站超值云服务器,限时71元/月

常看到死锁的问题,一般都是kill进程,但如果不查出引起死锁的原因,死锁会时常发生
可以通过查找引起死锁的的操作,就可以方便的解决死锁,现将日常解决问题的方法总结,也许对大家有帮助

1\死锁发生时,通过如下语法,查询出引起死锁的操作

use master
go
declare @spid int,@bl int
declare s_cur cursor for
select  0 ,blocked
from (select * from sysprocesses where  blocked>0 ) a
where not exists(select * from (select * from sysprocesses where  blocked>0 ) b
where a.blocked=spid)
union select spid,blocked from sysprocesses where  blocked>0
open s_cur
fetch next from s_cur into @spid,@bl
while @@fetch_status = 0
begin
 if @spid =0
            select 引起数据库死锁的是: + cast(@bl as varchar(10)) + 进程号,其执行的sql语法如下
 else
            select 进程号spid:+ cast(@spid as varchar(10))+ 被 + 进程号spid:+ cast(@bl as varchar(10)) +阻塞,其当前进程执行的sql语法如下
 dbcc inputbuffer (@bl )
 fetch next from s_cur into @spid,@bl
end
close s_cur
deallocate s_cur

exec sp_who2
2\查找程序/数据库,此t_sql语法在什么地方使用
3\分析找到的,并解决问题

eg:

/*
——————————————————-
引起数据库死锁的是: 71进程号,其执行的sql语法如下

eventtype      parameters eventinfo                                       
————– ———- ————————————————
language event 0         
select * from test
insert test values(1,2)

(所影响的行数为 1 行)

dbcc 执行完毕。如果 dbcc 输出了错误信息,请与系统管理员联系。
                                                                              
——————————————————————————
进程号spid:64被进程号spid:71阻塞,其当前进程执行的sql语法如下

eventtype      parameters eventinfo                                       
————– ———- ————————————————
language event 0         
select * from test
insert test values(1,2)

(所影响的行数为 1 行)

dbcc 执行完毕。如果 dbcc 输出了错误信息,请与系统管理员联系。
                                                                              
——————————————————————————
进程号spid:65被进程号spid:64阻塞,其当前进程执行的sql语法如下

eventtype      parameters eventinfo                                                                                         
————– ———- ————————————————————————————————–
language event 0          begin tran
select * from test with (holdlock)
waitfor time 12:00
select * from test
commit

(所影响的行数为 1 行)

dbcc 执行完毕。如果 dbcc 输出了错误信息,请与系统管理员联系。
                                                                              
——————————————————————————
进程号spid:73被进程号spid:64阻塞,其当前进程执行的sql语法如下

eventtype      parameters eventinfo                                                                                         
————– ———- ————————————————————————————————–
language event 0          begin tran
select * from test with (holdlock)
waitfor time 12:00
select * from test
commit

(所影响的行数为 1 行)

dbcc 执行完毕。如果 dbcc 输出了错误信息,请与系统管理员联系。
*/

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » 分析死锁的方法-数据库专栏,SQL Server
分享到: 更多 (0)

相关推荐

  • 暂无文章