Как узнать, к какой таблице относится блокировка страницы? - PullRequest
14 голосов
/ 19 октября 2011

Я использую представление sys.dm_tran_locks, чтобы проверить, какие области моей базы данных имеют блокировки, когда у нас возникают проблемы с производительностью.

Использование этого представления ....

  • Если тип_ресурса база данных Я могу использовать функцию DB_NAME, чтобы узнать, какая база данных имеет блокировку.

  • Если это объект , я обычно могу присоединиться к sys.tables, чтобы проверить, что это за таблица.

Однако, если тип_ресурса равен Page или Ключ , есть ли способ отследить это до его родительской таблицы, чтобы я мог получить хорошийпредставление о том, какие таблицы блокируются?

Ответы [ 2 ]

39 голосов
/ 19 октября 2011

Для этого используется столбец resource_associated_entity_id ( Пример запроса ).

SELECT dm_tran_locks.request_session_id,
       dm_tran_locks.resource_database_id,
       DB_NAME(dm_tran_locks.resource_database_id) AS dbname,
       CASE
           WHEN resource_type = 'OBJECT'
               THEN OBJECT_NAME(dm_tran_locks.resource_associated_entity_id)
           ELSE OBJECT_NAME(partitions.OBJECT_ID)
       END AS ObjectName,
       partitions.index_id,
       indexes.name AS index_name,
       dm_tran_locks.resource_type,
       dm_tran_locks.resource_description,
       dm_tran_locks.resource_associated_entity_id,
       dm_tran_locks.request_mode,
       dm_tran_locks.request_status
FROM sys.dm_tran_locks
LEFT JOIN sys.partitions ON partitions.hobt_id = dm_tran_locks.resource_associated_entity_id
LEFT JOIN sys.indexes ON indexes.OBJECT_ID = partitions.OBJECT_ID AND indexes.index_id = partitions.index_id
WHERE resource_associated_entity_id > 0
  AND resource_database_id = DB_ID()
ORDER BY request_session_id, resource_associated_entity_id 
1 голос
/ 19 октября 2011

Вы должны найти object_id, связанный с этим ресурсом, и это может потребовать присоединения к другой таблице.Например,

SELECT *, OBJECT_NAME(p.object_id) 
FROM sys.dm_tran_locks l    
JOIN sys.partitions p 
ON l.resource_associated_entity_id = p.hobt_id 
WHERE resource_type = 'KEY'

Найдите sys.dm_tran_locks в Books Online, чтобы выяснить, какими должны быть соединительные таблицы для каждого ресурса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...