IF EXISTS (SELECT * FROM sysobjects WHERE [name] = 'sp_Lock_Scan')
DROP PROCEDURE sp_Lock_Scan
GO CREATE PROCEDURE sp_Lock_Scan
AS
DECLARE @SPID INT
DECLARE @BLK INT
DECLARE @Count INT
DECLARE @Counter INT
DECLARE @LOCK BIT CREATE TABLE #Temp
(
[Id] INT IDENTITY
,[SPID] INT
,[BLOCK] INT
) SELECT @LOCK = 0 IF @@ERROR <> 0 RETURN @@ERROR INSERT INTO #Temp
(
[SPID], [BLOCK]
)
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(*), @Counter = 1 FROM #Temp IF @@ERROR <> 0 RETURN @@ERROR IF @Count = 0
BEGIN
SELECT N'没有阻塞和死锁信息' [ScanMessage]
RETURN 0
END
ELSE
BEGIN
WHILE @Counter <= @Count
BEGIN
IF EXISTS
(
SELECT * FROM #Temp a
WHERE
a.[Id] > @Counter
AND
EXISTS
(
SELECT * FROM #Temp WHERE [Id] <= @Counter AND a.[BLOCK] = [SPID]
)
)
BEGIN
SELECT @LOCK = 1 SELECT @SPID = [SPID], @BLK = [BLOCK] from #Temp WHERE [Id] = @Counter SELECT N'引起数据库死锁的是:【' + CAST(@SPID AS NVARCHAR(255)) + N'】进程,其执行的SQL语言如下' [ScanMessage] SELECT @SPID [SPID], @BLK [BLOCKED] DBCC INPUTBUFFER(@SPID)
DBCC INPUTBUFFER(@BLK)
END
SELECT @Counter = @Counter + 1
END IF @LOCK = 0
BEGIN
SELECT @Counter = 1 WHILE @Counter <= @Count
BEGIN
SELECT @SPID = [SPID], @BLK = [BLOCK] FROM #Temp where [Id] = @Counter IF @SPID = 0
SELECT N'引起阻塞的是:【'+ CAST(@BLK AS NVARCHAR(255)) + '】,其执行的SQL语法如下' [ScanMessage]
ELSE
SELECT N'进程【' + CAST(@SPID AS NVARCHAR(255)) + N'】被进程【' + CAST(@BLK AS NVARCHAR(255)) + N'】阻塞,当前进程的SQL语法如下' [ScanMessage] DBCC INPUTBUFFER(@SPID)
DBCC INPUTBUFFER(@BLK) SELECT @Counter = @Counter + 1
END
END
END
RETURN 0
GO

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

  1. 【2018-01-26】SqlServer 检查死锁和阻塞

    利用sys.sysprocesses SQL进程检查是否出现死锁和阻塞 Sys.SysProcesses 系统表是一个很重要的系统视图,主要用来定位与解决Sql Server的阻塞和死锁 select ...

  2. Redis + keepalived 高可用行配置检测脚本

    Redis 在生产配置中:除redis集群.哨兵模式之外:主从模式还是比较普遍的. 配置 redis 多主从:由 keepalived 做 VIP 地址漂移.可以实现redis的高可用性. keepa ...

  3. SqlServer执行大的数据库脚本出错解决方法

    如果执行线上项目拷下来sqlserver的.sql的数据库脚本文件,如果文件较大时,那么就会报错内存不足之类的. 这时可以在命令提示符使用命令来执行脚本文件.切记,执行前先改一下数据库存放位置! 命令 ...

  4. 【javascript】浏览器用户代理检测脚本实现

    以下是完整的用户代理字符串检测脚本,包括检测呈现引擎.平台.Windows操作系统.移动设备和游戏系统. var client = function(){ // 呈现引擎 var engine = { ...

  5. keepalived检测脚本及注意事项

    keepalived检测脚本的作用及注意事项: 默认每隔3秒钟执行一次检测脚本,检查nginx服务是否启动,如果没启动就把nginx服务启动起来,如果启动不成功,就把keepalived服务down掉 ...

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

    原文:SQLServer 事务复制中使用脚本添加某个对象的发布 -- use [发布库] --添加表:创建项目并将其添加到发布中 exec sp_addarticle @publication = N ...

  7. 使用jstack排查多线程死锁、阻塞

    问题: 针对线上多线程死锁.阻塞,跑着跑着就卡住了 查看线上线程池的状态 jstack用于生成java虚拟机当前时刻的线程快照. 线程快照是当前java虚拟机内每一条线程正在执行的方法堆栈的集合,生成 ...

  8. SSRF——weblogic vulhub 漏洞复现及攻击内网redis(一)(附批量检测脚本)

    0X01 概述 SSRF(Server-Side Request Forgery, 服务端请求伪造)利用漏洞可以发起网络请求来攻击内网服务.利用SSRF能实现以下效果:1)        扫描内网(主 ...

  9. SQLServer启动和关闭bat脚本

    原文:SQLServer启动和关闭bat脚本   安装完毕SQL SERVER 2005后,会默认自动启动SQL Server等几个服务,这几个服务比较占用系统资源.当不运行SQL Server时,最 ...

随机推荐

  1. QT5-控件-QLineEdit-文本输入控件,用来输入密码什么的还不错,可以和Linux登录一样不移动光标哦

    #ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include <QLineEdit> #i ...

  2. javascript 写一段代码,判断一个字符串中出现次数最多的字符串,并统计出现的次数

    javascript 写一段代码,判断一个字符串中出现次数最多的字符串,并统计出现的次数 function test(){ var bt = document.getElementById(" ...

  3. Flume 1.4.0 User Guide

    Apache Flume is a distributed, reliable, and available system for efficiently collecting, aggregatin ...

  4. 新安装ubuntu后几项配置

    新安的ubuntu13.04 为了编程方便 进行如下设置 安装右键terminal    sudo apt-get install nautilus-open-terminal 安装远程连接ssh   ...

  5. js中运算符的优先级

    不确定下面表达式的运算顺序? a>b?c:d+e a&&b==c 看看下表就清楚了,下表按优先级从最高到最低的列出,具有相同优先级按从左至右的顺序求值. 运算符 描述 . [] ...

  6. PHP学习系列(1)——字符串处理函数(4)

    16.hebrevc() 函数把希伯来文本从右至左的流转换为左至右的流.它也会把新行 (\n) 转换为 <br />.只有 224 至 251 之间的 ASCII 字符,以及标点符号受到影 ...

  7. jquery编写插件

    jquery编写插件的方法    版权声明:作者原创,转载请注明出处! 编写插件的两种方式: 1.类级别开发插件(1%) 2.对象级别开发(99%) 类级别的静态开发就是给jquery添加静态方法,三 ...

  8. Swift —构造函数与存储属性初始化-备

    构造函数的主要作用是初始化实例,其中包括:初始化存储属性和其它的初始化.在Rectangle类或结构体中,如果在构造函数中初始化存储属性width和height后,那么在定义他们时就不需要初始化了. ...

  9. [POJ] 2226 Muddy Fields(二分图最小点覆盖)

    题目地址:http://poj.org/problem?id=2226 二分图的题目关键在于建图.因为“*”的地方只有两种木板覆盖方式:水平或竖直,所以运用这种方式进行二分.首先按行排列,算出每个&q ...

  10. 转:Windows下载Android源码

    原文来自于:http://blog.csdn.net/hlf48641715/article/details/7188450 下载msysgit,安装 官方下载:http://code.google. ...