我收到了另一个团队关于SQL Server阻止的报告.看结果
Exec sp_who2
Run Code Online (Sandbox Code Playgroud)
和格伦贝瑞的博客查询
SELECT blocking.session_id AS blocking_session_id
,blocked.session_id AS blocked_session_id
,waitstats.wait_type AS blocking_resource
,waitstats.wait_duration_ms
,waitstats.resource_description
,blocked_cache.text AS blocked_text
,blocking_cache.text AS blocking_text
FROM sys.dm_exec_connections AS blocking
INNER JOIN sys.dm_exec_requests blocked
ON blocking.session_id = blocked.blocking_session_id
CROSS APPLY sys.dm_exec_sql_text(blocked.sql_handle) blocked_cache
CROSS APPLY sys.dm_exec_sql_text(blocking.most_recent_sql_handle) blocking_cache
INNER JOIN sys.dm_os_waiting_tasks waitstats
ON waitstats.session_id = blocked.session_id
Run Code Online (Sandbox Code Playgroud)
我不想抓住任何被阻挡的东西.多次运行我开始注意到某些东西出现了,但是下次运行查询时,blcoking已经消失了.
我创建了临时表 SELECT INTO
,blocking_cache.text AS blocking_text
INTO #TempBlockingTable
FROM sys.dm_exec_connections AS blocking
Run Code Online (Sandbox Code Playgroud)
在那之后修改了查询INSERT INTO SELECT.现在,我可以根据需要多次运行查询,而不必担心结果会消失.
我一直运行查询大约10秒钟,直到我最终得到一些结果.
SELECT * FROM #TempBlockingTable
Run Code Online (Sandbox Code Playgroud)
看着resource_description柱,从sys.dm_os_waiting_tasks我发现,数据显示在下面的格式.
<type-specific-description> id=lock<lock-hex-address> mode=<mode> associatedObjectId=<associated-obj-id>
Run Code Online (Sandbox Code Playgroud)
sys.dm_os_waiting_tasks http://technet.microsoft.com/en-us/library/ms188743.aspx上的Microsoft文档没有定义associatedObjectId
小智 10
回答实际上是来自Aaron Bertrand在Google Groups上发现的.要获取OBJECT_NAME,associatedObjectId您需要运行以下查询
SELECT OBJECT_NAME([object_id])
FROM sys.partitions
WHERE partition_id = 456489945132196
Run Code Online (Sandbox Code Playgroud)
此数字456489945132196表示associatedObjectId来自resource_description列的值sys.dm_os_waiting_tasks
| 归档时间: |
|
| 查看次数: |
5768 次 |
| 最近记录: |