开发者社区> 阿笨net> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

SQL SERVER 查询死锁

简介: USE mastergoCREATE PROCEDURE [dbo].[sp_who_lock]AS     BEGIN        DECLARE @spid INT ,            @bl INT ,            @intTransactionCountOnEn...
+关注继续查看
USE master
go


CREATE PROCEDURE [dbo].[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(11) ,
              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
View Code

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
在 SQL Server 中查找活动连接和死锁
在SQL Server中有几种方法可以找到活动的 SQL 连接。让我们看看一些使用 T-SQL 查询的简单快捷的方法。
0 0
31 张图 | 一文搞懂 SQL事务+隔离级别+阻塞+死锁
31 张图 | 一文搞懂 SQL事务+隔离级别+阻塞+死锁
0 0
JDK的sql设计不合理导致的驱动类初始化死锁问题
JDK的sql设计不合理导致的驱动类初始化死锁问题
0 0
一个线上SQL死锁异常分析:深入了解事务和锁
引发死锁的原因是什么?如何避免?本文详细介绍了和死锁有关的知识点,通过深入分析MySQL事务和锁的机制,结合案例背景,找到了问题的所在,并梳理了解决方案,详解其原理。希望对同学们有所启发。
0 0
SQL Server死锁中的会话隔离级别为序列化(Serializable)实验测试
SQL Server死锁中的会话隔离级别为序列化(Serializable)实验测试最近在分析SQL Server的死锁时,发现一个比较有意思的现象,发现死锁当中一个会话的隔离级别为序列化(Serializable),这个是让人比较奇怪的地方,我们知道SQL Server数据库的默认隔离级别为已提交读(READ COMMITTED),除非人为设置事务隔离级别(TRANSACTION ISOLATION LEVEL),否则事务隔离级别会使用数据库的默认隔离级别。
21456 0
SQL SERVER 查看近期死锁
SQL SERVER 查看近期死锁在项目运行的过程中,死锁不可能完全避免,但要尽可能减少死锁的出现, 产生死锁的原因主要是: 1,系统资源不足。 2,进程运行推进的顺序不合适。 3,资源分配不当等。 产生死锁的四个必要条件: 互斥条件:一个资源每次只能被一个进程使用,即在一段时间内某资源仅为一个进程所占有。
1411 0
SQL Server死锁诊断--同一行数据在不同索引操作下引起的死锁
原文:SQL Server死锁诊断--同一行数据在不同索引操作下引起的死锁     死锁概述 对于数据库中出现的死锁,通俗地解释就是:不同Session(会话)持有一部分资源,并且同时相互排他性地申请对方持有的资源,然后双方都得不到自己想要的资源,从而造成的一种僵持的现象。
828 0
SQL Server死锁
原文:SQL Server死锁 SQL Server死锁 多个事务之间互相等待对方的资源,导致这些事务永久等待 注意是永久等待,而非长事务 死锁的4个条件 互斥条件(Mutual exclusion):资源不能被共享,只能由一个进程使用。
758 0
SQL Server 死锁的告警监控
原文:SQL Server 死锁的告警监控 今天这篇文章总结一下如何监控SQL Server的死锁,其实以前写过MS SQL 监控错误日志的告警信息,这篇文章着重介绍如何监控数据库的死锁,当然这篇文章不分析死锁产生的原因、以及如何解决死锁。
860 0
RDS SQL Server死锁(Deadlock)系列之一使用DBCC捕获死锁
RDS SQL Server死锁(Deadlock)系列之一使用DBCC捕获死锁http://www.bieryun.com/4528.html 问题引入 在日常运维阿里云RDS SQL Server产品过程中,经常会被客户问道:“应用程序被死锁报错啦?影响很大,到底是哪个进程导致了死锁发生的啊?怎么解决啊?怎么办呀?”。
1219 0
+关注
文章
问答
文章排行榜
最热
最新
相关电子书
更多
SQL Server 2017
立即下载
SQL Sever迁移PG经验
立即下载
RDS SQL Server CPU高使用率性能优化
立即下载