SqlServer查看死锁的存储过程

本文涉及的产品
云数据库 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
目录
相关文章
|
28天前
|
存储 SQL Go
sqlserver存储过程
sqlserver存储过程
19 0
|
29天前
|
存储 SQL 数据库
sqlserver中常用的几个存储过程
sqlserver中常用的几个存储过程
47 0
|
6月前
|
存储
SQLServer存储过程中事务的创建
SQLServer存储过程中事务的创建
45 0
|
6月前
|
存储
SQLServer分页获取数据的存储过程
SQLServer分页获取数据的存储过程
24 0
|
6月前
|
存储 SQL 数据库
SQLServer存储过程的执行计划
SQLServer存储过程的执行计划
64 0
|
15天前
|
存储 SQL 关系型数据库
轻松入门MySQL:加速进销存!利用MySQL存储过程轻松优化每日销售统计(15)
轻松入门MySQL:加速进销存!利用MySQL存储过程轻松优化每日销售统计(15)
|
1月前
|
存储 关系型数据库 MySQL
Mysql基础第二十六天,使用存储过程
Mysql基础第二十六天,使用存储过程
28 0
Mysql基础第二十六天,使用存储过程
|
1月前
|
存储 SQL 关系型数据库
【MySQL 数据库】9、存储过程
【MySQL 数据库】9、存储过程
202 0
|
3月前
|
存储 关系型数据库 MySQL
MySQL-调用存储过程
MySQL-调用存储过程
101 2
|
3月前
|
存储 关系型数据库 MySQL
MySQL 中创建存储过程
MySQL 中创建存储过程
24 1