Configurare eventi estesi per i gruppi di disponibilità

Si applica a: SQL Server

SQL Server definisce eventi estesi specifici per i gruppi di disponibilità. È possibile monitorare questi eventi estesi all'interno di una sessione per facilitare la diagnosi della causa principale durante le attività di risoluzione dei problemi che interessano un gruppo di disponibilità. Per visualizzare gli eventi estesi di un gruppo di disponibilità è possibile usare la seguente query:

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

Sessione alwayson_health

La sessione di eventi estesi alwayson_health viene creata automaticamente quando si crea il gruppo di disponibilità e acquisisce un subset degli eventi correlati al gruppo di disponibilità. Questa sessione è preconfigurata e rappresenta uno strumento semplice e rapido per consentire di iniziare rapidamente la risoluzione dei problemi di un gruppo di disponibilità. La Creazione guidata Gruppo di disponibilità avvia automaticamente la sessione in ogni replica di disponibilità partecipante configurata nella procedura guidata.

Importante

Se il gruppo di disponibilità non è stato creato tramite Creazione guidata Gruppo di disponibilità, la sessione alwayson_health non può essere avviata automaticamente. Se non è avviata, la sessione non può acquisire dati sugli eventi quando si verifica un problema imprevisto. Avviare la sessione manualmente e configurarla per l'avvio automatico configurando le proprietà della sessione.

Per visualizzare la definizione della sessione alwayson_health:

  1. In Esplora oggetti espandere Gestione, Eventi estesi, quindi Sessioni.

  2. Fare clic con il pulsante destro su Alwayson_health, scegliere Crea script per sessione, scegliere CREATE in e quindi selezionare Nuova finestra editor di query.

Eventi estesi per il debug

Oltre agli eventi estesi coperti dalla sessione Alwayson_health, SQL Server consente di definire un set completo di eventi di debug per i gruppi di disponibilità. Per sfruttare questi altri eventi estesi in una sessione, seguire le procedure seguenti:

  1. In Esplora oggetti espandere Gestione, Eventi estesi, quindi Sessioni.

  2. Fare clic con il pulsante destro del mouse su Sessioni e selezionare Nuova sessione. Oppure, fare clic con il pulsante destro su Alwayson_health e selezionare Proprietà.

  3. Nel riquadro Seleziona una pagina, selezionare Eventi.

  4. Nella libreria di eventi, colonna Categoria, selezionare alwayson e deselezionare tutte le altre categorie.

  5. Nella colonna Canale selezionare Debug. Tutti gli eventi correlati al gruppo di disponibilità che non sono già selezionati sono ora visibili nella libreria di eventi.

  6. Evidenziare un evento nella libreria di eventi e fare clic sul pulsante > per selezionarlo per la sessione.

  7. Al termine della sessione, fare clic su OK per chiuderla. Assicurarsi che la sessione sia avviata in modo che acquisisca gli eventi selezionati.

availability_replica_state_change

Si verifica quando lo stato di una replica di disponibilità viene modificato. La creazione di un gruppo di disponibilità o l'aggiunta di una replica di disponibilità può attivare questo evento. È utile per la diagnostica dei failover automatici non riusciti. Può anche essere utilizzato per tracciare i passaggi del failover.

Informazioni sull'evento

Colonna Descrizione
Name availability_replica_state_change
Categoria always on
Channel Operativo

Campi dell'evento

Nome Type_name Descrizione
availability_group_id guid ID del gruppo di disponibilità.
availability_group_name unicode_string Nome del gruppo di disponibilità.
availability_replica_id guid ID della replica di disponibilità.
previous_state availability_replica_state Ruolo della replica prima della modifica.

I valori possibili sono:

Primary_Normal

Secondary_Normal

Resolving_Pending_Failover

Resolving_Normal

Primary_Pending

Not_Available
current_state availability_replica_state Ruolo della replica dopo la modifica.

I valori possibili sono:

Primary_Normal

Secondary_Normal

Resolving_Pending_Failover

Resolving_Normal

Primary_Pending

Not_Available

Definizione della sessione 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

Si verifica quando il gruppo di disponibilità e il cluster hanno un problema di connettività e il lease è scaduto. L'evento indica che la connettività tra il gruppo di disponibilità e il cluster WSFC sottostante è interrotta. Se il problema di connettività si verifica nella replica primaria, l'evento potrebbe causare un failover automatico o portare offline il gruppo di disponibilità.

Informazioni sull'evento

Colonna Descrizione
Name availability_group_lease_expired
Categoria always on
Channel Operativo

Campi dell'evento

Nome Type_name Descrizione
availability_group_id guid ID del gruppo di disponibilità.
availability_group_name unicode_string Nome del gruppo di disponibilità.

Definizione della sessione 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

Si verifica alla convalida di failover della conformità della replica primaria e indica se la replica di disponibilità di destinazione è pronta per diventare la nuova replica primaria. Ad esempio, la convalida di failover restituisce il valore false quando non tutti i database sono sincronizzati o uniti. Questo evento è progettato per rappresentare un punto di errore durante i failover. Le informazioni sono di particolare interesse per l'amministratore del database specialmente per i failover automatici perché si tratta di operazioni automatiche. L'amministratore del database può esaminare l'evento per vedere perché un failover automatico ha causato un errore.

Informazioni sull'evento

Nome Descrizione
availability_replica_automatic _failover_validation
Categoria always on
Channel Analitiche

Campi dell'evento

Nome Type_name Descrizione
availability_group_id guid ID del gruppo di disponibilità.
availability_group_name unicode_string Nome del gruppo di disponibilità.
availability_replica_id guid ID della replica di disponibilità.
forced_quorum validation_result_type Se ha valore TRUE, il failover automatico viene invalidato per la replica di disponibilità.

TRUE

FALSE
joined_and_synchronized validation_result_type Se ha valore FALSE, il failover automatico viene invalidato per la replica di disponibilità.

TRUE

FALSE
previous_primary_or_automatic_failover_target validation_result_type Se ha valore FALSE, il failover automatico viene invalidato per la replica di disponibilità.

TRUE

FALSE

Definizione della sessione 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 (vari numeri di errore): per i problemi di connessione o di trasporto

Ogni evento filtrato indica che si è verificato un problema di connettività nell'endpoint di mirroring del database o di trasporto da cui dipende il gruppo di disponibilità.

Colonna Descrizione
Name error_reported

numeri da usare come filtro: 35201, 35202, 35206, 35204, 35207, 35217, 9642, 9666, 9691, 9692, 9693, 28034, 28036, 28080, 28091, 33309
Categoria errori
Channel Amministratore

Numeri di errore da usare come filtro

Numero di errore Descrizione
35201 Si è verificato un timeout della connessione durante il tentativo di stabilire una connessione alla replica di disponibilità '%ls'.
35202 La connessione per il gruppo di disponibilità '%ls' dalla replica di disponibilità '%ls' con ID [%ls] a '%ls' con ID [%ls] è stata stabilita correttamente. Questo è un messaggio informativo. Non è richiesta alcuna azione da parte dell'utente.
35206 Timeout di una connessione stabilita in precedenza con la replica di disponibilità '%ls'.
35204 La connessione tra l'istanza '%ls' e '%ls' è stata disabilitata a causa dell'arresto dell'endpoint.
Timeout + connessione
35207 Impossibile stabilire la connessione sull'ID del gruppo di disponibilità '%ls' dall'ID replica '%ls' all'ID replica '%ls' a causa dell'errore %d, gravità %d, stato %d. gravità %d, stato %d. (Potrebbe impedire un utilizzo appropriato di DBA. In tal caso controllare e rimuovere in seguito)
35217 (A partire da SQL Server 2019 CU15 (15.0.4198.2)) Il pool di thread per Gruppi di disponibilità Always On non è riuscito ad avviare un nuovo thread di lavoro perché il numero di thread di lavoro disponibili non è sufficiente. Questo può comportare una riduzione delle prestazioni di Gruppi di disponibilità Always On. Usare l'opzione di configurazione "max worker thread" per aumentare il numero di thread consentiti.
9642 Errore in un endpoint della connessione del trasporto Service Broker/mirroring del database. Errore %i. Stato %i. (Ruolo endpoint vicino: %S_MSG. Indirizzo endpoint distante: '%.*hs') Errore: %i. Stato: %i. Ruolo endpoint vicino: %S_MSG. Indirizzo endpoint distante: '%.*hs'.
9666 L'endpoint %S_MSG si trova nello stato disabilitato o arrestato.
9691 L'endpoint %S_MSG non è più in attesa delle connessioni.
9692 L'endpoint %S_MSG non può restare in attesa sulla porta %d perché è utilizzato da un altro processo.
9693 L'endpoint %S_MSG non può restare in attesa di connessioni a causa dell'errore seguente: '%.*ls'.
28034 Handshake connessione non riuscito. L'account di accesso '%.*ls' non dispone dell'autorizzazione CONNECT per l'endpoint. Stato %d.
28036 Handshake connessione non riuscito. Impossibile trovare il certificato utilizzato da questo endpoint: %S_MSG. Eseguire DBCC CHECKDB nel database master per verificare l'integrità dei metadati negli endpoint. Stato %d.
28080 Handshake connessione non riuscito. Endpoint %S_MSG non configurato. Stato %d.
28091 Avvio endpoint per %S_MSG senza autenticazione non supportato.
33309 Non è possibile avviare l'endpoint del cluster. La configurazione predefinita dell'endpoint %S_MSG non è stata ancora caricata.

Definizione della sessione 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

Si verifica quando lo spostamento nel database di una replica di database viene sospeso o ripreso.

Informazioni sull'evento

Colonna Descrizione
Name data_movement_suspend_resume
Categoria Sempre attivo
Channel Operativo

Campi dell'evento

Nome Type_name Descrizione
availability_group_id guid ID del gruppo di disponibilità.
availability_group_name unicode_string Nome del gruppo di disponibilità, se disponibile.
availability_replica_id guid ID della replica di disponibilità.
database_replica_id guid ID del database di disponibilità.
database_replica_name unicode_string Nome del database di disponibilità.
database_id uint32 ID del database di disponibilità.
suspend_status suspend_status_type Valori dello stato di sospensione.

SUSPEND_NULL

RESUMED

SOSPESO

SUSPENDED_INVALID
suspend_source suspend_source_type Origine dell'azione di sospensione o ripresa.
suspend_reason unicode_string Ragione sospensione acquisita nella gestione delle repliche di database.

Definizione della sessione 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

Si verifica quando viene eseguita un'istruzione DDL del gruppo di disponibilità che include CREATE, ALTER o DROP. Lo scopo principale dell'evento è indicare un problema relativo a un'azione utente su una replica di disponibilità o di indicare il punto iniziale di un'azione operativa, seguita da un problema di runtime, ad esempio failover manuale, failover forzato, spostamento dei dati sospeso o spostamento dei dati ripreso.

Informazioni sull'evento

Colonna Descrizione
Name alwayson_ddl_execution
Categoria always on
Channel Analitiche

Campi dell'evento

Nome Type_name Descrizione
availability_group_id GUID ID del gruppo di disponibilità.
availability_group_name unicode_string Nome del gruppo di disponibilità.
ddl_action alwayson_ddl_action Indica il tipo di azione DDL: CREATE, ALTER o DROP.
ddl_phase ddl_opcode Indica la fase dell'operazione DDL: BEGIN, COMMIT o ROLLBACK.
Istruzione unicode_string Testo dell'istruzione eseguita.

Definizione della sessione 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

Si verifica alla modifica dello stato di gestione repliche di disponibilità. Questo evento indica l'heartbeat della gestione repliche di disponibilità. Quando la gestione repliche di disponibilità non ha uno stato integro, tutte le repliche di disponibilità nell'istanza di SQL Server non saranno attive.

Informazioni sull'evento

Colonna Descrizione
Name availability_replica_manager_state_change
Categoria always on
Channel Operativo

Campi dell'evento

Nome Type_name Descrizione
current_state manager_state Stato corrente di gestione repliche di disponibilità.

Online

Fuori rete

WaitingForClusterCommunication

Definizione della sessione 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): modifica del ruolo di replica di database

Questo evento error_reported filtrato avviene in modo asincrono dopo la modifica di un ruolo di replica di disponibilità. Indica in quali database di disponibilità non avviene la modifica del ruolo previsto durante il processo di failover.

Informazioni sull'evento

Colonna Descrizione
Name error_reported

Numero di errore 1480: è in corso la modifica nel database REPLICATION_TYPE_MSG "DATABASE_NAME" dei ruoli da "OLD_ROLE" a "NEW_ROLE" a causa di REASON_MSG
Categoria errori
Channel Amministratore

Definizione della sessione 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

Acquisisce dati diagnostici e informazioni di integrità su SQL Server per rilevare potenziali errori. La procedura viene eseguita in modalità di ripetizione e i risultati vengono inviati periodicamente. Questa sessione di eventi estesa è disponibile a partire da SQL Server 2019 CU15 (15.0.4198.2).

Informazioni sull'evento

Nome Descrizione
Name sp_server_diagnostics_component_result
Categoria Server
Channel Debug

Campi dell'evento

Nome Type_name Descrizione
component UInt8 nome del componente.
state UInt8 Indica lo stato di integrità del componente.
data XML Campo XML contenente informazioni supplementari relative al componente.

Definizione della sessione 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

Esegue il dump dei log correlati alla connettività o alla rete tra repliche primarie e secondarie. Questa sessione di eventi estesa è disponibile a partire da SQL Server 2019 CU15 (15.0.4198.2).

Informazioni sull'evento

Nome Descrizione
Name ucs_connection_setup
Categoria Trasporto
Channel Debug

Campi dell'evento

Nome Type_name Descrizione
setup_event Int32 Evento di impostazione della connessione
obj_address Puntatore Indirizzo del punto finale della connessione
endpoint_type Int32 Tipo di endpoint
stream_status Int32 Stato del flusso della connessione
error_number UInt32 Codice errore della connessione
connection_id GUID ID connessione
error_message UnicodeString Messaggio di errore della connessione
address UnicodeString Indirizzo di destinazione della connessione
circuit_id UnicodeString ID circuito della connessione

Definizione della sessione 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

Reindirizza l'output di alcuni comandi DBCC e informazioni di log HADR alla sessione evento estesa (simile al flag di traccia 3605). Questa sessione di eventi estesa è disponibile a partire da SQL Server 2019 CU15 (15.0.4198.2).

Informazioni sull'evento

Nome Descrizione
Name hadr_trace_message
Categoria Sempre attivo
Channel Debug

Campi dell'evento

Nome Type_name Descrizione
hadr_message unicode_string Reindirizza l'output di alcuni comandi DBCC e informazioni di log HADR alla sessione evento estesa (simile al flag di traccia 3605).

Definizione della sessione 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

Passaggi successivi