O plano de execução da consulta não mostra os detalhes do bloqueio por padrão. É possível visualizar os bloqueios, juntamente com o tipo, adquirido durante a execução de uma consulta?
fonte
O plano de execução da consulta não mostra os detalhes do bloqueio por padrão. É possível visualizar os bloqueios, juntamente com o tipo, adquirido durante a execução de uma consulta?
é possível visualizar os bloqueios, juntamente com o tipo, adquiridos durante a execução de uma consulta?
Sim, para determinar bloqueios,
Você pode usar beta_lockinfopor Erland Sommarskog
beta_lockinfo
é um procedimento armazenado que fornece informações sobre processos e bloqueios que eles mantêm, bem como suas transações ativas.beta_lockinfo
foi projetado para reunir o máximo de informações possível sobre uma situação de bloqueio, para que você possa encontrar instantaneamente o culpado e matar o processo de bloqueio, se a situação estiver desesperada. Em seguida, você pode sentar e analisar a saídabeta_lockinfo
para entender como surgiu a situação de bloqueio e descobrir quais ações executar para impedir que a situação se repita. A saída debeta_lockinfo
mostra todos os processos ativos e passivos com bloqueios, quais objetos eles bloqueiam, qual comando eles enviaram pela última vez e qual instrução eles estão executando. Você também obtém os planos de consulta para as instruções atuais. Normalmente, você correbeta_lockinfo
para olhar diretamente para a saída, mas também há um modo de arquivamento em que os dados são salvos na tabela. Isso não é o menos útil, se você deseja que alguém envie a saída debeta_lockinfo
um site, você não tem acesso a si mesmo.
Outro método é usar sp_whoIsActivepor Adam Machanic com@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
Aqui está como eu vejo os bloqueios por processo / tabela / tipo de bloqueio:
fonte
Você pode visualizar o histórico de bloqueios adquiridos na guia "Mensagens" depois de executar o seguinte: DBCC TRACEON (1200, 3604, -1) Mas lembre-se de ativar os sinalizadores de rastreamento GLOBALMENTE, portanto, não se esqueça de desativá-los assim que você não o fizer. preciso deles.
fonte
Você pode visualizar os bloqueios para uma sessão usando sp_lock ou sys.dm_tran_locks. Nos dois sentidos, você pode filtrar pela sessão. Você também pode usar Eventos estendidos para fazer isso.
fonte
Sim, você pode visualizar os bloqueios e seu tipo durante a execução da consulta via
SP_whoisactive de Adam mechanics clique aqui para ver
Além disso, se você deseja criar um relatório de bloco, pode fazer com a ajuda de rastreamento, conforme explicado aqui
fonte
performance counters
apenas fornecerá um amplo comportamento da instância. O OP quer no nível da consulta.