zoukankan      html  css  js  c++  java
  • Sql Server 检测死锁的SQL语句

    首先创建一个标量值函数DigLock,用来递归检测SqlServer中的每一个会话是否存在加锁循环,如果该函数最终返回1则表示检测到了加锁循环 (也就是说检测到了死锁),如果最终返回0则表示没有检测到加锁循环。

     1 CREATE FUNCTION [dbo].[DigLock]
     2 (
     3     @spid int,
     4     @orginSpid int
     5 )
     6 RETURNS bit
     7 AS
     8 BEGIN
     9     declare @blockedSpid int=null;
    10 
    11     select @blockedSpid=spid from sysprocesses where blocked<>0 and blocked=@spid
    12 
    13     if @blockedSpid=@orginSpid
    14         return 1;--检测到了死锁
    15 
    16     if @blockedSpid is not null
    17     begin
    18         return dbo.DigLock(@blockedSpid,@orginSpid);
    19     end
    20 
    21     return 0;--未检测到死锁
    22 END

    然后定义一个视图V_DeadLock_Process,调用上面创建的函数,如果查询出了结果说明当前Sql Server中存在死锁

    1 CREATE VIEW [dbo].[V_DeadLock_Process]
    2 AS
    3 SELECT  spid, kpid, blocked, waittype, waittime, lastwaittype, waitresource, dbid, uid, cpu, physical_io, memusage, login_time, 
    4                    last_batch, ecid, open_tran, status, sid, hostname, program_name, hostprocess, cmd, nt_domain, nt_username, 
    5                    net_address, net_library, loginame, context_info, sql_handle, stmt_start, stmt_end, request_id
    6 FROM      sys.sysprocesses AS sp1
    7 WHERE   (blocked <> 0) AND (dbo.DigLock(spid, spid) = 1)

    查询视图V_DeadLock_Process,如果当前Sql Server中存在死锁的话就会显示查询到了记录

    Select * from [dbo].[V_DeadLock_Process]

    上图显示,53号会话锁住了54号会话,54号会话又锁住了53号会话,所以当前Sql Server中存在死锁。

    然后可以使用DBCC INPUTBUFFER语句传入上面视图查询到的会话spid,找到造成死锁的Sql语句

    DBCC INPUTBUFFER (53)--输入会话spid,可查询该会话正在执行的Sql语句,从而知道发生死锁的会话执行了什么Sql语句

  • 相关阅读:
    Leetcode 538. Convert BST to Greater Tree
    Leetcode 530. Minimum Absolute Difference in BST
    Leetcode 501. Find Mode in Binary Search Tree
    Leetcode 437. Path Sum III
    Leetcode 404. Sum of Left Leaves
    Leetcode 257. Binary Tree Paths
    Leetcode 235. Lowest Common Ancestor of a Binary Search Tree
    Leetcode 226. Invert Binary Tree
    Leetcode 112. Path Sum
    Leetcode 111. Minimum Depth of Binary Tree
  • 原文地址:https://www.cnblogs.com/OpenCoder/p/5557514.html
Copyright © 2011-2022 走看看