SqlServer查看死锁的存储过程

本文涉及的产品
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
云数据库 RDS SQL Server,基础系列 2核4GB
简介: IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = object_id(N'[dbo].[sp_who_lock]') AND OBJECTPROPERTY(id, N'IsProcedure') = 1)DROP PROCEDURE [dbo].
IF  EXISTS ( SELECT  *  FROM dbo.sysobjects  WHERE id  =  object_id(N ' [dbo].[sp_who_lock] 'AND  OBJECTPROPERTY(id, N ' IsProcedure '=  1)
DROP  PROCEDURE  [ dbo ]. [ sp_who_lock ]
GO
 
USE master
GO
CREATE  PROCEDURE sp_who_lock
AS
BEGIN
DECLARE  @spid  INT, @bl  INT,
         @intTransactionCountOnEntry  INT,
         @intRowcount  INT,
         @intCountProperties  INT,
         @intCounter  INT
 
         CREATE  TABLE #tmp_lock_who (
         id  INT  IDENTITY( 1, 1),
         spid  SMALLINT,
         bl  SMALLINT)
 
         IF  @@ERROR <> 0  RETURN  @@ERROR
 
         INSERT  INTO #tmp_lock_who(spid,bl)  SELECT  0 ,blocked
           FROM ( SELECT  *  FROM sysprocesses  WHERE blocked > 0 ) a
           WHERE  NOT  EXISTS( SELECT  *  FROM ( SELECT  *  FROM sysprocesses  WHERE blocked > 0 ) b
           WHERE a.blocked =spid)
           UNION  SELECT spid,blocked  FROM sysprocesses  WHERE blocked > 0
 
         IF  @@ERROR <> 0  RETURN  @@ERROR
 
--  找到临时表的记录数
         SELECT  @intCountProperties  =  COUNT( *), @intCounter  =  1
         FROM #tmp_lock_who
 
         IF  @@ERROR <> 0  RETURN  @@ERROR
 
         IF  @intCountProperties = 0
             SELECT  ' 现在没有阻塞和死锁信息 '  AS message
 
--  循环开始
while  @intCounter  <=  @intCountProperties
BEGIN
-- 取第一条记录
         SELECT  @spid  = spid, @bl  = bl
         FROM #tmp_lock_who  WHERE Id  =  @intCounter
         BEGIN
             IF  @spid  = 0
                 SELECT  ' 引起数据库死锁的是:  ' +  CAST( @bl  AS  VARCHAR( 10))  +  ' 进程号,其执行的SQL语法如下 '
             ELSE
                 SELECT  ' 进程号SPID: ' +  CAST( @spid  AS  VARCHAR( 10)) +  ' '  +  ' 进程号SPID: ' +  CAST( @bl  AS  VARCHAR( 10))  + ' 阻塞,其当前进程执行的SQL语法如下 '
             DBCC INPUTBUFFER ( @bl )
             END
 
-- 循环指针下移
         SET  @intCounter  =  @intCounter  +  1
END
 
DROP  TABLE #tmp_lock_who
 
RETURN  0
END

exec master.dbo.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
目录
相关文章
|
5月前
|
存储 SQL Go
sqlserver存储过程
sqlserver存储过程
|
5月前
|
存储 SQL 数据库
sqlserver中常用的几个存储过程
sqlserver中常用的几个存储过程
|
2月前
|
存储 SQL 数据库
如何使用 SQL Server 创建存储过程?
【8月更文挑战第31天】
67 0
|
4月前
|
存储 机器学习/深度学习 SQL
SQLSERVER存储过程语法详解
SQLSERVER存储过程语法详解
148 0
|
5月前
|
存储 数据库
sqlserver------数据库的存储过程(练习)
sqlserver------数据库的存储过程(练习)
42 1
|
5月前
|
存储 SQL
SQL Server 存储过程 触发器 事务处理
SQL Server 存储过程 触发器 事务处理
|
5月前
|
SQL
sqlserver死锁排查
sqlserver死锁排查
81 0
|
15天前
|
SQL 数据库
数据库数据恢复—SQL Server数据库报错“错误823”的数据恢复案例
SQL Server附加数据库出现错误823,附加数据库失败。数据库没有备份,无法通过备份恢复数据库。 SQL Server数据库出现823错误的可能原因有:数据库物理页面损坏、数据库物理页面校验值损坏导致无法识别该页面、断电或者文件系统问题导致页面丢失。
82 12
数据库数据恢复—SQL Server数据库报错“错误823”的数据恢复案例
|
10天前
|
SQL 关系型数据库 MySQL
创建包含MySQL和SQLServer数据库所有字段类型的表的方法
创建一个既包含MySQL又包含SQL Server所有字段类型的表是一个复杂的任务,需要仔细地比较和转换数据类型。通过上述方法,可以在两个数据库系统之间建立起相互兼容的数据结构,为数据迁移和同步提供便利。这一过程不仅要考虑数据类型的直接对应,还要注意特定数据类型在不同系统中的表现差异,确保数据的一致性和完整性。
22 4
|
24天前
|
SQL 存储 数据管理
SQL Server数据库
SQL Server数据库
41 11
下一篇
无影云桌面