`

sqlserver查询数据库死锁存储过程 sql

 
阅读更多
USE [XX库]
GO

/****** Object:  StoredProcedure [dbo].[sp_who_lock]    Script Date: 01/01/2014 14:52:27 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE procedure [dbo].[sp_who_lock]  
as    
begin    
   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=1 from #temp_who_lock     
if @@error<>0 return @@error     
if @count=0     
begin    
  select '没有阻塞和死锁信息'    
  return 0     
end    
while @index<=@count     
begin    
  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+1     
end    
if @lock=0      
begin    
  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语法如下'    
   dbcc inputbuffer(@spid)   
   dbcc inputbuffer(@blk)     
   set @index=@index+1     
  end    
end    
drop table #temp_who_lock     
return 0     
end          


GO

分享到:
评论

相关推荐

    查询SQL server数据库死锁存储过程

    标题与描述均指出本篇讨论的主题是“查询SQL Server数据库死锁存储过程”。这表明文章旨在介绍一个用于检测SQL Server环境中发生的死锁现象的自定义存储过程。 #### 标签解读 标签“SQL死锁”进一步强调了本文将...

    HIS系统SQL Server数据库死锁问题的分析与解决.pdf

    HIS系统SQL Server数据库死锁问题的分析与解决 SQL Server数据库是HIS系统中非常重要的一部分,负责存储和管理大量的医疗数据。然而,在实际应用中,SQL Server数据库可能会出现死锁问题,导致系统性能下降, thậm...

    SQLServer2016数据库管理与开发项目教程(微课版)-实训课件.rar

    《SQLServer2016数据库管理与开发项目教程(微课版)》是一份全面介绍SQL Server 2016数据库管理系统的学习资源,主要针对数据库管理和开发人员进行深入讲解。这个压缩包包含了丰富的实训课件,旨在帮助学习者通过...

    SQL Server死锁的解除方法

    1. 使用Create proc p_lockinfo命令来创建一个存储过程,以便快速查询死锁的进程信息。 2. 使用@kill_lock_spid bit=1命令来杀掉死锁的进程。 3. 使用@show_spid_if_no_lock bit=1命令来显示死锁的进程信息。 4. ...

    Sqlserver分析死锁进程

    在SQL Server数据库管理中,死锁是一个常见的问题,它发生在两个或多个事务相互等待对方释放资源,从而导致所有事务都无法继续执行的情况。SQL Server提供了多种工具和方法来检测和分析死锁,以便管理员能够及时发现...

    分析SQL Server 数据库中的死锁

    在IT领域,尤其是在数据库管理与优化中,理解并解决SQL Server数据库中的死锁问题是一项至关重要的技能。死锁,作为并发事务处理中的一个常见问题,指的是两个或更多的事务在执行过程中,因争夺相同的资源而造成的...

    SQL Server死锁查询

    ### SQL Server死锁查询知识点详解 #### 一、SQL Server中的死锁概念 在SQL Server中,当两个或多个事务互相等待对方释放资源时就会发生死锁。这通常发生在两个或更多的事务请求锁定同一资源的不同部分(如行、页...

    SQLServer2016数据库原理及应用(微课版)-拓展数据库及文档.rar

    《SQLServer2016数据库原理及应用》是一门深入探讨SQL Server 2016这一强大数据库管理系统的基础与高级特性的课程。本课程重点在于理解数据库的基本概念、设计原则以及在实际工作中的应用,同时涵盖了SQL Server ...

    SQL Server 2000数据库系统管理与维护1-42百度网盘地址

    SQL Server 2000是微软公司推出的一款关系型数据库管理系统,主要用于存储、管理和检索数据。它是Microsoft SQL Server系列中的一个重要版本,在企业和组织中被广泛应用于各种业务场景中。SQL Server 2000不仅提供了...

    获取数据库死锁信息过程

    一个经典的获取SQLSERVEr数据库死锁及引起锁定的进程的存储过程。执行时,必须具有数据库超级管理员权限。

    sqlserver死锁处理

    通过上述存储过程,我们不仅可以检测 SQL Server 中的死锁情况,还可以根据实际情况选择是否自动终止导致死锁的事务。这对于及时发现并解决问题具有重要的意义。当然,在实际应用中还需要结合具体情况,综合考虑各种...

    SQL Server 2000数据库开发从零开始

    在IT领域,数据库是至关重要的组成部分,而SQL Server 2000作为一款经典的关系型数据库管理系统,由Microsoft公司推出,被广泛应用于企业级数据存储和管理。本教程"SQL Server 2000数据库开发从零开始"旨在帮助初学...

    查询Sqlserver数据库死锁的一个存储过程分享

    使用sqlserver作为数据库的应用系统,都避免不了有时候会产生死锁, 死锁出现以后,维护人员或者开发人员大多只会通过sp_who来查找死锁的进程,然后用sp_kill杀掉。利用sp_who_lock这个存储过程,可以很方便的知道...

    SQL Server2000数据库应用教程(21世纪高等学校计算机规划教材)

    SQL Server 2000是微软公司推出的一款关系型数据库管理系统,它在企业级数据存储、管理和分析方面具有广泛的应用。本书深入浅出地讲解了SQL Server 2000的核心概念、功能和操作技巧,适合初学者和有一定基础的学习者...

    sql server 死锁检测

    在提供的代码中,我们看到一个名为`sp_who_lock`的存储过程,用于检测SQL Server中的死锁情况。下面是该存储过程的分析: 1. **变量声明**: - `@spid INT`:存储进程ID。 - `@bl INT`:存储被阻塞的进程ID。 - ...

    SQLServler自动杀死死锁进程

    在SQL Server数据库管理系统中,死锁是常见的并发问题,它发生在两个或多个事务相互等待对方释放资源,导致它们都无法继续执行。"SQLServer自动杀死死锁进程"这一话题旨在探讨如何配置SQL Server来自动检测并解决...

    SQL Server 2000数据库应用教程

    SQL Server 2000是微软公司推出的一款关系型数据库管理系统(RDBMS),在21世纪初广泛应用于企业和组织的数据存储和管理。 教程内容可能涵盖以下几个核心知识点: 1. **SQL Server 2000简介**:介绍SQL Server ...

    SQL Server示例数据库

    SQL Server示例数据库是Microsoft SQL Server提供的一组预先构建的数据库,用于演示、学习和测试SQL Server的功能。这些数据库包含了各种复杂的数据结构和业务场景,让开发者和DBA能够更好地理解如何在实际环境中...

Global site tag (gtag.js) - Google Analytics