Configurar eventos estendidos para grupos de disponibilidade

Aplica-se:SQL Server

O SQL Server define eventos estendidos que são específicos para grupos de disponibilidade. Monitore esses Eventos Estendidos em uma sessão para ajudar no diagnóstico da causa raiz ao resolver problemas em um grupo de disponibilidade. Use a consulta a seguir para visualizar o grupo de disponibilidade Eventos Estendidos:

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

Sessão Alwayson_health

A alwayson_health sessão de Eventos Estendidos é criada automaticamente quando você cria o grupo de disponibilidade, e captura um subconjunto dos eventos relacionados ao grupo de disponibilidade. Esta sessão é pré-configurada como uma ferramenta útil e conveniente para ajudá-lo a começar rapidamente ao solucionar problemas de um grupo de disponibilidade. O assistente Criar grupo de disponibilidade inicia automaticamente a sessão em cada réplica de disponibilidade participante configurada no assistente.

Importante

Se você não criar o grupo de disponibilidade por meio do Assistente para Novo Grupo de Disponibilidade, a sessão alwayson_health pode não ser iniciada automaticamente. Se a sessão não for iniciada, ela não pode capturar dados de eventos quando ocorre um problema inesperado. Você deverá iniciar a sessão manualmente e configurá-la para iniciar automaticamente por meio das propriedades da sessão.

Para ver a definição da sessão alwayson_health:

  1. No Pesquisador de Objetos, expanda Gerenciamento, Eventos Estendidos e depois Sessões.

  2. Clique com o botão direito do mouse em Alwayson_health, aponte para Sessão de Script como, aponte para CREATE To e selecione Janela do Editor de Nova Consulta.

Eventos estendidos para depuração

Além dos Eventos Estendidos que a sessão Alwayson_health abrange, o SQL Server define um extenso conjunto de eventos de depuração para grupos de disponibilidade. Para usar esses Eventos Estendidos adicionais em uma sessão, siga estes passos:

  1. No Pesquisador de Objetos, expanda Gerenciamento, Eventos Estendidos e depois Sessões.

  2. Clique com o botão direito do mouse em Sessões e selecione Nova Sessão. Ou clique com o botão direito do mouse em Alwayson_health e selecione Propriedades.

  3. No painel Selecionar uma página, selecione Eventos.

  4. Na biblioteca de eventos, na coluna Categoria, selecione alwayson e desmarque todas as outras categorias.

  5. Na coluna Canal, selecione Debug. A biblioteca de eventos agora mostra todos os eventos relacionados a grupos de disponibilidade que ainda não foram selecionados.

  6. Destaque um evento na biblioteca de eventos e então selecione o > botão para selecioná-lo para a sessão.

  7. Quando terminar a sessão, selecione OK para fechá-la. Certifique-se de que a sessão seja iniciada para que capture os eventos que você selecionou.

availability_replica_state_change

Esse evento ocorre quando o estado de uma réplica de disponibilidade muda. A criação de um grupo de disponibilidade ou a junção a uma réplica de disponibilidade pode acionar este evento. É útil para diagnosticar falhas no failover automático e também pode ajudar a rastrear as etapas do failover.

Informações de evento

Coluna Descrição
Nome availability_replica_state_change
Categoria always on
Canal Operacional

Campos de evento

Nome type_name Descrição
availability_group_id guid O identificador do Grupo de Disponibilidade.
availability_group_name unicode_string O nome do Grupo de Disponibilidade.
availability_replica_id guid A ID da Réplica de Disponibilidade.
previous_state availability_replica_state A função da réplica antes da alteração.

Os valores possíveis são:

Primário_Normal

Secundário_Normal

Resolving_Pending_Failover

Resolving_Normal

Primary_Pending

Not_Available
current_state availability_replica_state A função da réplica após a alteração.

Os valores possíveis são:

Primário_Normal

Secundário_Normal

Resolving_Pending_Failover

Resolving_Normal

Primary_Pending

Not_Available

Definição de sessão em 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

Esse evento ocorre quando o cluster e o grupo de disponibilidade têm um problema de conectividade e o contrato de locação expira. Isso indica que a conectividade entre o grupo de disponibilidade e o cluster subjacente do WSFC está quebrada. Se o problema de conectividade ocorrer na réplica primária, o evento pode causar um failover automático ou fazer o grupo de disponibilidade ficar offline.

Informações de evento

Coluna Descrição
Nome availability_group_lease_expired
Categoria Sempre ligado
Canal Operacional

Campos de evento

Nome type_name Descrição
availability_group_id guid A ID do grupo de disponibilidade.
availability_group_name unicode_string O nome do grupo de disponibilidade.

Definição de sessão em 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

Este evento ocorre quando o failover automático valida a prontidão de uma réplica de disponibilidade como réplica primária. Ele mostra se a réplica de disponibilidade alvo está pronta para ser a nova réplica primária. Por exemplo, a validação de failover retorna falso quando nem todos os bancos de dados estão sincronizados ou unidos. Esse evento fornece um ponto de falha durante os failovers. O administrador do banco de dados está especialmente interessado nessas informações para failovers automáticos, pois um failover automático é uma operação não assistida. O administrador de banco de dados pode analisar o evento para ver por que um failover automático falhou.

Informações de evento

Nome Descrição
Nome availability_replica_automatic_failover_validation
Categoria always on
Canal Analítico

Campos de evento

Nome type_name Descrição
availability_group_id guid A ID do grupo de disponibilidade.
availability_group_name unicode_string O nome do grupo de disponibilidade.
availability_replica_id guid A ID da réplica de disponibilidade.
forced_quorum validation_result_type Se o valor for TRUE, o failover automático será invalidado nesta réplica de disponibilidade.

TRUE

FALSE
joined_and_synchronized validation_result_type Se o valor for FALSE, o failover automático será invalidado nesta réplica de disponibilidade.

VERDADEIRO

FALSE
previous_primary_or_automatic_failover_target validation_result_type Se o valor for FALSE, o failover automático será invalidado nesta réplica de disponibilidade.

VERDADEIRO

FALSE

Definição de sessão em 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 (vários números de erro): Para problemas de transporte ou de conexão

Cada evento filtrado indica que um problema de conectividade ocorreu no transporte ou no ponto de extremidade de espelhamento de banco de dados do qual esse grupo de disponibilidade depende.

Coluna Descrição
Nome error_reported

Números para filtrar: 35201, 35202, 35206, 35204, 35207, 35217, 9642, 9666, 9691, 9692, 9693, 28034, 28036, 28080, 28091, 33309
Categoria erros
Canal Administrador

Números de erro a serem filtrados

Número do erro Descrição
9642 Erro em um ponto de extremidade de conexão de transporte do Service Broker/Espelhamento de banco de dados, Erro: %i, Estado: %i. (Função do ponto de extremidade próximo: %S_MSG, endereço do ponto de extremidade distante: '%.*hs')
9666 O endpoint %S_MSG está desabilitado ou parado.
9691 O terminal %S_MSG parou de aceitar conexões.
9692 O endpoint %S_MSG não pode escutar na porta %d porque ela está sendo usada por outro processo.
9693 O ponto de extremidade %S_MSG não pode escutar conexões devido ao seguinte erro: '%.*ls'.
28034 Falha no handshake de conexão. O logon '%.*ls' não dispõe de permissão CONNECT no ponto de extremidade. Estado %d.
28036 Falha no handshake de conexão. O certificado usado por este ponto de extremidade não foi encontrado: %S_MSG. Use o DBCC CHECKDB no banco de dados master para verificar a integridade dos metadados dos endpoints. Estado %d.
28080 Falha no handshake de conexão. O endpoint %S_MSG não está configurado. Estado %d.
28091 Não há suporte para o início do ponto de extremidade para %S_MSG sem autenticação.
33309 Não é possível iniciar o ponto de extremidade do cluster porque a configuração de ponto de extremidade padrão %S_MSG ainda não foi carregada.
35201 Ocorreu um tempo limite de conexão ao tentar estabelecer uma conexão com a réplica de disponibilidade '%ls' com o ID [%ls]. Existe um problema de rede ou firewall, ou o endereço do ponto de extremidade fornecido para a réplica não é o ponto de extremidade de espelhamento do banco de dados da instância do servidor host.
35202 Uma conexão para o grupo de disponibilidade '%ls' da réplica de disponibilidade '%ls' com o ID [%ls] para '%ls' com o ID [%ls] foi estabelecida com sucesso. Essa mensagem é apenas informativa. Não é necessária nenhuma ação do usuário.
35204 A conexão entre as instâncias de servidor '%ls' com id [%ls] e '%ls' com id [%ls] foi desativada porque o endpoint de espelhamento do banco de dados foi desativado ou interrompido. Reinicie o endpoint usando a instrução ALTER ENDPOINT Transact-SQL com STATE = STARTED.
35206 Ocorreu um tempo limite de conexão em uma conexão previamente estabelecida com a réplica de disponibilidade '%ls' com o ID [%ls]. Existe um problema de rede ou firewall, ou a réplica de disponibilidade passou para a função de resolução.
35207 A tentativa de conexão no grupo de disponibilidade com ID '%ls' da réplica com ID '%ls' para a réplica com ID '%ls' falhou devido ao erro %d, gravidade %d, estado %d.

Nota: Este erro pode não ter uma boa utilidade para DBAs. Verifique e, nesse caso, remova mais tarde.
35217 O pool de threads para Grupos de Disponibilidade Always On não conseguiu iniciar uma nova thread de trabalho porque não há threads de trabalho suficientes disponíveis. Isso pode degradar o desempenho dos Grupos de Disponibilidade Always On. Use a opção de configuração "max worker threads" para aumentar o número de threads permitidos.

Aplica-se a: SQL Server 2019 CU 15 e versões posteriores.

Definição de sessão em 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

movimentacao_de_dados_suspender_retomar

Este evento ocorre quando a movimentação de dados de uma réplica de banco de dados é suspensa ou retomada.

Informações de evento

Coluna Descrição
Nome data_movement_suspend_resume
Categoria Sempre
Canal Operacional

Campos de evento

Nome type_name Descrição
availability_group_id guid A ID do grupo de disponibilidade.
availability_group_name unicode_string O nome do grupo de disponibilidade, se disponível.
availability_replica_id guid A ID da réplica de disponibilidade.
database_replica_id guid O ID do banco de dados de disponibilidade.
database_replica_name unicode_string O nome do banco de dados de disponibilidade.
database_id uint32 O ID do banco de dados de disponibilidade.
suspend_status suspend_status_type Os valores de status de suspensão.

SUSPEND_NULL

RESUMED

SUSPENDED

SUSPENDED_INVALID
suspend_source suspend_source_type A origem da ação de suspender ou retomar.
suspend_reason unicode_string O motivo da suspensão capturado no gerenciador de réplica de banco de dados.

Definição de sessão em 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

Esse evento ocorre quando uma instrução de linguagem de definição de dados de grupo de disponibilidade (DDL) começa a ser executada, incluindo CREATE, ALTER, ou DROP. O evento indica principalmente um problema com uma ação do usuário em uma réplica de disponibilidade, ou marca o ponto de partida de uma ação operacional. Essa ação é seguida por um problema de tempo de execução, como um failover manual, um failover forçado, suspensão da movimentação de dados ou retomada da movimentação de dados.

Informações de evento

Coluna Descrição
Nome alwayson_ddl_execution
Categoria always on
Canal Analítico

Campos de evento

Nome type_name Descrição
availability_group_id guid A ID do grupo de disponibilidade.
availability_group_name unicode_string O nome do grupo de disponibilidade.
ddl_action alwayson_ddl_action Indica o tipo de ação DDL: CREATE, ALTER, ou DROP.
ddl_phase ddl_opcode Indica a fase da operação DDL: BEGIN, COMMIT, ou ROLLBACK.
Statement unicode_string O texto da instrução que foi executada.

Definição de sessão em 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

Esse evento ocorre quando o estado do gerenciador de réplicas de disponibilidade muda. Indica o heartbeat do gerenciador de réplicas de disponibilidade. Quando o gerenciador de réplicas de disponibilidade não está em um estado saudável, todas as réplicas de disponibilidade na instância do SQL Server ficam indisponíveis.

Informações de evento

Coluna Descrição
Nome availability_replica_manager_state_change
Categoria always on
Canal Operacional

Campos de evento

Nome type_name Descrição
current_state manager_state O estado atual do gerenciador de réplica de disponibilidade.

Online

Offline

Aguardando comunicação do cluster

Definição de sessão em 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): Mudança de função de réplica de banco de dados

Esse evento error_reported filtrado ocorre de forma assíncrona depois da alteração de uma função de réplica de disponibilidade. Indica qual banco de dados de disponibilidade não consegue alterar sua função esperada durante o processo de failover.

Informações de evento

Coluna Descrição
Nome error_reported

Error Number 1480: The REPLICATION_TYPE_MSG database "DATABASE_NAME" is changing roles from "OLD_ROLE" to "NEW_ROLE" due to REASON_MSG
Categoria erros
Canal Administrador

Definição de sessão em 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

Captura dados de diagnóstico e informações de integridade sobre o SQL Server para detectar possíveis falhas. O procedimento é executado no modo de repetição e envia resultados periodicamente. Essa sessão de evento estendido está disponível a partir do SQL Server 2019 CU15 (15.0.4198.2).

Informações de evento

Nome Descrição
Nome sp_server_diagnostics_component_result
Categoria Servidor
Canal Depurar

Campos de evento

Nome type_name Descrição
component uint8 Nome do componente.
state uint8 Indica o status de saúde do componente.
data xml Campo XML contendo informações extras sobre o componente.

Definição de sessão em 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

Exporta logs de conectividade ou relacionados à rede entre as réplicas primárias e secundárias. Essa sessão de evento estendido está disponível a partir do SQL Server 2019 CU15 (15.0.4198.2).

Informações de evento

Nome Descrição
Nome ucs_connection_setup
Categoria Transport
Canal Depurar

Campos de evento

Nome type_name Descrição
setup_event int32 Evento de configuração de conexão
obj_address pointer Endereço do endpoint de conexão
endpoint_type int32 Tipo de endpoint
stream_status int32 Status do fluxo de conexão
error_number uint32 Código de erro de conexão
connection_id guid ID da Ligação
error_message unicode_string Mensagem de erro de conexão
address unicode_string Endereço de destino da conexão
circuit_id unicode_string ID do circuito de conexão

Definição de sessão em 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

Redireciona a saída de alguns comandos DBCC e informações de log HADR para a sessão de evento estendido (semelhante ao sinalizador de rastreamento 3605). Essa sessão de evento estendido está disponível a partir do SQL Server 2019 CU15 (15.0.4198.2).

Informações de evento

Nome Descrição
Nome hadr_trace_message
Categoria Sempre
Canal Depurar

Campos de evento

Nome type_name Descrição
hadr_message unicode_string Redireciona a saída de alguns comandos DBCC e informações de log HADR para a sessão de evento estendido (semelhante ao sinalizador de rastreamento 3605).

Definição de sessão em 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