查询Sqlserver数据库死锁的一个存储过程(转)

本文涉及的产品
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
云数据库 RDS SQL Server,基础系列 2核4GB
简介: 链接 :http://www.cnblogs.com/mzhanker/archive/2011/06/04/2072739.html 使用sqlserver作为数据库的应用系统,都避免不了有时候会产生死锁, 死锁出现以后,维护人员或者开发人员大多只会通过sp_who来查找死锁的进程,然后用sp_kill杀掉。

链接 :http://www.cnblogs.com/mzhanker/archive/2011/06/04/2072739.html

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

创建sp_who_lock存储过程

?
CREATE procedure 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

在查询分析器中执行:

exec sp_who_lock

 

直到最后的结果为:

 
相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS&nbsp;SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/sqlserver
相关文章
|
13天前
|
存储 缓存 网络协议
数据库执行查询请求的过程?
客户端发起TCP连接请求,服务端通过连接器验证主机信息、用户名及密码,验证通过后创建专用进程处理交互。服务端进程缓存以减少创建和销毁线程的开销。后续步骤包括缓存查询(8.0版后移除)、语法解析、查询优化及存储引擎调用,最终返回查询结果。
25 6
|
24天前
|
SQL 存储 Linux
从配置源到数据库初始化一步步教你在CentOS 7.9上安装SQL Server 2019
【11月更文挑战第16天】本文介绍了在 CentOS 7.9 上安装 SQL Server 2019 的详细步骤,包括配置系统源、安装 SQL Server 2019 软件包以及数据库初始化,确保 SQL Server 正常运行。
|
1月前
|
SQL 存储 Linux
从配置源到数据库初始化一步步教你在CentOS 7.9上安装SQL Server 2019
【11月更文挑战第8天】本文介绍了在 CentOS 7.9 上安装 SQL Server 2019 的详细步骤,包括系统准备、配置安装源、安装 SQL Server 软件包、运行安装程序、初始化数据库以及配置远程连接。通过这些步骤,您可以顺利地在 CentOS 系统上部署和使用 SQL Server 2019。
|
12天前
|
SQL JavaScript 程序员
数据库LIKE查询屡试不爽?揭秘大多数人都忽视的秘密操作符!
本文分析了因数据库中的不可见空白字符导致的数据查询问题,探讨了问题的成因与特性,并提出了使用 SQL 语句修复问题的有效方案。同时,总结了避免类似问题的经验和注意事项。
25 0
|
1月前
|
SQL 存储 Linux
从配置源到数据库初始化一步步教你在CentOS 7.9上安装SQL Server 2019
【11月更文挑战第7天】本文介绍了在 CentOS 7.9 上安装 SQL Server 2019 的详细步骤,包括系统要求检查与准备、配置安装源、安装 SQL Server 2019、配置 SQL Server 以及数据库初始化(可选)。通过这些步骤,你可以成功安装并初步配置 SQL Server 2019,进行简单的数据库操作。
|
1月前
|
存储 缓存 固态存储
怎么让数据库查询更快
【10月更文挑战第28天】
35 2
|
1月前
|
存储 缓存 关系型数据库
怎么让数据库查询更快
【10月更文挑战第25天】通过以上综合的方法,可以有效地提高数据库查询的速度,提升应用程序的性能和响应速度。但在优化过程中,需要根据具体的数据库系统、应用场景和数据特点进行合理的调整和测试,以找到最适合的优化方案。
|
19天前
|
JSON JavaScript 关系型数据库
node.js连接GBase 8a 数据库 并进行查询代码示例
node.js连接GBase 8a 数据库 并进行查询代码示例
|
1月前
|
监控 关系型数据库 MySQL
数据库优化:MySQL索引策略与查询性能调优实战
【10月更文挑战第27天】本文深入探讨了MySQL的索引策略和查询性能调优技巧。通过介绍B-Tree索引、哈希索引和全文索引等不同类型,以及如何创建和维护索引,结合实战案例分析查询执行计划,帮助读者掌握提升查询性能的方法。定期优化索引和调整查询语句是提高数据库性能的关键。
220 1
|
1月前
|
存储 SQL NoSQL