2023-07-29 13:04阅读: 433评论: 0推荐: 0

用于查找 SQL Server 中死锁的 T-SQL 查询

用于查找 SQL Server 中死锁的 T-SQL 查询

早些时候,我写了一篇关于使用扩展事件来查找 SQL Server 上发生的死锁的文章。扩展事件对于跟踪服务器上短时间内发生的死锁有很大帮助,尤其是在生产环境中。然而,在开发环境中,我遇到过当多个开发人员尝试对表执行 dml 语句时出现持续长时间死锁的情况。在这种情况下,我使用轻量级 T-SQL 查询来查找死锁,即SQL 连接的阻塞和阻塞会话 ID根据该语句返回的详细信息,我能够找到执行阻塞会话的应用程序或用户,并帮助我终止特定的 SQL 连接。它还帮助我们识别并修复频繁阻塞的 SQL 语句。

下面是我用来快速查找死锁的查询。该语句基于SYS.DM_EXEC_REQUESTS动态管理视图。在此语句中,blocking_session_id列为您提供阻塞连接的 session_id,wait_type 列为您提供导致死锁的等待类型获取blocking_session_id后,您可以使用另一个dmv SYS.DM_EXEC_SESSIONS来获取有关会话或连接的更多详细信息。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
SELECT
    session_id,
    start_time,
    [status],
    command,
    blocking_session_id,
    wait_type,
    wait_time,
    open_transaction_count,
    transaction_id,
    total_elapsed_time,
    Definition = CAST(text AS VARCHAR(MAX))
FROM
    SYS.DM_EXEC_REQUESTS
    CROSS APPLY sys.dm_exec_sql_text(sql_handle)
WHERE blocking_session_id != 0

  

 

希望这个查找死锁的简单查询对大家有所帮助。

参考

  • 有关 sys.dm_exec_requests dmv 的更多信息,请访问Microsoft Docs

引用

https://www.mytecbits.com/microsoft/sql-server/t-sql-query-to-find-deadlocks

posted @   雪竹子  阅读(433)  评论(0编辑  收藏  举报
历史上的今天:
2021-07-29 Killable Processes in Oracle Database
2021-07-29 Know more about PGA_AGGREGATE_LIMIT 12c 19c
点击右上角即可分享
微信分享提示
💬
评论
📌
收藏
💗
关注
👍
推荐
🚀
回顶
收起