Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Comment trouver la raison du blocage dans sql server ro14 ?

Les informations sur les interblocages sont capturées par le system_health Suivi des événements étendus par défaut. Inutile d'activer des indicateurs de trace supplémentaires.

Informations du xml_deadlock peut être visualisé à partir de l'Explorateur d'objets SSMS (Gestion-->Événements étendus-->Sessions--system_health) ou avec T-SQL. Vous trouverez ci-dessous un exemple de requête pour obtenir le XML de blocage à partir de la cible du fichier. Vous pouvez également enregistrer le XML de blocage dans un fichier avec un xdl extension et ouvrez le fichier dans SSMS pour une vue graphique du blocage.

--get xml_deadlock_report from system_health session file target
WITH
      --get full path to current system_health trace file
      CurrentSystemHealthTraceFile AS (
        SELECT CAST(target_data AS xml).value('(/EventFileTarget/File/@name)[1]', 'varchar(255)') AS FileName
        FROM sys.dm_xe_session_targets
        WHERE
            target_name = 'event_file'
            AND CAST(target_data AS xml).value('(/EventFileTarget/File/@name)[1]', 'varchar(255)') LIKE '%\system[_]health%'
    )
      --get trace folder name and add base name of system_health trace file with wildcard
    , BaseSystemHealthFileName AS (
        SELECT 
            REVERSE(SUBSTRING(REVERSE(FileName), CHARINDEX(N'\', REVERSE(FileName)), 255)) + N'system_health*.xel' AS FileNamePattern
        FROM CurrentSystemHealthTraceFile
        )
      --get xml_deadlock_report events from all system_health trace files
    , DeadLockReports AS (
        SELECT CAST(event_data AS xml) AS event_data
        FROM BaseSystemHealthFileName
        CROSS APPLY sys.fn_xe_file_target_read_file ( FileNamePattern, NULL, NULL, NULL) AS xed
        WHERE xed.object_name like 'xml_deadlock_report'
    )
--display 10 most recent deadlocks
SELECT TOP 10
      DATEADD(hour, DATEDIFF(hour, SYSUTCDATETIME(), SYSDATETIME()), event_data.value('(/event/@timestamp)[1]', 'datetime2')) AS LocalTime
    , event_data AS DeadlockReport
FROM DeadLockReports
ORDER BY LocalTime ASC;