Настройка расширенных событий для групп доступности

Область применения:SQL Server

SQL Server определяет расширенные события, относящиеся к группам доступности. Отслеживайте эти расширенные события на сессии, чтобы помочь с диагностикой коренных причин при устранении проблем в группе доступности. Используйте следующий запрос, чтобы просмотреть расширенные события группы доступности:

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

Сеанс alwayson_health

Сессия расширенных событий создаётся автоматически при создании группы доступности и охватывает подмножество событий, связанных с alwayson_health группой доступности. Этот сеанс предварительно настроен как полезный и удобный инструмент, который поможет вам быстро приступить к устранению неполадок в группе доступности. Мастер создания группы доступности автоматически запускает сеанс на всех участвующих репликах доступности, настроенных в мастере.

Внимание

Если не создать группу доступности с помощью Мастера создания группы доступности, сеанс alwayson_health может не запуститься автоматически. Если сессия не запущена, она не сможет зафиксировать данные о событиях при возникновении неожиданной проблемы. Нужно вручную запустить сеанс и с помощью свойств настроить его для автоматического запуска.

Чтобы просмотреть определение сеанса alwayson_health , выполните следующие действия.

  1. В обозреватель объектоврасширяйте Управление, Расширенные события, а затем Сессии.

  2. Щелкните правой кнопкой мыши элемент Alwayson_health, наведите указатель на Script Session as, затем на CREATE To, а затем выберите New Редактор запросов Window.

Расширенные события для отладки

В дополнение к расширенным событиям, которые охватывает сессия Alwayson_health, SQL Server определяет обширный набор отладочных событий для групп доступности. Чтобы использовать эти дополнительные расширенные события в сессии, следуйте следующим шагам:

  1. В обозреватель объектоврасширяйте Управление, Расширенные события, а затем Сессии.

  2. Щелкните правой кнопкой мыши элемент Сеансы и выберите Создать сеанс. Либо щелкните правой кнопкой элемент Alwayson_health и выберите Свойства.

  3. На панели "Выбор страницы" выберите "События".

  4. В столбце Категория библиотеки событий выберите alwayson и очистите остальные категории.

  5. В столбце Канал выберите Отладка. Библиотека событий теперь показывает все события, связанные с группой доступности, которые ещё не выбраны.

  6. Выделите событие в библиотеке событий и выберите > кнопку, чтобы выбрать его для сессии.

  7. Когда закончите сессию, выберите OK , чтобы закрыть её. Убедитесь, что сессия запущена так, чтобы в ней зафиксированы выбранные вами события.

availability_replica_state_change

Это событие происходит, когда меняется состояние доступной реплики. Создание группы доступности или присоединение реплики к группе доступности может вызвать это событие. Это полезно для диагностики неудачного автоматического переключения при отказе, а также помогает отследить этапы этого переключения.

Сведения о событии

Столбец Описание:
Имя. availability_replica_state_change
Категория Всегда включено
Канал Операционный

Поля событий

Имя. type_name Описание:
availability_group_id guid Идентификатор группы доступности.
availability_group_name unicode_string Имя группы доступности.
availability_replica_id guid Идентификатор реплики доступности.
previous_state availability_replica_state Роль реплики перед изменением.

Возможны следующие значения:

Основной_Обычный

Secondary_Normal

Устранение_ожидающего_переключения_при_отказе

Разрешение_Обычное

Основной_в_ожидании

Not_Available
current_state availability_replica_state Роль реплики после изменения.

Возможны следующие значения:

Основной_Обычный

Secondary_Normal

Устранение ожидающего переключения при отказе

Разрешение_Обычный

Основной: в ожидании

Not_Available

Определение сессии в 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

Истек срок действия аренды группы доступности

Это событие происходит, когда у кластера и группы доступности возникают проблемы с подключением и срок аренды истекает. Это указывает на то, что связь между группой доступности и базовым кластером WSFC нарушена. Если проблема с подключением возникает на основной реплике, это может вызвать автоматический отказ или отключить группу доступности.

Сведения о событии

Столбец Описание:
Имя. availability_group_lease_expired
Категория Всегда включен
Канал Операционный

Поля событий

Имя. type_name Описание:
availability_group_id guid Идентификатор группы доступности.
availability_group_name unicode_string Имя группы доступности.

Определение сессии в 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
Категория Всегда включено
Канал Аналитический

Поля событий

Имя. type_name Описание:
availability_group_id guid Идентификатор группы доступности.
availability_group_name unicode_string Имя группы доступности.
availability_replica_id guid Идентификатор реплики доступности.
forced_quorum validation_result_type Если значение равно TRUE, автоматический отказ аннулируется на этой реплике доступности.

TRUE

ЛОЖЬ
joined_and_synchronized validation_result_type Если значение равно FALSE, автоматический отказ аннулируется на этой реплике доступности.

TRUE

FALSE
previous_primary_or_automatic_failover_target validation_result_type Если значение равно FALSE, автоматический отказ аннулируется на этой реплике доступности.

TRUE

FALSE

Определение сессии в 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 (несколько кодов ошибок): Для проблем с передачей данных или подключением

Каждое отфильтрованное событие указывает на проблему с подключением в конечной точке транспорта или зеркального отображения базы данных, от которой зависит группа доступности.

Столбец Описание:
Имя. error_reported

Числа для фильтрации: 9691, 9642, 9693, 28080, 28034, 9692, 28036, 28091, 9666, 35217, 35207, 35204, 35206, 35202, 35201, 33309
Категория ошибки
Канал Администратор

Номера ошибок для фильтрации

Номер ошибки Описание:
9642 Произошла ошибка в конечной точке транспортного подключения Service Broker/зеркального отображения базы данных. Ошибка: %i, Состояние: %i. (Роль ближней конечной точки: %S_MSG, адрес дальней конечной точки: "%.*hs".)
9666 Конечная точка %S_MSG находится в отключенном или остановленном состоянии.
9691 Конечная точка %S_MSG прекратила прослушивание соединений.
9692 Конечная точка %S_MSG не может прослушивать порт %d, поскольку он используется другим процессом.
9693 Конечная точка %S_MSG не может прослушивать соединения из-за следующей ошибки: "%.*ls".
28034 Ошибка подтверждения соединения. Имя входа "%.*ls" не имеет разрешения CONNECT для конечной точки. Состояние %d.
28036 Ошибка подтверждения соединения. Сертификат, используемый данной конечной точкой, не обнаружен: %S_MSG. Используйте DBCC CHECKDB в базе данных master для проверки целостности метаданных конечных точек. Состояние %d.
28080 Не удалось выполнить рукопожатие при установлении соединения. Конечная точка %S_MSG не настроена. Состояние %d.
28091 Запуск конечной точки для %S_MSG без проверки подлинности не поддерживается.
33309 Не удалось запустить конечную точку кластера, так как конфигурация по умолчанию конечной точки %S_MSG еще не загружена.
35201 Истекло время ожидания при попытке установить подключение к реплике группы доступности "%ls" с идентификатором [%ls]. Существует проблема с сетью или брандмауэром, либо адрес конечной точки, указанный для реплики, не является конечной точкой зеркального отображения базы данных экземпляра сервера узла.
35202 Соединение для группы доступности "%ls" между репликой доступности "%ls" с идентификатором [%ls] и репликой доступности "%ls" с идентификатором [%ls] было успешно установлено. Это информационное сообщение. Вмешательство пользователя не требуется.
35204 Подключение между экземплярами сервера "%ls" с идентификатором [%ls] и "%ls" с идентификатором [%ls] было отключено, так как конечная точка зеркального отображения базы данных была отключена или остановлена. Перезапустите конечную точку с помощью ALTER ENDPOINT инструкции Transact-SQL с STATE = STARTED.
35206 Истекло время ожидания для ранее установленного подключения к реплике доступности "%ls" с идентификатором [%ls]. Существует проблема с сетью или брандмауэром, либо реплика доступности перешла в состояние разрешения.
35207 Попытка подключения в группе доступности с идентификатором "%ls" от реплики с идентификатором "%ls" к реплике с идентификатором "%ls" не удалась из-за ошибки %d, уровня серьезности %d, состояния %d.

Примечание: эта ошибка может не иметь хорошего применения в DBA. В таком случае проверьте и удалите позже.
35217 Пул потоков для групп доступности AlwaysOn не смог запустить новый рабочий поток, так как не хватает доступных рабочих потоков. Это может ухудшить производительность групп доступности Always On. Увеличьте число разрешенных потоков с помощью параметра конфигурации "Макс. число рабочих потоков".

Применимо к: SQL Server 2019 CU 15 и более поздних версий.

Определение сессии в 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

приостановка и возобновление перемещения данных

Это событие происходит, когда перемещение реплики базы данных приостанавливается или возобновляется.

Сведения о событии

Столбец Описание:
Имя. перемещение_данных_приостановка_возобновление
Категория Всегда включено
Канал Операционный

Поля событий

Имя. type_name Описание:
availability_group_id guid Идентификатор группы доступности.
availability_group_name unicode_string Имя группы доступности (при его наличии).
availability_replica_id guid Идентификатор реплики доступности.
database_replica_id guid Идентификатор базы данных доступности.
database_replica_name unicode_string Имя базы данных доступности.
database_id uint32 Идентификатор базы данных доступности.
suspend_status suspend_status_type Значения состояния приостановки.

SUSPEND_NULL

Возобновлено

ПРИОСТАНОВЛЕНО

SUSPENDED_INVALID
suspend_source suspend_source_type Источник операции приостановки или возобновления.
suspend_reason unicode_string Причина приостановки, зарегистрированная диспетчером реплик базы данных.

Определение сессии в 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

Это событие происходит, когда начинает выполняться оператор языка определения данных группы доступности (DDL), включая CREATE, ALTER, или DROP. Событие в первую очередь указывает на проблему с пользовательским действием на реплике доступности или отмечает отправную точку операционного действия. За этим действием следует событие во время выполнения, например ручное переключение при отказе, принудительное переключение при отказе, приостановка перемещения данных или возобновление перемещения данных.

Сведения о событии

Столбец Описание:
Имя. alwayson_ddl_execution
Категория Всегда включено
Канал Аналитический

Поля событий

Имя. type_name Описание:
availability_group_id guid Идентификатор группы доступности.
availability_group_name unicode_string Имя группы доступности.
ddl_action alwayson_ddl_action Указывает тип действия DDL: CREATE, ALTER, или DROP.
ddl_phase ddl_opcode Указывает фазу операции DDL: BEGIN, COMMIT, или ROLLBACK.
Statement unicode_string Текст инструкции, которая была выполнена.

Определение сессии в 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

Это событие происходит, когда меняется состояние менеджера реплик доступности. Он показывает сердцебиение менеджера реплики доступности. Когда менеджер реплик доступности не в нормальном состоянии, все реплики доступности в экземпляре SQL Server выходят из строя.

Сведения о событии

Столбец Описание:
Имя. availability_replica_manager_state_change
Категория Всегда включено
Канал Операционный

Поля событий

Имя. type_name Описание:
current_state manager_state Текущее состояние диспетчера реплик доступности.

Онлайн

Offline

Ожидание связи с кластером

Определение сессии в 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): Изменение роли реплики базы данных

Это отфильтрованное событие error_reported возникает асинхронно после изменения роли реплики доступности. Оно указывает, какой базе данных доступности не удается изменить свою ожидаемую роль во время перехода на другой ресурс.

Сведения о событии

Столбец Описание:
Имя. 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
Категория ошибки
Канал Администратор

Определение сессии в 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

Собирает диагностические данные и сведения о состоянии SQL Server для выявления возможных сбоев. Процедура работает в повторяющемся режиме и периодически отправляет результаты. Этот сеанс расширенного события доступен начиная с версии SQL Server 2019 CU15 (15.0.4198.2).

Сведения о событии

Имя. Описание:
Имя. sp_server_diagnostics_component_result
Категория Сервер
Канал Отладка

Поля событий

Имя. type_name Описание:
component uint8 Имя компонента.
state uint8 Указывает состояние работоспособности компонента.
data xml поле XML, содержащее дополнительную информацию о компоненте.

Определение сессии в 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

Передаёт связность или сетевые логи между первичными и вторичными репликами. Этот сеанс расширенного события доступен начиная с версии SQL Server 2019 CU15 (15.0.4198.2).

Сведения о событии

Имя. Описание:
Имя. ucs_connection_setup
Категория Транспорт
Канал Отладка

Поля событий

Имя. type_name Описание:
setup_event int32 Событие установки соединения
obj_address pointer Адрес конечной точки соединения
endpoint_type int32 Тип конечной точки
stream_status int32 Состояние потока подключения.
error_number uint32 Код ошибки подключения.
connection_id guid Идентификатор подключения
error_message unicode_string Сообщение об ошибке подключения.
address unicode_string Целевой адрес подключения.
circuit_id unicode_string Идентификатор схемы соединения

Определение сессии в 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

Это событие перенаправляет выходные данные некоторых команд DBCC и журнала HADR в сеанс расширенного события (аналогично флагу трассировки 3605). Этот сеанс расширенного события доступен начиная с версии SQL Server 2019 CU15 (15.0.4198.2).

Сведения о событии

Имя. Описание:
Имя. hadr_trace_message
Категория Всегда включено
Канал Отладка

Поля событий

Имя. type_name Описание:
hadr_message unicode_string Перенаправляет результаты выполнения некоторых команд DBCC и сведения журнала HADR в сеанс расширенных событий (аналогично флагу трассировки 3605).

Определение сессии в 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