SqlServer死锁与阻塞检测脚本

  1 IF EXISTS (SELECT * FROM sysobjects WHERE [name] = ‘sp_Lock_Scan‘)
  2     DROP PROCEDURE sp_Lock_Scan
  3 GO
  4
  5 CREATE PROCEDURE sp_Lock_Scan
  6 AS
  7     DECLARE @SPID INT
  8     DECLARE @BLK INT
  9     DECLARE @Count INT
 10     DECLARE @Counter INT
 11     DECLARE @LOCK BIT
 12
 13     CREATE TABLE #Temp
 14     (
 15         [Id] INT IDENTITY
 16         ,[SPID] INT
 17         ,[BLOCK] INT
 18     )
 19
 20     SELECT @LOCK = 0
 21
 22     IF @@ERROR <> 0 RETURN @@ERROR
 23
 24     INSERT INTO #Temp
 25     (
 26         [SPID], [BLOCK]
 27     )
 28     SELECT
 29         0, [blocked]
 30     FROM
 31         (
 32             SELECT * FROM [master]..[sysprocesses] WHERE [blocked] > 0
 33         ) a
 34     WHERE
 35         NOT EXISTS
 36         (
 37             SELECT * FROM [master]..[sysprocesses] WHERE a.[blocked] = [spid] AND [blocked] > 0
 38         )
 39     UNION
 40         SELECT [spid], [blocked] FROM [master]..[sysprocesses] WHERE [blocked] > 0
 41
 42     IF @@ERROR <> 0 RETURN @@ERROR
 43
 44     SELECT @Count = COUNT(*), @Counter = 1 FROM #Temp
 45
 46     IF @@ERROR <> 0 RETURN @@ERROR
 47
 48     IF @Count = 0
 49         BEGIN
 50             SELECT N‘没有阻塞和死锁信息‘ [ScanMessage]
 51             RETURN 0
 52         END
 53     ELSE
 54         BEGIN
 55             WHILE @Counter <= @Count
 56                 BEGIN
 57                     IF EXISTS
 58                         (
 59                             SELECT * FROM #Temp a
 60                             WHERE
 61                                 a.[Id] > @Counter
 62                             AND
 63                                 EXISTS
 64                                 (
 65                                     SELECT * FROM #Temp WHERE [Id] <= @Counter AND a.[BLOCK] = [SPID]
 66                                 )
 67                         )
 68                         BEGIN
 69                             SELECT @LOCK = 1
 70
 71                             SELECT @SPID = [SPID], @BLK = [BLOCK] from #Temp WHERE [Id] = @Counter
 72
 73                             SELECT N‘引起数据库死锁的是:【‘ + CAST(@SPID AS NVARCHAR(255)) + N‘】进程,其执行的SQL语言如下‘ [ScanMessage]
 74
 75                             SELECT @SPID [SPID], @BLK [BLOCKED]
 76
 77                             DBCC INPUTBUFFER(@SPID)
 78                             DBCC INPUTBUFFER(@BLK)
 79                         END
 80                     SELECT @Counter = @Counter + 1
 81                 END
 82
 83             IF @LOCK = 0
 84                 BEGIN
 85                     SELECT @Counter = 1
 86
 87                     WHILE @Counter <= @Count
 88                         BEGIN
 89                             SELECT @SPID = [SPID], @BLK = [BLOCK] FROM #Temp where [Id] = @Counter
 90
 91                             IF @SPID = 0
 92                                 SELECT N‘引起阻塞的是:【‘+ CAST(@BLK AS NVARCHAR(255)) + ‘】,其执行的SQL语法如下‘ [ScanMessage]
 93                             ELSE
 94                                 SELECT N‘进程【‘ + CAST(@SPID AS NVARCHAR(255)) + N‘】被进程【‘ + CAST(@BLK AS NVARCHAR(255)) + N‘】阻塞,当前进程的SQL语法如下‘ [ScanMessage]
 95
 96                             DBCC INPUTBUFFER(@SPID)
 97                             DBCC INPUTBUFFER(@BLK)
 98
 99                             SELECT @Counter = @Counter + 1
100                         END
101                 END
102         END
103 RETURN 0
104 GO
时间: 2024-12-11 10:59:55

SqlServer死锁与阻塞检测脚本的相关文章

SQLSERVER死锁详解

看了网上很多关于死锁的的博客,大家通常介绍死锁的原理,本人也写一个详细的分析.当然,是关于SQLSERVER的死锁. 使用SQL Profiler抓取死锁事件 2.选择选项卡:事件选择,勾选右下角的显示所有事件,找到Locks事件,勾选上Deadlock graph. 3.再选择第三个选项卡:事件提取设置,勾上死锁XML,弹出文件保存路径,输入文件名即可. 4.以上设置,出现死锁时会保存到死锁XML文件中,经操作发现只保存了最后一个死锁图,如果死锁比较多,需要使用SQL Profiler逐个保存

完整的用户代理字符串检测脚本

完整的用户代理字符串检测脚本,包括引擎.脚本.平台.Windows操作系统.移动设备和游戏系统. 1 var client = function(){ 2 3 //呈现引擎 4 var engine ={ 5 ie: 0, 6 gecko: 0; 7 webkit: 0; 8 khtml: 0; 9 opera: 0; 10 11 //完整的版本号 12 ver: null 13 }; 14 15 //浏览器 16 var browser = { 17 //主要浏览器 18 ie: 0, 19

sqlserver导出带数据的脚本

说明: 以前要将一个表中的数据导出为脚本,只有用存储过程.现在在SQL Server 2008中增加了一个新特性,除了导出表的定义外,还支持将表中的数据导出为脚本. 步骤: 右击需要导出数据的数据库,在弹出式菜单中选择"任务"下的"生成脚本"选项 在第二步选择"高级选项"如果不是2008(R2)的选择 "编写数据的脚本"选择为TRUE,这里默认是为FALSE的 ,   是2008(R2)的选择"要编写的脚本的数据的类

lvs的健康检测脚本

lvs的健康检测脚本 写得不怎么样,基本实现吧,因为基本不会用到,有时间再改进了,嘻嘻 1 #!/bin/bash 2 3 rs=('192.168.61.130' '192.168.61.132') 4 vip="192.168.61.100" 5 dip="192.168.61.131" 6 checkcount=1 7 checkloop=4 8 i=1 9 10 11 while [ $i -lt 2 ];do 12     #sorry server检测,

LVS自动化添加及删除ipvsadm和后端服务器健康状态检测脚本

  LVS director 负载均衡器增加IPVSADM脚本 #vim director.sh #!/bin/bash #chkconfig: - 88 66 #description: this script to add lvs IP VIP=192.168.0.254 DIP=192.168.0.100 RIP1=192.168.0.101 RIP2=192.168.0.102 PORT=80 SCHELE=wrr LOCKFILE=/var/lock/subsys/ipvsadm ca

URL检测脚本

1.URL检测脚本 [[email protected] scripts]# vi check_url.sh  [[email protected] scripts]# cat check_url.sh  #!/bin/sh . /etc/init.d/functions function usage(){     echo $"usage:$0 url"     exit 1 } function check_url(){     wget --spider -q -o /dev/n

tomcat检测脚本

最近写了个简单的tomcat检测脚本.可以进行简单的进程和页面检测. #!/bin/bash # author:wangxingwei # date:2015/9/1 # fun:检测tomcat进程和页面是否正常 StartTomcat=/home/aspire/apps/tomcat/bin/startup.sh TomcatCache=/home/aspire/apps/tomcat/work TomcatCheckLog=/home/aspire/logs/check_tomcat_lo

SQLServer 事务复制中使用脚本添加某个对象的发布

原文:SQLServer 事务复制中使用脚本添加某个对象的发布 -- use [发布库] --添加表:创建项目并将其添加到发布中 exec sp_addarticle @publication = N'ReplicationName', @article = N'MyObject', @source_owner = N'dbo', @source_object = N'MyObject', @destination_owner = N'dbo', @destination_table = N'M

LVS健康检测脚本分享

1.真实服务器健康状态检测 我们可以通过Shell脚本,实现对LVS后端的真实服务器开放服务的健康状态检测功能.当真实服务器服务出现问题,则自动将其从集群服务中移除,当真实服务器服务恢复,则自动将其加入到负载均衡集群服务中. 1.1 基于端口的健康检测 脚本思路: 通过扫描后端服务器的端口来判断真实服务器是否健康! 若端口开放则表示真实服务器健康,则将其加入到LVS集群中.若已存在集群中则不做任何操作. 若端口未开发则表示真实服务器故障,则将其从LVS集群中移除.若不存在则不做任何操作. She