Sql Server 检测死锁的SQL语句
首先创建一个标量值函数DigLock,用来递归检测SqlServer中的每一个会话是否存在加锁循环,如果该函数最终返回1则表示检测到了加锁循环 (也就是说检测到了死锁),如果最终返回0则表示没有检测到加锁循环。
CREATE FUNCTION [dbo].[DigLock]
(
@spid int,
@orginSpid int
)
RETURNS bit
AS
BEGIN
declare @blockedSpid int=null; select @blockedSpid=spid from sysprocesses where blocked<>0 and blocked=@spid if @blockedSpid=@orginSpid
return 1;--检测到了死锁 if @blockedSpid is not null
begin
return dbo.DigLock(@blockedSpid,@orginSpid);
end return 0;--未检测到死锁
END
然后定义一个视图V_DeadLock_Process,调用上面创建的函数,如果查询出了结果说明当前Sql Server中存在死锁
CREATE VIEW [dbo].[V_DeadLock_Process]
AS
SELECT spid, kpid, blocked, waittype, waittime, lastwaittype, waitresource, dbid, uid, cpu, physical_io, memusage, login_time,
last_batch, ecid, open_tran, status, sid, hostname, program_name, hostprocess, cmd, nt_domain, nt_username,
net_address, net_library, loginame, context_info, sql_handle, stmt_start, stmt_end, request_id
FROM sys.sysprocesses AS sp1
WHERE (blocked <> 0) AND (dbo.DigLock(spid, spid) = 1)
查询视图V_DeadLock_Process,如果当前Sql Server中存在死锁的话就会显示查询到了记录
Select * from [dbo].[V_DeadLock_Process]

上图显示,53号会话锁住了54号会话,54号会话又锁住了53号会话,所以当前Sql Server中存在死锁。
然后可以使用DBCC INPUTBUFFER语句传入上面视图查询到的会话spid,找到造成死锁的Sql语句
DBCC INPUTBUFFER ()--输入会话spid,可查询该会话正在执行的Sql语句,从而知道发生死锁的会话执行了什么Sql语句

Sql Server 检测死锁的SQL语句的更多相关文章
- 监控SQL Server正在执行的SQL语句和死锁情况
原文:监控SQL Server正在执行的SQL语句和死锁情况 SELECT [Individual Query] = SUBSTRING(qt.TEXT, er.statement_start_off ...
- Sql性能检测工具:Sql server profiler和优化工具:Database Engine Tuning Advisor
原文:Sql性能检测工具:Sql server profiler和优化工具:Database Engine Tuning Advisor 一.工具概要 数据库应用系统性能低下,需要对其进行优化 ...
- SQL Server并行死锁案例解析
并行执行作为提升查询响应时间,提高用户体验的一种有效手段被大家所熟知,感兴趣的朋友可以看我以前的博客SQL Server优化技巧之SQL Server中的"MapReduce", ...
- SQL Server 检测到基于一致性的逻辑 I/O 错误 pageid 不正确
最近在查询SQL时遇到SQL文件错误,可能是文件数据已损坏.解决过程分享给大家. 问题描述 消息 824,级别 24,状态 2,第 1 行SQL Server 检测到基于一致性的逻辑 I/O 错误 p ...
- 【转】SQL Server 运行状况监控SQL语句
SQL Server 运行状况监控SQL语句 Microsoft SQL Server 2005 提供了一些工具来监控数据库.方法之一是动态管理视图.动态管理视图 (DMV) 和动态管理函数 (D ...
- 解决方法:SQL Server 检测到基于一致性的逻辑 I/O 错误 校验和不正(转载)
引用:http://luowei1371984.blog.163.com/blog/static/44041589201491844323885/ SQL2008运行select count(*) f ...
- 【SQL Server DBA】日常巡检语句3:特定监控(阻塞、top语句、索引、作业)
原文:[SQL Server DBA]日常巡检语句3:特定监控(阻塞.top语句.索引.作业) 1.查询阻塞信息.锁定了哪些资源 --1.查看阻塞信息 select spid,loginame,wai ...
- SQL Server中常用的SQL语句(转):
SQL Server中常用的SQL语句 转自:http://www.cnblogs.com/rainman/archive/2013/05/04/3060428.html 1.概述 名词 笛卡尔积.主 ...
- sql server 查询log日志 sql语句
xp_readerrorlog 一共有7个参数: 1. 存档编号 2. 日志类型(1为SQL Server日志,2为SQL Agent日志) 3. 查询包含的字符串 4. 查询包含的字符串 5. Lo ...
随机推荐
- Sequential Read Ahead For SQL Server
Balancing CPU and I/O throughput is essential to achieve good overall performance and to maximize ha ...
- 使用sed,awk将love转换成LOVE,将CHINA转换成china
将love转换成LOVE,将CHINA转换成china echo "love CHINA" | sed -e 's/love/LOVE/' -e 's/CHINA/china/' ...
- CSS:CSS定位和浮动
CSS2.1规定了3种定位方案 1.Normal flow:普通流(相对定位 position relative.静态定位 position static) 普通流(normal flow,国内有人翻 ...
- redis tcp-backlog配置
在redis2.8版本中有一个tcp-backlog配置, 说明如下: # TCP listen() backlog.## In high requests-per-second environmen ...
- java 部署服务报:Bad version number in .class file
问题原因:服务器jdk版本和class文件的版本不一致,一般是服务器的jdk版本低于class文件的编译版本 解决方案:修改服务器的jdk
- mysql-proxy之奇虎360 Atlas 安装实现mysql读写分离
官方git https://github.com/Qihoo360/Atlas 参照:http://blog.qixingzhong.com/2013/09/centos-install-atlas. ...
- 浅谈My SQL引擎的对比
MySQL数 据库引擎取决于MySQL在安装的时候是如何被编译的.要添加一个新的引擎,就必须重新编译MYSQL.在缺省情况下,MYSQL支持三个引擎:ISAM.MYISAM和HEAP.另外两种类型IN ...
- Java基础之线程——使用执行器(UsingExecutors)
控制台程序. 在这个版本的银行示例中,把借款和贷款事务创建为在不同线程中执行的任务,它们把事务提交给职员.创建事务的任务是Callable<>任务,因为它们需要返回已为每个账户创建的借款或 ...
- linux:档案与档案系统的压缩、打包与备份
压缩比:压缩后与压缩的档案锁占用的磁碟空间大小,就称之为压缩比 压缩技术: a.将没有使用到的空间丢出去,以让档案资料占用的空间变小 b.将重复的资料统计记录(比如100个1,不是真正的用100个元位 ...
- Canvas中鼠标获取元素并拖动技术
Silverlight拖动,需要Canvas. Canvas管网定义: 定义一个区域,在该区域中可以使用相对于该区域的坐标显式定位子元素. XAML <Canvas ...> oneOrM ...