`
xf_zhanghaidong
  • 浏览: 28315 次
  • 性别: Icon_minigender_1
  • 来自: 襄樊
社区版块
存档分类
最新评论

sqlserver查询死锁存储过程

阅读更多
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
分享到:
评论

相关推荐

    查询SQL server数据库死锁存储过程

    标题与描述均指出本篇讨论的主题是“查询SQL Server数据库死锁存储过程”。这表明文章旨在介绍一个用于检测SQL Server环境中发生的死锁现象的自定义存储过程。 #### 标签解读 标签“SQL死锁”进一步强调了本文将...

    SQL Server死锁的解除方法

    SQL Server死锁的查询方法有多种,下面列举了几种常见的方法: 1. 使用exec master..xp_lockinfo 0, 0命令来查询死锁的进程信息。 2. 使用exec master..xp_lockinfo 1, 0命令来查询死锁的进程信息,并杀掉死锁的...

    SQL Server死锁查询

    ### SQL Server死锁查询知识点详解 #### 一、SQL Server中的死锁概念 在SQL Server中,当两个或多个事务互相等待对方释放资源时就会发生死锁。这通常发生在两个或更多的事务请求锁定同一资源的不同部分(如行、页...

    Sqlserver分析死锁进程

    本文将详细介绍如何在SQL Server中分析死锁进程,特别是如何通过存储过程来捕捉和分析死锁信息。 ### 死锁分析存储过程 在给定的部分内容中,可以看到一个名为`sp_check_lock`的存储过程被创建,其主要目的是检查...

    SQL Server死锁总结

    ### SQL Server死锁总结 #### 一、死锁原理 死锁是计算机系统中常见的问题之一,特别是在数据库管理系统中,由于并发控制不当可能导致系统性能下降甚至完全停止响应。在SQL Server中,死锁指的是两个或多个事务...

    sql server 死锁检测

    在提供的代码中,我们看到一个名为`sp_who_lock`的存储过程,用于检测SQL Server中的死锁情况。下面是该存储过程的分析: 1. **变量声明**: - `@spid INT`:存储进程ID。 - `@bl INT`:存储被阻塞的进程ID。 - ...

    sqlserver死锁处理

    通过上述存储过程,我们不仅可以检测 SQL Server 中的死锁情况,还可以根据实际情况选择是否自动终止导致死锁的事务。这对于及时发现并解决问题具有重要的意义。当然,在实际应用中还需要结合具体情况,综合考虑各种...

    SQL SERVER 死锁的解决之道

    本文将深入探讨SQL Server死锁的概念、原因、检测方法以及如何有效地解决和预防死锁。 1. **死锁的概念** 死锁是系统资源分配的一种状态,其中两个或更多的事务相互等待对方释放资源,形成一个循环等待链,导致...

    HIS系统SQL Server数据库死锁问题的分析与解决.pdf

    死锁可能会出现于 SQL Server 数据库中的各种场景,例如在数据修改、数据查询、数据插入等操作中。 那么,如何避免和解决SQL Server数据库死锁问题呢?首先,我们需要了解SQL Server数据库的锁机制。SQL Server...

    sql server 2008 存储过程与储发器 详解 书籍

    在SQL Server 2008中,存储过程和触发器是数据库管理中不可或缺的重要组成部分,它们为数据库系统提供了更高级别的功能和控制。本篇将深入解析这两个概念及其在实际应用中的具体用法。 首先,存储过程是预编译的SQL...

    查看死锁信息.sql

    此代码运行后,会生成一个存储过程,后面直接调用此存储过程即可查看,运行非常方便,可以快速定位死锁进程,快速解决sql数据库死锁问题。希望可以给各位系统管理员带来方便。希望可以给各位系统管理员带来方便。...

    SQLServer死锁

    为了排查死锁,我们可以使用 SQL Server 的系统存储过程 sp_who 和 sp_lock,查看当前数据库中的锁情况。具体步骤如下: 1. 使用 sp_who 和 sp_lock 查看当前数据库中的锁情况。 2. 根据 objectID(@objID)(SQL ...

    SQLServler自动杀死死锁进程

    "SQLServer自动杀死死锁进程"这一话题旨在探讨如何配置SQL Server来自动检测并解决这些死锁情况,以避免系统阻塞和性能下降。 1. **死锁的基本概念**: 死锁是指两个或多个事务在执行过程中,因争夺资源而造成的一...

    SqlServer查询和Kill进程死锁的语句

    本文将详细介绍如何查询和解决SQL Server中的死锁问题。 首先,要查询死锁进程,可以使用以下SQL语句: ```sql select request_session_id spid, OBJECT_NAME(resource_associated_entity_id) tableName from ...

    分析SQL Server 数据库中的死锁

    这个存储过程通过分析`sysprocesses`表中的数据,返回包含死锁事务的SPID(会话进程ID)和被阻塞的SPID,以及它们正在执行的SQL语句,便于快速定位问题。 #### 存储过程的使用 一旦创建了`sp_who_lock`存储过程,...

    查询Sqlserver数据库死锁的一个存储过程分享

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

    查找sqlserver查询死锁源头的方法 sqlserver死锁监控

    以下是一些关于SQL Server死锁监控及查询死锁源头的方法。 首先,我们可以使用内置的系统存储过程`sys.dm_tran_locks`来检查当前的锁定状态,这个视图提供了关于系统中所有锁定的详细信息。但是,要确定具体的死锁...

    SQLSERVER死锁总结

    "SQLSERVER死锁总结" SQL Server 死锁是指在一个或多个任务中,如果每个任务锁定了其他任务试图锁定的资源,此时会造成这些任务永久阻塞,从而出现死锁。死锁的四个必要条件是互斥条件、请求与保持条件、非剥夺条件...

    sqlserver进程死锁关闭的方法

    SQL Server进程死锁是数据库管理中常见的问题,它发生在两个或多个事务无法继续进行,因为它们互相等待对方释放资源的情况。解决这个问题对于确保数据库系统的稳定性和数据一致性至关重要。以下是一些关于如何处理...

Global site tag (gtag.js) - Google Analytics