Configurer les événements étendus pour les groupes de disponibilité

S'applique à : SQL Server

SQL Server définit des événements étendus qui sont spécifiques aux groupes de disponibilité. Vous pouvez superviser ces événements étendus dans une session pour mieux diagnostiquer la cause racine d’un problème lié à un groupe de disponibilité. Vous pouvez afficher les événements étendus des groupes de disponibilité à l’aide de la requête suivante :

SELECT * FROM sys.dm_xe_objects WHERE name LIKE '%hadr%';

Session alwayson_health

La session d’événements étendus alwayson_health est créée automatiquement quand vous créez le groupe de disponibilité. Elle capture un sous-ensemble des événements connexes d’un groupe de disponibilité. Cette session préconfigurée constitue un outil à la fois utile et pratique pour démarrer rapidement la résolution des problèmes d’un groupe de disponibilité. L’Assistant Création d’un groupe de disponibilité démarre automatiquement la session sur chaque réplica de disponibilité participant configuré dans l’Assistant.

Important

Si vous n’avez pas créé le groupe de disponibilité à l’aide de l’Assistant Nouveau groupe de disponibilité, la session alwayson_health peut ne pas démarrer automatiquement. Si elle n’est pas démarrée, la session ne peut pas capturer les données d’événement en cas de problème inattendu. Vous devez démarrer manuellement la session et configurer ses propriétés de manière à ce qu’elle démarre automatiquement.

Pour afficher la définition de la session alwayson_health :

  1. Dans l’Explorateur d’objets, développez Gestion, Événements étendus, puis Sessions.

  2. Cliquez avec le bouton droit sur Alwayson_health, pointez sur Générer un script de la session en tant que, sur CREATE To, puis sélectionnez Nouvelle fenêtre Éditeur de requête.

Événements étendus pour le débogage

Outre les événements étendus couverts par la session Alwayson_health, SQL Server définit un ensemble complet d’événements de débogage pour les groupes de disponibilité. Pour exploiter ces événements étendus supplémentaires dans une session, procédez comme suit :

  1. Dans l’Explorateur d’objets, développez Gestion, Événements étendus, puis Sessions.

  2. Cliquez avec le bouton droit sur Sessions et sélectionnez Nouvelle session. Vous pouvez aussi cliquer avec le bouton droit sur Alwayson_health et sélectionner Propriétés.

  3. Dans le volet Sélectionner une page, sélectionnez Événements.

  4. Dans la bibliothèque d’événements, dans la colonne Catégorie, sélectionnez alwayson et désactivez toutes les autres catégories.

  5. Dans la colonne Canal, sélectionnez Debug. Tous les événements connexes du groupe de disponibilité qui ne sont pas déjà sélectionnés s’affichent désormais dans la bibliothèque d’événements.

  6. Mettez un événement en surbrillance dans la bibliothèque d’événements, puis sélectionnez le bouton > pour le sélectionner pour la session.

  7. Quand la session est terminée, sélectionnez OK pour la fermer. Vérifiez que la session est démarrée pour qu’elle puisse capturer les événements sélectionnés.

availability_replica_state_change

Se produit en cas de changement de l’état d’un réplica de disponibilité. La création d’un groupe de disponibilité ou la participation à un réplica de disponibilité peut déclencher cet événement. Il est utile pour diagnostiquer les échecs de basculement automatique. Il peut également être utilisé pour suivre les étapes de basculement.

Informations sur l’événement

Colonne Description
Nom availability_replica_state_change
Category always on
Channel En fonctionnement

Champs de l’événement

Nom Type_name Description
availability_group_id guid ID du groupe de disponibilité.
availability_group_name unicode_string Nom du groupe de disponibilité.
availability_replica_id guid ID du réplica de disponibilité.
previous_state availability_replica_state Rôle du réplica avant le changement.

Les valeurs possibles sont les suivantes :

Primary_Normal

Secondary_Normal

Resolving_Pending_Failover

Resolving_Normal

Primary_Pending

Not_Available
current_state availability_replica_state Rôle du réplica après le changement.

Les valeurs possibles sont les suivantes :

Primary_Normal

Secondary_Normal

Resolving_Pending_Failover

Resolving_Normal

Primary_Pending

Not_Available

Définition de la session alwayson_health

CREATE EVENT SESSION [alwayson_health] ON SERVER
ADD EVENT availability_replica_state_change
ADD TARGET package0.event_file (
    SET filename = N'alwayson_health.xel',
    max_file_size = (5),
    max_rollover_files = (4),
    metadatafile = N'alwayson_health.xem'
    )
    WITH (
            MAX_MEMORY = 4096 KB,
            EVENT_RETENTION_MODE = ALLOW_SINGLE_EVENT_LOSS,
            MAX_DISPATCH_LATENCY = 30 SECONDS,
            MAX_EVENT_SIZE = 0 KB,
            MEMORY_PARTITION_MODE = NONE,
            TRACK_CAUSALITY = OFF,
            STARTUP_STATE = ON
            )
GO

availability_group_lease_expired

Se produit après l’expiration du bail en cas de problème de connectivité entre le cluster et le groupe de disponibilité. Cet événement indique que la connectivité entre le groupe de disponibilité et le cluster WSFC sous-jacent est rompue. Si le problème de connectivité se produit sur le réplica principal, l’événement peut entraîner un basculement automatique ou provoquer la mise hors connexion du groupe de disponibilité.

Informations sur l’événement

Colonne Description
Nom availability_group_lease_expired
Category always on
Channel En fonctionnement

Champs de l’événement

Nom Type_name Description
availability_group_id guid ID du groupe de disponibilité.
availability_group_name unicode_string Nom du groupe de disponibilité.

Définition de la session alwayson_health

CREATE EVENT SESSION [alwayson_health] ON SERVER
ADD EVENT availability_group_lease_expired
ADD TARGET package0.event_file (
    SET filename = N'alwayson_health.xel',
    max_file_size = (5),
    max_rollover_files = (4),
    metadatafile = N'alwayson_health.xem'
    )
    WITH (
            MAX_MEMORY = 4096 KB,
            EVENT_RETENTION_MODE = ALLOW_SINGLE_EVENT_LOSS,
            MAX_DISPATCH_LATENCY = 30 SECONDS,
            MAX_EVENT_SIZE = 0 KB,
            MEMORY_PARTITION_MODE = NONE,
            TRACK_CAUSALITY = OFF,
            STARTUP_STATE = ON
            )
GO

availability_replica_automatic_failover_validation

Se produit quand le basculement automatique valide l’état de préparation d’un réplica de disponibilité comme réplica principal, et indique si le réplica de disponibilité cible est prêt à devenir le nouveau réplica principal. Par exemple, la validation du basculement retourne false quand les bases de données ne sont pas toutes synchronisées ou jointes. Cet événement est conçu pour fournir un point de défaillance pendant les basculements. Ces informations sont intéressantes pour l’administrateur de base de données, en particulier au niveau des basculements automatiques, ceux-ci constituant une opération sans assistance. L’administrateur de base de données peut passer en revue l’événement pour déterminer la raison de l’échec d’un basculement automatique.

Informations sur l’événement

Nom Description
availability_replica_automatic _failover_validation
Category always on
Channel Analytiques

Champs de l’événement

Nom Type_name Description
availability_group_id guid ID du groupe de disponibilité.
availability_group_name unicode_string Nom du groupe de disponibilité.
availability_replica_id guid ID du réplica de disponibilité.
forced_quorum validation_result_type Si la valeur est TRUE, le basculement automatique est invalidé sur ce réplica de disponibilité.

VRAI

FAUX
joined_and_synchronized validation_result_type Si la valeur est FALSE, le basculement automatique est invalidé sur ce réplica de disponibilité.

VRAI

FAUX
previous_primary_or_automatic_failover_target validation_result_type Si la valeur est FALSE, le basculement automatique est invalidé sur ce réplica de disponibilité.

VRAI

FAUX

Définition de la session alwayson_health

CREATE EVENT SESSION [alwayson_health] ON SERVER
ADD EVENT availability_replica_automatic_failover_validation (
    WHERE (
        [forced_quorum] = (TRUE)
        OR [joined_and_synchronized] = (FALSE)
        OR [previous_primary_or_automatic_failover_target] = (TRUE)
        )
    ) ADD TARGET package0.event_file (
    SET filename = N'alwayson_health.xel',
    max_file_size = (5),
    max_rollover_files = (4),
    metadatafile = N'alwayson_health.xem'
    )
    WITH (
            MAX_MEMORY = 4096 KB,
            EVENT_RETENTION_MODE = ALLOW_SINGLE_EVENT_LOSS,
            MAX_DISPATCH_LATENCY = 30 SECONDS,
            MAX_EVENT_SIZE = 0 KB,
            MEMORY_PARTITION_MODE = NONE,
            TRACK_CAUSALITY = OFF,
            STARTUP_STATE = ON
            )
GO

error_reported (plusieurs numéros d’erreur) : pour les problèmes de connexion ou de transport

Chaque événement filtré indique qu’un problème de connectivité s’est produit dans le transport ou le point de terminaison de mise en miroir de bases de données dont dépend ce groupe de disponibilité.

Colonne Description
Nom error_reported

numéros à filter : 35201, 35202, 35206, 35204, 35207, 35217, 9642, 9666, 9691, 9692, 9693, 28034, 28036, 28080, 28091, 33309
Category erreurs
Channel Admin

Numéros d’erreur à filtrer

Numéro d’erreur Description
35201 Le délai imparti pour l’établissement de la connexion au réplica de disponibilité « %ls » a été dépassé.
35202 Une connexion a été établie pour le groupe de disponibilité « %ls » du réplica de disponibilité « %ls » avec l’ID [%ls] à « %ls » avec l’ID [%ls]. Ce message est fourni uniquement à titre d'information. Aucune action de l'utilisateur n'est requise.
35206 Un délai de connexion s’est produit sur une connexion préalablement établie au réplica de disponibilité « %ls ».
35204 La connexion entre l’instance « %ls » et « %ls » a été désactivée en raison de l’arrêt du point de terminaison.
Délai d’expiration dépassé + connexion
35207 Échec de la tentative de connexion pour l’ID de groupe de disponibilité « %ls » de l’ID de réplica « %ls » à l’ID de réplica « %ls » en raison de l’erreur %d. Gravité : %d, état : %d. Gravité : %d, état : %d. (peut ne pas avoir une bonne utilisation pour DBA. Vérifiez et supprimez plus tard dans ce cas)
35217 (À compter de SQL Server 2019 CU15 (15.0.4198.2)) Le pool de threads pour les groupes de disponibilité Always On n’a pas pu démarrer un nouveau thread de travail, car il n’y a pas assez de threads de travail disponibles. Cela peut nuire aux performances des groupes de disponibilité Always On. Utilisez l’option de configuration « max worker threads » pour augmenter le nombre de threads autorisés.
9642 Une erreur s’est produite dans un point de terminaison de la connexion de transport Service Broker/Mise en miroir de bases de données. Erreur : %i, état : %i. (Rôle de point de terminaison à proximité : %S_MSG, adresse du point de terminaison lointain : « %.*hs »). Erreur : %i, état : %i. (Rôle de point de terminaison à proximité : %S_MSG, adresse du point de terminaison lointain : « %.*hs »)
9666 Le point de terminaison %S_MSG est désactivé ou arrêté.
9691 Le point de terminaison %S_MSG a cessé d’écouter les connexions.
9692 Le point de terminaison %S_MSG ne peut pas écouter le port %d, car il est utilisé par un autre processus.
9693 Le point de terminaison %S_MSG ne peut pas écouter les connexions en raison de l’erreur suivante : « %.*ls ».
28034 Échec de la négociation de connexion. L'utilisateur '%.*ls' ne dispose pas de l'autorisation CONNECT au point de terminaison. État %d.
28036 Échec de la négociation de connexion. Le certificat utilisé par ce point de terminaison est introuvable : %S_MSG. Utilisez DBCC CHECKDB dans la base de données master pour vérifier l’intégrité des métadonnées des points de terminaison. État %d.
28080 Échec de la négociation de connexion. Le point de terminaison %S_MSG n'est pas configuré. État %d.
28091 Le démarrage du point de terminaison pour %S_MSG sans authentification n’est pas pris en charge.
33309 Impossible de démarrer le point de terminaison de cluster, car la configuration du point de terminaison %S_MSG par défaut n’a pas encore été chargée.

Définition de la session alwayson_health

CREATE EVENT SESSION [alwayson_health] ON SERVER
ADD EVENT sqlserver.error_reported (
    WHERE (
        --Connectivity Error Messages
        [error_number] = (35201)
        OR [error_number] = (35202)
        OR [error_number] = (35204)
        OR [error_number] = (35206)
        OR [error_number] = (35207)
        OR [error_number] = (35217)
        OR [error_number] = (9642)
        --OR [error_number]=(9666)
        OR [error_number] = (9691)
        OR [error_number] = (9692)
        OR [error_number] = (9693)
        OR [error_number] = (28034)
        OR [error_number] = (28036)
        OR [error_number] = (28080)
        OR [error_number] = (28091)
        OR [error_number] = (33309)
        )
    ) ADD TARGET package0.event_file (
    SET filename = N'alwayson_health.xel',
    max_file_size = (5),
    max_rollover_files = (4),
    metadatafile = N'alwayson_health.xem'
    )
    WITH (
            MAX_MEMORY = 4096 KB,
            EVENT_RETENTION_MODE = ALLOW_SINGLE_EVENT_LOSS,
            MAX_DISPATCH_LATENCY = 30 SECONDS,
            MAX_EVENT_SIZE = 0 KB,
            MEMORY_PARTITION_MODE = NONE,
            TRACK_CAUSALITY = OFF,
            STARTUP_STATE = ON
            )
GO

data_movement_suspend_resume

Se produit quand le déplacement de base de données d’un réplica de base de données est suspendu ou repris.

Informations sur l’événement

Colonne Description
Nom data_movement_suspend_resume
Category Always on
Channel En fonctionnement

Champs de l’événement

Nom Type_name Description
availability_group_id guid ID du groupe de disponibilité.
availability_group_name unicode_string Nom du groupe de disponibilité (le cas échéant).
availability_replica_id guid ID du réplica de disponibilité.
database_replica_id guid ID de la base de données de disponibilité.
database_replica_name unicode_string Nom de la base de données de disponibilité.
database_id uint32 ID de la base de données de disponibilité.
suspend_status suspend_status_type Valeurs d’état de suspension.

SUSPEND_NULL

RESUMED

SUSPENDED

SUSPENDED_INVALID
suspend_source suspend_source_type Source de l’action de suspension ou de reprise.
suspend_reason unicode_string Raison de la suspension capturée dans le gestionnaire de réplicas de base de données.

Définition de la session alwayson_health

CREATE EVENT SESSION [alwayson_health] ON SERVER
ADD EVENT data_movement_suspend_resume (
    WHERE (
        [suspend_status] = (SUSPENDED)
        OR [suspend_status] = (SUSPENDED_INVALID)
        OR [suspend_status] = (SUSPEND_NULL)
        )
    ) ADD TARGET package0.event_file (
    SET filename = N'alwayson_health.xel',
    max_file_size = (5),
    max_rollover_files = (4),
    metadatafile = N'alwayson_health.xem'
    )
    WITH (
            MAX_MEMORY = 4096 KB,
            EVENT_RETENTION_MODE = ALLOW_SINGLE_EVENT_LOSS,
            MAX_DISPATCH_LATENCY = 30 SECONDS,
            MAX_EVENT_SIZE = 0 KB,
            MEMORY_PARTITION_MODE = NONE,
            TRACK_CAUSALITY = OFF,
            STARTUP_STATE = ON
            )
GO

alwayson_ddl_executed

Se produit quand une instruction DDL (Data Definition Language) de groupe de disponibilité est en cours d’exécution, notamment CREATE, ALTER ou DROP. L’objectif principal de l’événement est d’indiquer un problème avec une action de l’utilisateur sur un réplica de disponibilité ou d’indiquer le point de départ d’une action opérationnelle, celle-ci étant suivie d’un problème de runtime (basculement manuel, basculement forcé, déplacement de données suspendu, déplacement de données repris, etc.).

Informations sur l’événement

Colonne Description
Nom alwayson_ddl_execution
Category always on
Channel Analytiques

Champs de l’événement

Nom Type_name Description
availability_group_id Guid ID du groupe de disponibilité.
availability_group_name unicode_string Nom du groupe de disponibilité.
ddl_action alwayson_ddl_action Indique le type d’action DDL : CREATE, ALTER ou DROP.
ddl_phase ddl_opcode Indique la phase de l’opération DDL : BEGIN, COMMIT ou ROLLBACK.
. unicode_string Texte de l’instruction exécutée.

Définition de la session alwayson_health

CREATE EVENT SESSION [alwayson_health] ON SERVER
ADD EVENT alwayson_ddl_executed
ADD TARGET package0.event_file (
    SET filename = N'alwayson_health.xel',
    max_file_size = (5),
    max_rollover_files = (4),
    metadatafile = N'alwayson_health.xem'
    )
    WITH (
            MAX_MEMORY = 4096 KB,
            EVENT_RETENTION_MODE = ALLOW_SINGLE_EVENT_LOSS,
            MAX_DISPATCH_LATENCY = 30 SECONDS,
            MAX_EVENT_SIZE = 0 KB,
            MEMORY_PARTITION_MODE = NONE,
            TRACK_CAUSALITY = OFF,
            STARTUP_STATE = ON
            )
GO

availability_replica_manager_state

Se produit en cas de changement de l’état du gestionnaire de réplicas de disponibilité. Cet événement indique la pulsation du gestionnaire de réplicas de disponibilité. Quand le gestionnaire de réplicas de disponibilité n’est pas dans un état sain, tous les réplicas de disponibilité dans l’instance SQL Server sont hors service.

Informations sur l’événement

Colonne Description
Nom availability_replica_manager_state_change
Category always on
Channel En fonctionnement

Champs de l’événement

Nom Type_name Description
current_state manager_state État actuel du gestionnaire de réplicas de disponibilité.

En ligne

Hors connexion

WaitingForClusterCommunication

Définition de la session alwayson_health

CREATE EVENT SESSION [alwayson_health] ON SERVER
ADD EVENT availability_replica_manager_state (WHERE ([current_state] = (OFFLINE)))
ADD TARGET package0.event_file (
    SET filename = N'alwayson_health.xel',
    max_file_size = (5),
    max_rollover_files = (4),
    metadatafile = N'alwayson_health.xem'
    )
    WITH (
            MAX_MEMORY = 4096 KB,
            EVENT_RETENTION_MODE = ALLOW_SINGLE_EVENT_LOSS,
            MAX_DISPATCH_LATENCY = 30 SECONDS,
            MAX_EVENT_SIZE = 0 KB,
            MEMORY_PARTITION_MODE = NONE,
            TRACK_CAUSALITY = OFF,
            STARTUP_STATE = ON
            )
GO

error_reported (1480) : changement du rôle de réplica de base de données

Cet événement error_reported filtré se produit de façon asynchrone après un changement de rôle de réplica de disponibilité. Il indique la base de données de disponibilité qui ne parvient pas à changer son rôle attendu durant le processus de basculement.

Informations sur l’événement

Colonne Description
Nom error_reported

Numéro d’erreur 1480 : La base de données REPLICATION_TYPE_MSG « DATABASE_NAME » change les rôles de « OLD_ROLE » en « NEW_ROLE » en raison de REASON_MSG
Category erreurs
Channel Admin

Définition de la session alwayson_health

CREATE EVENT SESSION [alwayson_health] ON SERVER
ADD EVENT sqlserver.error_reported (
    WHERE (
        --database replica role change message
        OR [error_number] = (1480)
        --database replica runtime error messages
        OR [error_number] = (823)
        OR [error_number] = (824)
        OR [error_number] = (829)
        )
    ) ADD TARGET package0.event_file (
    SET filename = N'alwayson_health.xel',
    max_file_size = (5),
    max_rollover_files = (4),
    metadatafile = N'alwayson_health.xem'
    )
    WITH (
            MAX_MEMORY = 4096 KB,
            EVENT_RETENTION_MODE = ALLOW_SINGLE_EVENT_LOSS,
            MAX_DISPATCH_LATENCY = 30 SECONDS,
            MAX_EVENT_SIZE = 0 KB,
            MEMORY_PARTITION_MODE = NONE,
            TRACK_CAUSALITY = OFF,
            STARTUP_STATE = ON
            )
GO

sqlserver.sp_server_diagnostics_component_result

Capture des données de diagnostics et des informations d’intégrité sur SQL Server pour détecter des défaillances potentielles. La procédure fonctionne en mode de répétition et envoie régulièrement des résultats. Cette session d’événements étendus est disponible à compter de SQL Server 2019 CU15 (15.0.4198.2).

Informations sur l’événement

Nom Description
Nom sp_server_diagnostics_component_result
Category Serveur
Canal Débogage

Champs de l’événement

Nom Type_name Description
component UInt8 nom du composant.
state UInt8 Indique l’état d’intégrité du composant.
data XML Champ XML contenant des informations supplémentaires sur le composant.

Définition de la session alwayson_health

CREATE EVENT SESSION [alwayson_health] ON SERVER
ADD EVENT sqlserver.sp_server_diagnostics_component_result (SET collect_data = (1) WHERE ([state] = (3)))
ADD TARGET package0.event_file (
    SET filename = N'alwayson_health.xel',
    max_file_size = (5),
    max_rollover_files = (4),
    metadatafile = N'alwayson_health.xem'
    )
    WITH (
            MAX_MEMORY = 4096 KB,
            EVENT_RETENTION_MODE = ALLOW_SINGLE_EVENT_LOSS,
            MAX_DISPATCH_LATENCY = 30 SECONDS,
            MAX_EVENT_SIZE = 0 KB,
            MEMORY_PARTITION_MODE = NONE,
            TRACK_CAUSALITY = OFF,
            STARTUP_STATE = ON
            )
GO

ucs.ucs_connection_setup

Vide les journaux liés à la connectivité ou au réseau entre les réplicas primaires et secondaires. Cette session d’événements étendus est disponible à compter de SQL Server 2019 CU15 (15.0.4198.2).

Informations sur l’événement

Nom Description
Nom ucs_connection_setup
Category Transport
Canal Débogage

Champs de l’événement

Nom Type_name Description
setup_event Int32 Événement de configuration de la connexion
obj_address Pointeur Adresse du point de terminaison de la connexion
endpoint_type Int32 Type de point de terminaison
stream_status Int32 État du flux de la connexion
error_number UInt32 Code d’erreur de la connexion
connection_id GUID ID de la connexion
error_message UnicodeString Message d’erreur de la connexion
address UnicodeString Adresse cible de la connexion
circuit_id UnicodeString ID de circuit de la connexion

Définition de la session alwayson_health

CREATE EVENT SESSION [alwayson_health] ON SERVER
ADD EVENT ucs.ucs_connection_setup
ADD TARGET package0.event_file (
    SET filename = N'alwayson_health.xel',
    max_file_size = (5),
    max_rollover_files = (4),
    metadatafile = N'alwayson_health.xem'
    )
    WITH (
            MAX_MEMORY = 4096 KB,
            EVENT_RETENTION_MODE = ALLOW_SINGLE_EVENT_LOSS,
            MAX_DISPATCH_LATENCY = 30 SECONDS,
            MAX_EVENT_SIZE = 0 KB,
            MEMORY_PARTITION_MODE = NONE,
            TRACK_CAUSALITY = OFF,
            STARTUP_STATE = ON
            )
GO

sqlserver.hadr_trace_message

Redirige la sortie de certaines commandes DBCC et des informations de journal HADR vers la session d’événements étendus (semblable à l’indicateur de trace 3605). Cette session d’événements étendus est disponible à compter de SQL Server 2019 CU15 (15.0.4198.2).

Informations sur l’événement

Nom Description
Nom hadr_trace_message
Category Always on
Channel Débogage

Champs de l’événement

Nom Type_name Description
hadr_message unicode_string Redirige la sortie de certaines commandes DBCC et des informations de journal HADR vers la session d’événements étendus (semblable à l’indicateur de trace 3605).

Définition de la session alwayson_health

CREATE EVENT SESSION [alwayson_health] ON SERVER
ADD EVENT sqlserver.hadr_trace_message
ADD TARGET package0.event_file (
    SET filename = N'alwayson_health.xel',
    max_file_size = (5),
    max_rollover_files = (4),
    metadatafile = N'alwayson_health.xem'
    )
    WITH (
            MAX_MEMORY = 4096 KB,
            EVENT_RETENTION_MODE = ALLOW_SINGLE_EVENT_LOSS,
            MAX_DISPATCH_LATENCY = 30 SECONDS,
            MAX_EVENT_SIZE = 0 KB,
            MEMORY_PARTITION_MODE = NONE,
            TRACK_CAUSALITY = OFF,
            STARTUP_STATE = ON
            )
GO

Étapes suivantes