Le plan d'exécution de la requête n'affiche pas les détails de verrouillage par défaut, est-il possible de visualiser les verrous, ainsi que le type, acquis lors de l'exécution d'une requête?
la source
Le plan d'exécution de la requête n'affiche pas les détails de verrouillage par défaut, est-il possible de visualiser les verrous, ainsi que le type, acquis lors de l'exécution d'une requête?
est-il possible de visualiser les verrous, ainsi que le type, acquis lors de l'exécution d'une requête?
Oui, pour déterminer les verrous,
Vous pouvez utiliser beta_lockinfopar Erland Sommarskog
beta_lockinfo
est une procédure stockée qui fournit des informations sur les processus et les verrous qu'ils détiennent ainsi que leurs transactions actives.beta_lockinfo
est conçu pour collecter autant d'informations que possible sur une situation de blocage, afin que vous puissiez instantanément trouver le coupable et tuer le processus de blocage si la situation est désespérée. Ensuite, vous pouvez vous asseoir et analyser la sortie debeta_lockinfo
pour comprendre comment la situation de blocage s'est produite et déterminer les actions à entreprendre pour éviter que la situation ne se reproduise. La sortie debeta_lockinfo
montre tous les processus actifs ainsi que les processus passifs avec des verrous, quels objets ils verrouillent, quelle commande ils ont soumise en dernier et quelle instruction ils exécutent. Vous obtenez également les plans de requête pour les instructions en cours. Normalement, vous exécutezbeta_lockinfo
pour regarder directement la sortie, mais il existe également un mode d'archivage où les données sont enregistrées dans la table. Ce n'est pas le moins utile, si vous voulez que quelqu'un vous envoie la sortie d'beta_lockinfo
un site auquel vous n'avez pas accès.
Une autre méthode consiste à utiliser sp_whoIsActivepar Adam Machanic avec@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
Voici comment je regarde les verrous par type de processus / table / verrou:
la source
Vous pouvez afficher l'historique des verrous acquis dans l'onglet "Messages" après avoir exécuté ceci: DBCC TRACEON (1200, 3604, -1) Mais ATTENTION, il active GLOBALEMENT ces indicateurs de trace, alors n'oubliez pas de les désactiver dès que vous ne le faites pas besoin d'eux.
la source
Vous pouvez afficher les verrous d'une session à l'aide de sp_lock ou sys.dm_tran_locks. Dans les deux cas, vous pouvez filtrer par session. Vous pouvez également utiliser des événements étendus pour ce faire.
la source
Oui, vous pouvez afficher les verrous et leur type lors de l'exécution de la requête via
Adam Mechanics's SP_whoisactive cliquez ici pour voir
De plus, si vous souhaitez créer un rapport de bloc avec vous pouvez le faire avec l'aide de la trace comme expliqué ici
la source
performance counters
vous donnera simplement un comportement à l'échelle de l'instance. L'OP veut au niveau de la requête.