死锁等待资源 RID



谁能帮我解码等待资源为 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)

最新更新