相关疑难解决方法(0)

当我从 sys.dm_tran_locks 调用 OBJECT_NAME(object_id, database_id) 时,为什么会被阻止?

我正在处理一个查询,以判断给定会话中哪些对象具有锁定,但我遇到了一些阻塞问题。

这是我的基本查询:

SELECT request_session_id AS session_id, 
    request_owner_id AS transaction_id,
    OBJECT_SCHEMA_NAME(resource_associated_entity_id, resource_database_id),
    OBJECT_NAME(resource_associated_entity_id, resource_database_id),
    COUNT(1) AS lock_count
FROM sys.dm_tran_locks WITH (NOLOCK)
WHERE resource_type = 'OBJECT'
GROUP BY request_session_id, request_owner_id, 
    resource_database_id, resource_associated_entity_id
Run Code Online (Sandbox Code Playgroud)

当我运行此查询时,我偶尔会被实际持有锁的会话之一阻止。如果我删除OBJECT_NAMEOBJECT_SCHEMA_NAME然后我没有任何问题。我试过将信息转储到一个表中,然后在有类似问题的表中使用这些值的函数。

这让我相信问题出在OBJECT_NAMEOBJECT_SCHEMA_NAME函数中,但我不确定为什么或如何解决它。我也不确定为什么我有时会被阻止有时不会。有没有人有什么建议?

sql-server metadata sql-server-2008-r2 dmv blocking

4
推荐指数
1
解决办法
905
查看次数

标签 统计

blocking ×1

dmv ×1

metadata ×1

sql-server ×1

sql-server-2008-r2 ×1