我有一个阻止交易,但没有显示任何声明

我有一个阻止交易,但没有显示任何声明

我的 SQL Server 2008 开始在简单查询上挂起,因此我使用内置的“所有阻塞事务”报告检查阻塞事务。果然,这样的事务存在。但是,如果我展开“阻塞 SQL 语句”,我会看到一个空白框。我如何才能了解有关该问题的更多信息?

此事务阻塞了几个对业务至关重要的工作(其实也不是,但老板和老板的老板都依赖它们),所以我很不情愿地KILL结束了阻塞会话。20 分钟后,它仍然是“回滚正在进行中...完成:0%...估计剩余时间:0 秒。”我真的很想知道是什么原因造成的,几个月来我都没有遇到过一次明显的阻塞。

答案1

您使用的是哪个版本的 SQL?如果是 2005 及以上版本,请尝试使用以下脚本识别有问题的查询?[免责声明:我不是该脚本的原作者;我把它放在我的图书馆里有一段时间了,但我无法给予原作者适当的荣誉,因为我不记得我从哪里得到它]

SELECT
db.name DBName,
tl.request_session_id,
wt.blocking_session_id,
OBJECT_NAME(p.OBJECT_ID) BlockedObjectName,
tl.resource_type,
h1.TEXT AS RequestingText,
h2.TEXT AS BlockingTest,
tl.request_mode
FROM sys.dm_tran_locks AS tl
INNER JOIN sys.databases db ON db.database_id = tl.resource_database_id
INNER JOIN sys.dm_os_waiting_tasks AS wt ON tl.lock_owner_address = wt.resource_address
INNER JOIN sys.partitions AS p ON p.hobt_id = tl.resource_associated_entity_id
INNER JOIN sys.dm_exec_connections ec1 ON ec1.session_id = tl.request_session_id
INNER JOIN sys.dm_exec_connections ec2 ON ec2.session_id = wt.blocking_session_id
CROSS APPLY sys.dm_exec_sql_text(ec1.most_recent_sql_handle) AS h1
CROSS APPLY sys.dm_exec_sql_text(ec2.most_recent_sql_handle) AS h2
GO

答案2

尝试使用 sp_who2
您可以观察数据库上发生的情况

相关内容