任何人都可以帮助我解决在等待资源是RID时解码死锁的确切罪魁祸首的步骤,以及如何消除死锁?
答案 0 :(得分:0)
你可以使用Sp who& sp who2系统存储过程
sp_who的
Sp_who返回有关系统和用户活动的信息。 Sp_who返回以下列:Spid System进程ID 请求锁定相关线程的Ecid Execution上下文 随着spid。零表示主线程,所有其他数字表示 子线程。状态可运行,睡眠或背景。如果状态 是可运行的,这意味着该过程实际上正在执行工作, sleep意味着进程已连接到服务器,但处于空闲状态 此时此刻。 Loginname发起锁定请求的登录名 主机名启动锁定请求的计算机的名称 Blk阻止当前锁定请求的连接 connection Dbname请求锁定的数据库名称 请求锁定的Cmd常规命令类型sp_who的语法 也允许指定单个登录,但大部分时间都是如此 将在没有参数的情况下执行。 sp_who的输出非常好 类似于sp_who2的输出。
sp_who2
Sp_who2是sp_who的较新版本。它会返回一些 附加信息:请求的Spid系统进程ID 锁定状态背景,休眠或可运行登录登录名称 已请求锁定HostName锁定请求的计算机 已启动BlkBy阻塞连接的spid 当前连接DbName锁定请求所在的数据库名称 已生成请求的Command General命令类型 lock CPUTime请求使用的毫秒数 该命令使用LastBatch Date的DiskIO磁盘输入/输出 和连接ProgramName执行的最后一批的时间 发出连接的应用程序的名称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