Configuración de eventos extendidos para grupos de disponibilidad

Se aplica a: SQL Server

SQL Server define eventos extendidos que son específicos de los grupos de disponibilidad. Puede supervisar estos eventos extendidos en una sesión para ayudar con el diagnóstico de causas raíz cuando solucione problemas de un grupo de disponibilidad. Puede ver los eventos extendidos de un grupo de disponibilidad con la siguiente consulta:

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

La sesión alwayson_health

La sesión de eventos extendidos alwayson_health se crea automáticamente al crear el grupo de disponibilidad y captura un subconjunto de los eventos relacionados del grupo de disponibilidad. Esta sesión está preconfigurada como una útil y cómoda herramienta que ayuda a empezar a trabajar rápidamente a la vez que soluciona los problemas de un grupo de disponibilidad. El Asistente para crear un grupo de disponibilidad inicia automáticamente la sesión en cada réplica de disponibilidad participante configurada en el asistente.

Importante

Si no ha creado el grupo de disponibilidad mediante el Asistente para nuevo grupo de disponibilidad, puede que la sesión alwayson_health no se inicie automáticamente. Si la sesión no se ha iniciado, no puede capturar datos de eventos cuando se produce un problema inesperado. Debe iniciar la sesión de forma manual y configurarla para que se inicie automáticamente en las propiedades de la sesión.

Para ver la definición de la definición alwayson_health:

  1. En el Explorador de objetos, expanda Administración, Eventos extendidos y Sesiones.

  2. Haga clic con el botón derecho en Alwayson_health, luego elija Incluir sesión como, CREATE To y, por último, seleccione Nueva ventana del Editor de consultas.

Eventos extendidos para la depuración

Además de los eventos extendidos cubiertos por la sesión Alwayson_health, SQL Server define un amplio conjunto de eventos de depuración para los grupos de disponibilidad. Para aprovechar estos otros eventos extendidos en una sesión, siga los procedimientos siguientes:

  1. En el Explorador de objetos, expanda Administración, Eventos extendidos y Sesiones.

  2. Haga clic con el botón derecho en Sesiones y seleccione Nueva sesión. O bien, haga clic con el botón derecho en Alwayson_health y seleccione Propiedades.

  3. En el panel Seleccionar una página, seleccione Eventos.

  4. En la biblioteca de eventos, en la columna Categoría, seleccione alwayson y desactive las demás categorías.

  5. En la columna Canal, seleccione Depurar. Todos los eventos relacionados del grupo de disponibilidad que aún no estén seleccionados se muestran ahora en la biblioteca de eventos.

  6. Resalte un evento de la biblioteca de eventos y luego seleccione el botón > para seleccionarlo para la sesión.

  7. Cuando termine la sesión, seleccione Aceptar para cerrarla. Asegúrese de que la sesión se haya iniciado para que capture los eventos seleccionados.

availability_replica_state_change

Se produce cuando cambia el estado de una réplica de disponibilidad. La creación de un grupo de disponibilidad o la combinación de una réplica de disponibilidad pueden desencadenar este evento. Es útil para el diagnóstico de errores en conmutaciones automáticas por error. También se puede usar para el seguimiento de los pasos de conmutación por error.

Información del evento

Columna Descripción
Nombre availability_replica_state_change
Category Always On
Canal Operativos

Campos del evento

Nombre Type_name Descripción
availability_group_id guid Identificador del grupo de disponibilidad.
availability_group_name unicode_string Nombre del grupo de disponibilidad.
availability_replica_id guid Identificador de la réplica de disponibilidad.
previous_state availability_replica_state Rol de la réplica antes del cambio.

Los valores posibles son:

Primary_Normal

Secondary_Normal

Resolving_Pending_Failover

Resolving_Normal

Primary_Pending

Not_Available
current_state availability_replica_state Rol de la réplica después del cambio.

Los valores posibles son:

Primary_Normal

Secondary_Normal

Resolving_Pending_Failover

Resolving_Normal

Primary_Pending

Not_Available

Definición de sesión 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 produce cuando el clúster y el grupo de disponibilidad tienen un problema de conectividad y la concesión ha expirado. Este evento indica que se ha interrumpido la conectividad entre el grupo de disponibilidad y el clúster WSFC subyacente. Si el problema de conectividad se produce en la réplica principal, el evento puede producir una conmutación automática por error o dejar sin conexión al grupo de disponibilidad.

Información del evento

Columna Descripción
Nombre availability_group_lease_expired
Category Always On
Canal Operativos

Campos del evento

Nombre Type_name Descripción
availability_group_id guid Identificador del grupo de disponibilidad.
availability_group_name unicode_string Nombre del grupo de disponibilidad.

Definición de sesión 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 produce cuando la conmutación automática por error valida la preparación de una réplica de disponibilidad como réplica principal y muestra si la réplica de disponibilidad de destino está lista para ser la nueva réplica principal. Por ejemplo, la validación de conmutación por error devuelve False si no todas las bases de datos se han sincronizado o se han combinado. Este evento se ha diseñado para proporcionar un punto de error durante las conmutaciones por error. Esta información es de interés para el administrador de la base de datos especialmente para conmutaciones automáticas por error, dado que una conmutación automática por error es una operación desatendida. El administrador de la base de datos puede revisar el evento para ver por qué se ha producido un error en la conmutación automática por error.

Información del evento

Nombre Descripción
availability_replica_automatic _failover_validation
Category Always On
Canal Analíticos

Campos del evento

Nombre Type_name Descripción
availability_group_id guid Identificador del grupo de disponibilidad.
availability_group_name unicode_string El nombre del grupo de disponibilidad.
availability_replica_id guid Identificador de la réplica de disponibilidad.
forced_quorum validation_result_type Si el valor es TRUE, la conmutación automática por error se invalida en esta réplica de disponibilidad.

TRUE

FALSE
joined_and_synchronized validation_result_type Si el valor es FALSE, la conmutación automática por error se invalida en esta réplica de disponibilidad.

TRUE

FALSE
previous_primary_or_automatic_failover_target validation_result_type Si el valor es FALSE, la conmutación automática por error se invalida en esta réplica de disponibilidad.

TRUE

FALSE

Definición de sesión 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 (varios números de error): para problemas de conexión o de transporte

Cada evento filtrado indica que se ha producido un problema de conectividad en el punto de conexión de reflejo de transporte o base de datos del que depende ese grupo de disponibilidad.

Columna Descripción
Nombre error_reported

números que se van a filtrar: 35201, 35202, 35206, 35204, 35207, 35217, 9642, 9666, 9691, 9692, 9693, 28034, 28036, 28080, 28091, 33309
Category errors
Canal Administración

Números de error que se van a filtrar

Número de error Descripción
35201 Se ha producido un tiempo de espera de conexión al intentar establecer una conexión con la réplica de disponibilidad "%ls".
35202 Se ha establecido correctamente una conexión del grupo de disponibilidad "%ls" de la réplica de disponibilidad "%ls" con el identificador [%ls] a "%ls" con el identificador [%ls]. Esto es solo un mensaje informativo. No se requiere ninguna acción del usuario.
35206 Se ha producido un tiempo de espera de conexión en una conexión previamente establecida con la réplica de disponibilidad "%ls".
35204 Se ha deshabilitado la conexión entre la instancia "%ls" y "%ls" debido al apagado del punto de conexión.
Tiempo de espera + conectado
35207 Error del intento de conexión en el identificador de grupo de disponibilidad "%ls" del identificador de réplica "%ls" al identificador de réplica "%ls" debido al error %d, gravedad %d, estado %d. gravedad %d, estado %d. (esto puede no tener un buen uso de DBA. En tal caso, compruébelo y elimínelo más adelante)
35217 [A partir de SQL Server 2019 CU15 (15.0.4198.2)] El grupo de subprocesos para grupos de disponibilidad de Always On no pudo iniciar un nuevo subproceso de trabajo porque no hay suficientes subprocesos de trabajo disponibles. Esto puede degradar el rendimiento de los grupos de disponibilidad de Always On. Utilice la opción de configuración "max worker threads" para aumentar el número de subprocesos permitidos.
9642 Error en el punto de conexión de una conexión de transporte de Service Broker o creación de reflejo de la base de datos. Error: %i, estado: %i. Rol de punto de conexión cercano: dirección de punto de conexión lejano de "%S_MSG: %.*hs". Error: %i, estado: %i. (Rol de punto de conexión cercano: dirección de punto de conexión lejano de %S_MSG: "%.*hs")
9666 El punto de conexión %S_MSG está deshabilitado o se ha detenido.
9691 El punto de conexión %S_MSG ha dejado de escuchar las conexiones.
9692 El punto de conexión %S_MSG no puede escuchar en el puerto %d porque lo está usando otro proceso.
9693 El punto de conexión %S_MSG no puede escuchar conexiones debido al siguiente error: "%.*ls".
28034 Error del protocolo de enlace de la conexión. El inicio de sesión '%.*ls' no tiene permiso CONNECT en el extremo. Estado %d.
28036 Error del protocolo de enlace de la conexión. No se encontró el certificado utilizado por este extremo: %S_MSG. Utilice DBCC CHECKDB en la base de datos master para comprobar la integridad de los metadatos de los extremos. Estado %d.
28080 Error del protocolo de enlace de la conexión. El extremo %S_MSG no está configurado. Estado %d.
28091 No se admite el inicio del punto de conexión de %S_MSG sin autenticación.
33309 No se puede iniciar el punto de conexión del clúster porque la configuración del punto de conexión %S_MSG predeterminada aún no se ha cargado.

Definición de sesión 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 produce cuando se suspende o reanuda el movimiento de la base de datos de una réplica de base de datos.

Información del evento

Columna Descripción
Nombre data_movement_suspend_resume
Category Siempre disponible
Canal Operativos

Campos del evento

Nombre Type_name Descripción
availability_group_id guid Identificador del grupo de disponibilidad.
availability_group_name unicode_string Nombre del grupo de disponibilidad, si estuviera disponible.
availability_replica_id guid Identificador de la réplica de disponibilidad.
database_replica_id guid Identificador de la base de datos de disponibilidad.
database_replica_name unicode_string El nombre de la base de datos de disponibilidad.
database_id uint32 Identificador de la base de datos de disponibilidad.
suspend_status suspend_status_type Valores de estado de suspensión.

SUSPEND_NULL

RESUMED

SUSPENDED

SUSPENDED_INVALID
suspend_source suspend_source_type Origen de la acción de suspensión o reanudación.
suspend_reason unicode_string Motivo de suspensión capturado en el administrador de réplicas de base de datos.

Definición de sesión 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 produce cuando se ejecuta una instrucción DDL (lenguaje de definición de datos) del grupo de disponibilidad, incluidas CREATE, ALTER o DROP. El propósito principal del evento es indicar un problema con una acción del usuario en una réplica de disponibilidad, o indicar el punto inicial de una acción operativa, que va seguido de un problema de tiempo de ejecución como una conmutación por error manual, una conmutación por error forzada, un movimiento de datos suspendido o un movimiento de datos reanudado.

Información del evento

Columna Descripción
Nombre alwayson_ddl_execution
Category Always On
Canal Analíticos

Campos del evento

Nombre Type_name Descripción
availability_group_id Guid Identificador del grupo de disponibilidad.
availability_group_name unicode_string El nombre del grupo de disponibilidad.
ddl_action alwayson_ddl_action Indica el tipo de acción de DDL: CREATE, ALTER o DROP.
ddl_phase ddl_opcode Indica la fase de la operación de DDL: BEGIN, COMMIT o ROLLBACK.
. unicode_string Texto de la instrucción que se ha ejecutado.

Definición de sesión 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 produce cuando cambia el estado del administrador de réplicas de disponibilidad. Este evento indica el latido del administrador de réplicas de disponibilidad. Cuando el administrador de réplicas de disponibilidad no está en estado correcto, todas las réplicas de disponibilidad de la instancia de SQL Server están fuera de servicio.

Información del evento

Columna Descripción
Nombre availability_replica_manager_state_change
Category Always On
Canal Operativos

Campos del evento

Nombre Type_name Descripción
current_state manager_state Estado actual del administrador de réplicas de disponibilidad.

En línea

Sin conexión

WaitingForClusterCommunication

Definición de sesión 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): rol de réplica de base de datos cambiado

Este evento filtrado error_reported se produce de forma asincrónica después del cambio de un rol de réplica de disponibilidad. Indica qué base de datos de disponibilidad no cambia su rol esperado durante el proceso de conmutación por error.

Información del evento

Columna Descripción
Nombre error_reported

Número de error 1480: La base de datos REPLICATION_TYPE_MSG "DATABASE_NAME" cambia roles de "OLD_ROLE" a "NEW_ROLE" debido a REASON_MSG
Category errors
Canal Administración

Definición de sesión 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 datos de diagnóstico e información de estado acerca de SQL Server para detectar errores potenciales. El procedimiento se ejecuta en modo repetido y envía los resultados periódicamente. Esta sesión de eventos extendidos está disponible a partir SQL Server 2019 CU15 (15.0.4198.2).

Información del evento

Nombre Descripción
Nombre sp_server_diagnostics_component_result
Category Servidor
Canal Depuración

Campos del evento

Nombre Type_name Descripción
component UInt8 component name.
state UInt8 Indica el estado de mantenimiento del componente.
datos XML Campo XML que contiene información adicional sobre el componente.

Definición de sesión 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

Permite volcar los registros relacionados con la red o la conectividad entre las réplicas principal y secundaria. Esta sesión de eventos extendidos está disponible a partir SQL Server 2019 CU15 (15.0.4198.2).

Información del evento

Nombre Descripción
Nombre ucs_connection_setup
Category Transporte
Canal Depuración

Campos del evento

Nombre Type_name Descripción
setup_event Int32 Evento de configuración de la conexión
obj_address Puntero Dirección del punto de conexión
endpoint_type Int32 Tipo de punto de conexión
stream_status Int32 Estado del flujo de conexión
error_number UInt32 Código de error de conexión
connection_id GUID Id. de conexión
error_message UnicodeString Mensaje de error de conexión
address UnicodeString Dirección de destino de conexión
circuit_id UnicodeString Id. de circuito de conexión

Definición de sesión 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 salida de algunos comandos DBCC e información de registro de HADR a la sesión de eventos extendidos (similar a la marca de seguimiento 3605). Esta sesión de eventos extendidos está disponible a partir SQL Server 2019 CU15 (15.0.4198.2).

Información del evento

Nombre Descripción
Nombre hadr_trace_message
Category Siempre disponible
Canal Depuración

Campos del evento

Nombre Type_name Descripción
hadr_message unicode_string Redirige la salida de algunos comandos DBCC e información de registro de HADR a la sesión de eventos extendidos (similar a la marca de seguimiento 3605).

Definición de sesión 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

Pasos siguientes