用于查找 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来获取有关会话或连接的更多详细信息。
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
喜欢请赞赏一下啦^_^
微信赞赏
支付宝赞赏