MSSQL 如何确定死锁根源 session_id?

5 min read

在 MSSQL 中,可以使用以下步骤来确定死锁的根源 session_id:

  1. 执行以下查询来获取当前正在发生的死锁信息:
SELECT 
    dl.resource_type,
    dl.request_session_id,
    r.blocking_session_id,
    o.name AS object_name,
    o.type_desc AS object_type
FROM 
    sys.dm_tran_locks AS dl
    JOIN sys.objects AS o ON dl.resource_associated_entity_id = o.object_id
    LEFT JOIN sys.dm_exec_requests AS r ON dl.request_session_id = r.session_id
WHERE 
    dl.resource_type IN ('PAGE', 'KEY', 'EXTENT', 'RID')
    AND dl.request_mode = 'X'
    AND r.blocking_session_id IS NOT NULL;
  1. 此查询将返回导致死锁的会话的相关信息,包括资源类型、发起请求的 session_id、阻塞 session_id、对象名称和对象类型。

  2. 根据返回的信息分析死锁的根源。你可以查看阻塞 session_id,它是导致死锁的会话。你还可以查看对象名称和对象类型,以了解导致死锁的具体对象。

通过这些步骤,你可以确定死锁的根源 session_id,并进一步分析和解决死锁问题。