2010-12-16 7 views
8

¿Hay alguna forma de enumerar las tablas bloqueadas y eliminar las transacciones si queremos que se desbloqueen inmediatamente?Cómo encontrar los nombres de tabla bloqueados (específicos de cualquier transacción)

¿O hay alguna otra terminología que debemos seguir para la operación anterior que estoy buscando?

Cualquier ayuda u orientación será apreciada.

+1

Realmente no hay necesidad de poner a su sujeto como la primera línea de su pregunta, todos lo leímos. Además, no necesitas gorras, solo hace que sea difícil de leer. – Robert

Respuesta

13

Esto mostrará todas las bases de datos con bloqueos exclusivos retenidos (que pueden incluir los transitorios mantenidos en el momento presente se ejecuta), utilizando el sys.dm_tran_locks DMV:

select d.*, l.* from sys.dm_tran_locks l 
join sys.databases d on l.resource_database_id = d.database_id 
where l.request_mode = 'X' 

(X = exclusivo, S = compartida, IS = Intención compartida) Ver Lock Modes.

Pero, probablemente, la mejor manera es para encender Indicadores de traza 1204 y 1222:

indicador de traza 1204 y la marca de seguimiento 1222 Cuando se producen estancamientos, el indicador de traza 1204 y indicador de traza 1222 información de la declaración que es capturado en el SQL Server 2005 error log. El indicador de traza 1204 informa la información de interbloqueo formateada por cada nodo involucrado en el interbloqueo. Indicador de traza 1222 formatos de interbloqueo información, primero por procesos y luego por recursos. Es posible habilitar ambas banderas de traza para obtener dos representaciones del mismo evento de interbloqueo .

Ref: Detecting and Ending Deadlocks

Además, ejecute sp_who2 y buscar entradas en (bloqueado por) la columna de la BlkBy; sigue estos hasta llegar a la cabeza de la cadena de interbloqueo. Ese es el identificador del proceso (o PID) responsable.

para conseguir lo SQL se ejecuta detrás de un proceso específico puede ejecutar:

dbcc inputbuffer (@pid) 

y utilizar ese PID para matar el proceso (con prudencia y bajo su propio riesgo):

kill @pid 

echa un vistazo a Who is Active? v10.00: DMV Monitoring Made Easy

lea también Blocking is not Deadlocking (para distinguir los dos escenarios)

+0

Lo que significa exactamente la columna BlkBy es algo relacionado con la Transacción debido a la cual la Tabla ha sido bloqueada. Y cómo matar el proceso usando PID. Puedo SPID nombre de columna cuando ejecuto "sp_who2" –

+0

¿Qué implican los valores de sys.dm_tran_locks.request_mode para S, IS y X como en su consulta anterior? puedes por favor describir esto? –

+0

@K Maheshwar Rao: ¿esto es útil? ¿Qué tal un poco de amor? –

Cuestiones relacionadas