2011-10-19 19 views
12

Estoy usando la vista sys.dm_tran_locks para verificar qué áreas de mi base de datos tienen bloqueos cuando tenemos problemas de rendimiento.Cómo saber a qué tabla pertenece un bloqueo de página

Usando este punto de vista ....

  • Si la base de datos de Resource_type es puedo usar la función DB_NAME para averiguar qué base de datos tiene la cerradura.

  • Si es un objeto normalmente me puedo unir a sys.tables para comprobar qué tabla es.

Sin embargo, si el Resource_type es Página o clave ¿Hay alguna manera de rastrear esto de nuevo a su tabla padre para que pueda obtener una buena idea de qué tablas están bloqueando?

Respuesta

30

Esto es lo que la columna resource_associated_entity_id es para (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 
1

Tiene que encontrar el object_id asociado con ese recurso, y puede implicar unirse a otra tabla. Por ejemplo,

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' 

Mirar hacia arriba sys.dm_tran_locks en los libros en pantalla de averiguar lo que las tablas de unión deben ser para cada recurso.

Cuestiones relacionadas