Passer au contenu principal
Si des interblocages de base de données SQL surviennent pendant l’utilisation du programme, activez la journalisation des informations sur les interblocages. Pour ce faire, utilisez le système Extended Events. Création d’une session XEvents à l’aide de l’assistant de SQL Server Management Studio :
  1. Lancez le New Session Wizard depuis Object Explorer Management/Extended Events/Sessions :
  1. Spécifiez un nom pour votre session. Sélectionnez l’option Start the event session at server startup si vous souhaitez la lancer au démarrage du serveur :
  1. Dans la section Select Events To Capture, recherchez « xml_deadlock_report » :
  1. Dans la section Specify Session Data Storage, indiquez le chemin d’accès à l’emplacement où sera stocké le fichier contenant les résultats enregistrés de la session. L’option Enable file rollover active la rotation automatique dans le répertoire spécifié.
  2. Dans la section Summary, vous pouvez ouvrir et enregistrer les résultats de la session de l’assistant en T-SQL.

Afficher des informations sur les interblocages

  • Consultation d’informations sur les interblocages à l’aide de la session XEvents Pour lire les fichiers .xel, SQL Server fournit un composant DMF sys.fn_xe_file_target_read_file. Exécutez la requête suivante dans SQL Server Management Studio et spécifiez le chemin d’accès vers les fichiers de trace : select xdata.value(’(/event/data/value/deadlock/process-list/process/@lasttranstarted)[1]’,‘datetime’ ) as lasttranstarted ,xdata.value(’(/event/data/value/deadlock/resource-list/keylock/@objectname)[1]’ ,‘nvarchar(max)’) as objectname ,xdata.value(’(/event/data/value/deadlock/process-list/process/@clientapp)[1]’ ,‘nvarchar(256)’) as client_app ,xdata.value(’(/event/data/value/deadlock/process-list/process/@hostname)[1]’ ,‘nvarchar(256)’) as hostname ,xdata.value(’(/event/data/value/deadlock/process-list/process/@loginname)[1]’ ,‘nvarchar(256)’) as loginname ,xdata.value(’(/event/data/value/deadlock/resource-list/keylock/@indexname)[1]’ ,‘nvarchar(256)’) as indexname ,xdata.value(’(/event/data/value/deadlock/process-list/process/@waittime)[1]’ ,‘int’ ) as waittime ,xdata.value(’(/event/data/value/deadlock/resource-list/keylock/@mode)[1]’ ,‘nvarchar(10)’ ) as lockmode ,xdata.query(’(/event/data/value/deadlock)[1]’) as deadlock_graphfrom sys.fn_xe_file_target_read_file(‘D:\MSSQL\XE\deadlocks\deadlocks.xel’,null,null,null) as f — wildcard (deadlocks*.xel)cross apply (select cast(f.event_data as xml)) as e(xdata);
  • Affichage d’informations sur les interblocages à l’aide de la session system_health Si la journalisation des interblocages n’est pas activée, vous pouvez afficher des informations sur les interblocages à l’aide d’une session qui est toujours activée par défaut (system_health). Pour ce faire, exécutez la requête suivante dans SQL Server Management Studio : select e.xdata.value(’(/event/data/value/deadlock/process-list/process/@lasttranstarted)[1]’,‘datetime’ ) as lasttranstarted ,e.xdata.value(’(/event/data/value/deadlock/resource-list/keylock/@objectname)[1]’ ,‘nvarchar(max)’) as objectname ,e.xdata.value(’(/event/data/value/deadlock/process-list/process/@clientapp)[1]’ ,‘nvarchar(256)’) as client_app ,e.xdata.value(’(/event/data/value/deadlock/process-list/process/@hostname)[1]’ ,‘nvarchar(256)’) as hostname ,e.xdata.value(’(/event/data/value/deadlock/process-list/process/@loginname)[1]’ ,‘nvarchar(256)’) as loginname ,e.xdata.value(’(/event/data/value/deadlock/resource-list/keylock/@indexname)[1]’ ,‘nvarchar(256)’) as indexname ,e.xdata.value(’(/event/data/value/deadlock/process-list/process/@waittime)[1]’ ,‘int’ ) as waittime ,e.xdata.value(’(/event/data/value/deadlock/resource-list/keylock/@mode)[1]’ ,‘nvarchar(10)’ ) as lockmode ,e.xdata.query(’(/event/data/value/deadlock)[1]’) as deadlock_graphfrom sys.fn_xe_file_target_read_file(‘system_health*.xel’,null,null,null) as fcross apply (select cast(f.event_data as xml)) as e(xdata)where object_name = N’xml_deadlock_report’;
  • Affichage des informations sur les interblocages dans Azure Azure dispose d’une session distincte qui est collectée par défaut dans le stockage blob. Pour la consulter, utilisez l’exemple de requête ci-dessous (la requête doit être exécutée dans le contexte master) : select f.file_name ,xdata.value(’(/event/data/value/deadlock/process-list/process/@lasttranstarted)[1]’,‘datetime’ ) as lasttranstarted ,xdata.value(’(/event/data/value/deadlock/resource-list/keylock/@objectname)[1]’ ,‘nvarchar(max)’) as objectname ,xdata.value(’(/event/data/value/deadlock/process-list/process/@clientapp)[1]’ ,‘nvarchar(256)’) as client_app ,xdata.value(’(/event/data/value/deadlock/process-list/process/@hostname)[1]’ ,‘nvarchar(256)’) as hostname ,xdata.value(’(/event/data/value/deadlock/process-list/process/@loginname)[1]’ ,‘nvarchar(256)’) as loginname ,xdata.value(’(/event/data/value/deadlock/resource-list/keylock/@indexname)[1]’ ,‘nvarchar(256)’) as indexname ,xdata.value(’(/event/data/value/deadlock/process-list/process/@waittime)[1]’ ,‘int’ ) as waittime ,xdata.value(’(/event/data/value/deadlock/resource-list/keylock/@mode)[1]’ ,‘nvarchar(10)’ ) as lockmode ,xdata.query(’(/event/data/value/deadlock)[1]’) as deadlock_graphfrom sys.fn_xe_telemetry_blob_target_read_file(‘dl’, null, null, null) as fcross apply (select cast(f.event_data as xml)) as e(xdata);
Contactez le support technique et fournissez les informations sur l’interblocage obtenues en exécutant la requête.