Sql Server 检测死锁的SQL语句

首先创建一个标量值函数DigLock,用来递归检测SqlServer中的每一个会话是否存在加锁循环,如果该函数最终返回1则表示检测到了加锁循环 (也就是说检测到了死锁),如果最终返回0则表示没有检测到加锁循环。

 1 CREATE FUNCTION [dbo].[DigLock]
 2 (
 3     @spid int,
 4     @orginSpid int
 5 )
 6 RETURNS bit
 7 AS
 8 BEGIN
 9     declare @blockedSpid int=null;
10
11     select @blockedSpid=spid from sysprocesses where blocked<>0 and blocked=@spid
12
13     if @blockedSpid=@orginSpid
14         return 1;--检测到了死锁
15
16     if @blockedSpid is not null
17     begin
18         return dbo.DigLock(@blockedSpid,@orginSpid);
19     end
20
21     return 0;--未检测到死锁
22 END

然后定义一个视图V_DeadLock_Process,调用上面创建的函数,如果查询出了结果说明当前Sql Server中存在死锁

1 CREATE VIEW [dbo].[V_DeadLock_Process]
2 AS
3 SELECT  spid, kpid, blocked, waittype, waittime, lastwaittype, waitresource, dbid, uid, cpu, physical_io, memusage, login_time,
4                    last_batch, ecid, open_tran, status, sid, hostname, program_name, hostprocess, cmd, nt_domain, nt_username,
5                    net_address, net_library, loginame, context_info, sql_handle, stmt_start, stmt_end, request_id
6 FROM      sys.sysprocesses AS sp1
7 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 (53)--输入会话spid,可查询该会话正在执行的Sql语句,从而知道发生死锁的会话执行了什么Sql语句

时间: 2024-12-22 04:10:03

Sql Server 检测死锁的SQL语句的相关文章

Sql性能检测工具:Sql server profiler和优化工具:Database Engine Tuning Advisor

原文:Sql性能检测工具:Sql server profiler和优化工具:Database Engine Tuning Advisor 一.工具概要 ? ? 数据库应用系统性能低下,需要对其进行优化, ? ? 如果不知道问题出在哪里,可以使用性能检测工具sql server profiler. ? ? 如果知道问题出在哪里,却不知道如何解决,可以使用数据库引擎优化顾问Database Engine Tuning Advisor 二.sql server profiler 功能:检测到数据库中的

SQL server下死锁问题

这几天在做一个项目,以前都没怎么搞过多线程,现在开始,只有边学边做了. 一开始的时候,程序报错是,是提示发生死锁,刚开始,自己没什么经验,以为是程序代码的死锁,就用lock代码,把程序给锁起来了,运行程序后,发现有超时现象,查阅资料,后来断定,这个问题是死锁是发生是SQL server上的,特地找了下SQL2008的书,看了下,死锁的解释. 共享锁 排他锁 更新锁 自定义锁 然后查了资料, 查询SQL死锁的 存储过程 create procedure sp_who_lock   as   beg

SQL Server 检测到基于一致性的逻辑 I/O 错误 pageid不正确、数据库日志文 件丢失

客户名称:深圳某科技信息有限公司 数据库类型:sql2000 数据库大小:20g 故障经过 电脑突然断电,软件就显示某数据库错误,无法连接,打开企业管理器,显示数 据库质疑,DBCC查询显示" SQL Server 检测到基于一致性的逻辑 I/O 错误 pageid不正确.数据库日志文件丢失". 处理经过 客户找到我们,然后我们让客户把数据库压缩发给我们,首先我们先对数据进行 检测分析,确定是" I/O 错误 ",然后我们就开始用我们的修复工具对数据进 行全面性的分

SQL Server中常用的SQL语句(转):

SQL Server中常用的SQL语句 转自:http://www.cnblogs.com/rainman/archive/2013/05/04/3060428.html 1.概述 名词 笛卡尔积.主键.外键 数据完整性 实体完整性:主属性不能为空值,例如选课表中学号和课程号不能为空 参照完整性:表中的外键取值为空或参照表中的主键 用户定义完整性:取值范围或非空限制,例如:性别(男女),年龄(0-130) 表连接 自然连接:与等值连接(a.id=b.id)相比,连接后的表只有一列id,而不是两列

SQL Server 检测到基于一致性的逻辑 I/O 错误

背景:新建DB_GZN 恢复数据库备份文件 执行:          select * from VI_MPS_PAPLT 错误提示: 消息 824,级别 24,状态 2,第 2 行 SQL Server 检测到基于一致性的逻辑 I/O 错误 校验和不正确(应为: 0x20d61048,但实际为: 0x7a8ab3ae).在文件 'C:/Program Files/Microsoft SQL Server/MSSQL10.MSSQLSERVER/MSSQL/DATA/DB_GZN.mdf' 中.

SQL Server 检测到基于一致性的逻辑 I/O 错误 pageid 不正确(应为 1:1772,但实际为 0:0)。在文件 &#39;D:\Program Files\Microsoft SQL Ser

SQL Server 检测到基于一致性的逻辑 I/O 错误 pageid 不正确(应为 1:1772,但实际为 0:0).在文件 'D:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\sgdtcc.MDF' 中.偏移量为 0x00000000dd8000 的位置对数据库 ID 10 中的页 (1:1772) 执行 读取 期间,发生了该错误.SQL Server 错误日志或系统事件日志中的其他消息可能提供了

检测SQL Server表占用空间大小SQL

检测SQL Server表占用空间大小SQL,要先选择需要查询的数据库,然后点击执行下面脚本. CREATE TABLE #T (NAME nvarchar(200),ROWS char(11),reserved varchar(18) ,Data varchar(18) ,index_size varchar(18) ,Unused varchar(18) ) GO INSERT #T EXEC SP_MSFOREACHTABLE 'EXEC sp_spaceused "?"' SE

SQL Server 检测到基于一致性的逻辑 I/O 错误 页撕裂

错误: SQL Server 检测到基于一致性的逻辑 I/O 错误 页撕裂(签名应该为: 0x55555555,但实际为: 0x89021555).在文件 'D:\data\databases.MDF' 中.偏移量为 0x000000051e0000 的位置对数据库 ID 7 中的页 (1:10480) 执行 读取 期间,发生了该错误.SQL Server 错误日志或系统事件日志中的其他消息可能提供了更详细信息.这是一个威胁数据库完整性的严重错误条件,必须立即纠正.请执行完整的数据库一致性检查(

第三篇——第二部分——第五文 配置SQL Server镜像——域环境SQL Server镜像日常维护

本文接上面两篇搭建镜像的文章: 第三篇--第二部分--第三文 配置SQL Server镜像--域环境:http://blog.csdn.net/dba_huangzj/article/details/28904503第三篇--第二部分--第四文 配置SQL Server镜像--非域环境:http://blog.csdn.net/dba_huangzj/article/details/27652857 在搭建的过程中,可能你会遇到比较多的问题,下面介绍一些常见的问题及解决方案,另外把主要精力放到对