El plan de ejecución de consultas no muestra los detalles de bloqueo de forma predeterminada, ¿es posible ver los bloqueos, junto con el tipo, adquiridos durante la ejecución de una consulta?
fuente
El plan de ejecución de consultas no muestra los detalles de bloqueo de forma predeterminada, ¿es posible ver los bloqueos, junto con el tipo, adquiridos durante la ejecución de una consulta?
¿Es posible ver los bloqueos, junto con el tipo, adquirido durante la ejecución de una consulta?
Sí, para determinar las cerraduras,
Puedes usar beta_lockinfopor Erland Sommarskog
beta_lockinfo
es un procedimiento almacenado que proporciona información sobre los procesos y los bloqueos que contienen, así como sus transacciones activas.beta_lockinfo
está diseñado para recopilar tanta información sobre una situación de bloqueo como sea posible, de modo que pueda encontrar instantáneamente al culpable y matar el proceso de bloqueo si la situación es desesperada. Luego, puede sentarse y analizar el resultadobeta_lockinfo
para comprender cómo surgió la situación de bloqueo y determinar qué acciones tomar para evitar que la situación vuelva a ocurrir. La salida debeta_lockinfo
muestra todos los procesos activos y pasivos con bloqueos, qué objetos bloquean, qué comando enviaron por última vez y qué declaración están ejecutando. También obtiene los planes de consulta para las declaraciones actuales. Normalmente corresbeta_lockinfo
para mirar la salida directamente, pero también hay un modo de archivo donde los datos se guardan en la tabla. Esto no es lo menos útil, si desea que alguien le envíe la salida desdebeta_lockinfo
un sitio en el que no tiene acceso.
Otro método es utilizarlo sp_whoIsActivepor Adam Machanic con@get_locks = 1
EXEC sp_WhoIsActive
@filter = '',
@filter_type = 'session',
@not_filter = '',
@not_filter_type = 'session',
@show_own_spid = 0,
@show_system_spids = 0,
@show_sleeping_spids = 1,
@get_full_inner_text = 0,
@get_plans = 1,
@get_outer_command = 1,
@get_transaction_info = 0,
@get_task_info = 1,
@get_locks = 1, ----------> 1 = ON (get lock info); 0 = OFF
@get_avg_time = 0,
@get_additional_info = 0,
@find_block_leaders = 0,
@delta_interval = 0,
@output_column_list = '[dd%][session_id][sql_text][sql_command][login_name][wait_info][tasks][tran_log%][cpu%][temp%][block%][reads%][writes%][context%][physical%][query_plan][locks][%]',
@sort_order = '[start_time] ASC',
@format_output = 1,
@destination_table = '',
@return_schema = 0,
@schema = NULL,
@help = 0
Así es como miro las cerraduras por proceso / tabla / tipo de cerradura:
fuente
Puede ver el historial de bloqueos adquiridos en la pestaña "Mensajes" después de ejecutar esto: DBCC TRACEON (1200, 3604, -1) Pero CUIDADO, está habilitando esas marcas de seguimiento GLOBALMENTE, así que no olvide desactivarlas tan pronto como no lo haga. los necesito
fuente
Puede ver los bloqueos para una sesión usando sp_lock o sys.dm_tran_locks. En ambos sentidos, puede filtrar por sesión. También puede usar eventos extendidos para hacer eso.
fuente
Sí, puede ver los bloqueos y su tipo durante la ejecución de la consulta a través de
SP_whoisactive de Adam Mechanics haga clic aquí para ver
Además, si desea crear un informe de bloque, puede hacerlo con la ayuda de la traza como se explica aquí
fuente
performance counters
solo le dará un comportamiento amplio de instancia. El OP quiere a nivel de consulta.