谁能帮我解码等待资源为 RID 时死锁的确切罪魁祸首以及如何消除死锁的步骤?
您可以使用 Sp who&sp who2 系统存储过程
sp_who
Sp_who返回有关系统和用户活动的信息。 Sp_who返回以下列: Spid 系统进程 ID 请求了关联线程的锁 Ecid 执行上下文 与尖顶。零表示主线程,所有其他数字表示 子线程。 状态 可运行、睡眠或后台。如果状态 是可运行的,这意味着进程实际上正在执行工作, 休眠意味着进程已连接到服务器,但在 此刻。 登录名 已启动锁定请求的登录名 主机名 发起锁定请求的计算机的名称 Blk 阻止来自当前锁定请求的连接 连接 已请求锁的数据库名称 请求锁的 Cmd 常规命令类型 sp_who的语法 还允许指定单个登录,但是,大多数时候它 将在没有参数的情况下执行。sp_who的输出非常 类似于sp_who2的输出。
sp_who2
Sp_who2是sp_who的较新版本。它返回一些 其他信息:请求 锁定 状态 背景、睡眠或可运行 登录 登录名 已请求锁定主机名 请求锁定的计算机 已启动 Blkby 阻塞连接的尖峰 当前连接 DbName 锁定请求的数据库名称 已生成请求 锁定 CPUTime 请求已使用的毫秒数 DiskIO 命令已使用的磁盘输入/输出 上一个批处理日期 和连接执行的最后一个批次的时间 程序名称 发出连接 Spid 的应用程序的名称 如果您 无法从输出的开头读取 SPID 重复 此处示例:Sp_who2
阻止详细信息 :
--============================================
--View Blocking in Current Database
--Author: Timothy Ford
--http://thesqlagentman.com
--============================================
SELECT DTL.resource_type,
CASE
WHEN DTL.resource_type IN ('DATABASE', 'FILE', 'METADATA') THEN DTL.resource_type
WHEN DTL.resource_type = 'OBJECT' THEN OBJECT_NAME(DTL.resource_associated_entity_id)
WHEN DTL.resource_type IN ('KEY', 'PAGE', 'RID') THEN
(
SELECT OBJECT_NAME([object_id])
FROM sys.partitions
WHERE sys.partitions.hobt_id =
DTL.resource_associated_entity_id
)
ELSE 'Unidentified'
END AS requested_object_name, DTL.request_mode, DTL.request_status,
DOWT.wait_duration_ms, DOWT.wait_type, DOWT.session_id AS [blocked_session_id],
sp_blocked.[loginame] AS [blocked_user], DEST_blocked.[text] AS [blocked_command],
DOWT.blocking_session_id, sp_blocking.[loginame] AS [blocking_user],
DEST_blocking.[text] AS [blocking_command], DOWT.resource_description
FROM sys.dm_tran_locks DTL
INNER JOIN sys.dm_os_waiting_tasks DOWT
ON DTL.lock_owner_address = DOWT.resource_address
INNER JOIN sys.sysprocesses sp_blocked
ON DOWT.[session_id] = sp_blocked.[spid]
INNER JOIN sys.sysprocesses sp_blocking
ON DOWT.[blocking_session_id] = sp_blocking.[spid]
CROSS APPLY sys.[dm_exec_sql_text](sp_blocked.[sql_handle]) AS DEST_blocked
CROSS APPLY sys.[dm_exec_sql_text](sp_blocking.[sql_handle]) AS DEST_blocking
WHERE DTL.[resource_database_id] = DB_ID()
sp-who-to-find-dead-locks-in-SQL-Server
在SQL服务器中识别阻塞的不同技术
理解-sql-server-blocking(英语:understanding-sql-server-blocking)