java sqlserver 死锁_SQLServer检查是否有死锁的脚本

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 = 1FROM   #temp_who_lock

--select @count,@index

--if @@error<>0 return @@error    IF @count = 0BEGIN

SELECT '没有阻塞和死锁信息'

--return 0END

WHILE @index <= @countBEGIN

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 '引起数据库死锁的是: ' + CAST(@spid AS VARCHAR(10)) +

'进程号,其执行的SQL语法如下' ;

SELECT @spid,              @blk

DBCC INPUTBUFFER(@spid)

DBCC INPUTBUFFER(@blk)

END

SET @index = @index + 1END

IF @lock = 0BEGIN

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)) +

'进程号,其执行的SQL语法如下'

ELSE

SELECT '进程号SPID:' + CAST(@spid AS VARCHAR(10)) + '被' +

'进程号SPID:' + CAST(@blk AS VARCHAR(10)) +

'阻塞,其当前进程执行的SQL语法如下'

PRINT (LTRIM(@spid) + '' + LTRIM(@blk));

IF (@spid <> 0)

BEGIN

DBCC INPUTBUFFER(@spid) --

END

DBCC INPUTBUFFER(@blk) --引起阻塞语句

SET @index = @index + 1

END

END

DROP TABLE #temp_who_lock

--return 0    --KILL 64

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值