第一次在服务器上运行sp_whoisactive
时,我遇到了一些意想不到的事情:
两个会话已经运行了 13 天,但它们似乎都相互阻塞。看看sys.dm_tran_locks
:
阻塞进程阈值设置的配置值为 10 秒。正在通过死锁监视器在服务器上成功解决其他死锁。
参数信息@get_locks
:
<Database name="DB1">
<Locks>
<Lock request_mode="S" request_status="GRANT" request_count="1" />
</Locks>
<Objects>
<Object name="TBL1" schema_name="dbo">
<Locks>
<Lock resource_type="OBJECT" request_mode="IX" request_status="GRANT" request_count="1" />
<Lock resource_type="PAGE" page_type="*" index_name="PK__TBL1__3214EC27326C5B6A" request_mode="U" request_status="GRANT" request_count="1" />
<Lock resource_type="PAGE" page_type="*" index_name="PK__TBL1__3214EC27326C5B6A" request_mode="U" request_status="WAIT" request_count="1" />
</Locks>
</Object>
</Objects>
</Database>
<Database name="DB1">
<Locks>
<Lock request_mode="S" request_status="GRANT" request_count="1" />
</Locks>
<Objects>
<Object name="TBL2" schema_name="dbo">
<Locks>
<Lock resource_type="OBJECT" request_mode="Sch-S" request_status="GRANT" request_count="2" />
</Locks>
</Object>
<Object name="TBL1" schema_name="dbo">
<Locks>
<Lock resource_type="OBJECT" request_mode="IX" request_status="GRANT" request_count="5" />
<Lock resource_type="PAGE" page_type="*" index_name="PK__TBL1__3214EC27326C5B6A" request_mode="U" request_status="GRANT" request_count="33701" />
<Lock resource_type="PAGE" page_type="*" index_name="PK__TBL1__3214EC27326C5B6A" request_mode="U" request_status="WAIT" request_count="1" />
</Locks>
</Object>
</Objects>
</Database>
我偶尔会看到“未检测到的死锁”一词,但我对它们没有任何直接经验。我的问题是:
- 这可能是未检测到的死锁的示例吗?如果没有死锁监视器线程的干预,我看不出这种情况是如何解决的,但由于某种原因,这种情况还没有发生。
- 除了更新到最新的 CU 并希望问题不再发生之外,还有什么可做的吗?服务器目前在 2017 CU10 上,我知道这有点过时了。
来自David Browne留下的评论- Microsoft