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

本文涉及的产品
云数据库 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
相关文章
|
14天前
|
SQL 人工智能 算法
【SQL server】玩转SQL server数据库:第二章 关系数据库
【SQL server】玩转SQL server数据库:第二章 关系数据库
52 10
|
14天前
|
SQL 算法 数据库
【SQL server】玩转SQL server数据库:第三章 关系数据库标准语言SQL(二)数据查询
【SQL server】玩转SQL server数据库:第三章 关系数据库标准语言SQL(二)数据查询
86 6
|
2天前
|
SQL Java 数据库连接
Java从入门到精通:2.3.2数据库编程——了解SQL语言,编写基本查询语句
Java从入门到精通:2.3.2数据库编程——了解SQL语言,编写基本查询语句
|
7天前
|
SQL 关系型数据库 MySQL
mysql 数据库查询 查询字段用逗号隔开 关联另一个表并显示
mysql 数据库查询 查询字段用逗号隔开 关联另一个表并显示
17 2
|
9天前
|
SQL 存储 Oracle
关系型数据库查询数据的语句
本文介绍了关系型数据库中的基本SQL查询语句,包括选择所有或特定列、带条件查询、排序、分组、过滤分组、表连接、限制记录数及子查询。SQL还支持窗口函数、存储过程等高级功能,是高效管理数据库的关键。建议深入学习SQL及相应数据库系统文档。
9 2
|
14天前
|
SQL 存储 数据挖掘
数据库数据恢复—RAID5上层Sql Server数据库数据恢复案例
服务器数据恢复环境: 一台安装windows server操作系统的服务器。一组由8块硬盘组建的RAID5,划分LUN供这台服务器使用。 在windows服务器内装有SqlServer数据库。存储空间LUN划分了两个逻辑分区。 服务器故障&初检: 由于未知原因,Sql Server数据库文件丢失,丢失数据涉及到3个库,表的数量有3000左右。数据库文件丢失原因还没有查清楚,也不能确定数据存储位置。 数据库文件丢失后服务器仍处于开机状态,所幸没有大量数据写入。 将raid5中所有磁盘编号后取出,经过硬件工程师检测,没有发现明显的硬件故障。以只读方式将所有磁盘进行扇区级的全盘镜像,镜像完成后将所
数据库数据恢复—RAID5上层Sql Server数据库数据恢复案例
|
1月前
|
SQL 数据库 数据安全/隐私保护
Sql Server数据库Sa密码如何修改
Sql Server数据库Sa密码如何修改
|
2月前
|
SQL 算法 数据库
【数据库SQL server】关系数据库标准语言SQL之数据查询
【数据库SQL server】关系数据库标准语言SQL之数据查询
96 0
|
2月前
|
SQL 算法 数据库
【数据库SQL server】关系数据库标准语言SQL之视图
【数据库SQL server】关系数据库标准语言SQL之视图
77 0
|
1月前
|
SQL 数据库
sql server中创建数据库和表的语法
sql server中创建数据库和表的语法
18 1

热门文章

最新文章