Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to find out what table a page lock belongs to

Tags:

I'm using the sys.dm_tran_locks view to check what areas of my database have locks when we are having performance problems.

Using this view....

  • If the resource_type is database I can use the DB_NAME function to find out what database has the lock.

  • If its an object I can normally join to sys.tables to check what table it is.

However if the resource_type is Page or Key is there any way to trace this back to its parent table so I can get a good idea of which tables are locking?

like image 878
Gavin Avatar asked Oct 19 '11 11:10

Gavin


1 Answers

This is what the resource_associated_entity_id column is for (Example query).

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  
like image 154
Martin Smith Avatar answered Nov 04 '22 00:11

Martin Smith