用于查找 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
喜欢请赞赏一下啦^_^
微信赞赏
支付宝赞赏

浙公网安备 33010602011771号