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

Область применения: 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, а затем наведите указатель мыши на сеанс скрипта, а затем выберите "Создать" Редактор запросов окно.

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

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

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

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

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

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

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

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

  7. После завершения сеанса нажмите кнопку "ОК ", чтобы закрыть ее. Убедитесь, что сеанс запущен, чтобы он фиксировал выбранные вами события.

availability_replica_state_change

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

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

Столбец Описание:
Имя. availability_replica_state_change
Категория always on
Канал Операционный

Поля событий

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

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

Primary_Normal

Secondary_Normal

Resolving_Pending_Failover

Resolving_Normal

Primary_Pending

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

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

Primary_Normal

Secondary_Normal

Resolving_Pending_Failover

Resolving_Normal

Primary_Pending

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

availability_group_lease_expired

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

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

Столбец Описание:
Имя. availability_group_lease_expired
Категория always on
Канал Операционный

Поля событий

Имя. Type_name Description
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

Возникает, когда автоматический переход на другой ресурс проверяет готовность реплики доступности в качестве первичной реплики, и показывает, готова ли целевая реплика доступности стать новой первичной репликой. Например, проверка перехода на другой ресурс возвращает значение false, когда синхронизированы или присоединены не все базы данных. Это событие призвано предоставлять точку отказа при переходах на другой ресурс. Эта информация представляет интерес для администратора базы данных, особенно при автоматических переходах на другой ресурс, так как они не требуют вмешательства. Администратор базы данных может просмотреть событие, чтобы узнать причину сбоя автоматического перехода на другой ресурс.

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

Имя Описание
availability_replica_automatic _failover_validation
Категория always on
Канал Аналитический

Поля событий

Имя. Type_name Description
availability_group_id guid Идентификатор группы доступности.
availability_group_name unicode_string Имя группы доступности.
availability_replica_id guid Идентификатор реплики доступности.
forced_quorum validation_result_type Если это значение равно TRUE, то автоматический переход на другой ресурс на этой реплике доступности объявляется недействительным.

TRUE

FALSE
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

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

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

Номер ошибки Description
35201 Истекло время ожидания при попытке установить соединение с репликой доступности "%ls".
35202 Соединение для группы доступности "%ls" от реплики доступности "%ls" с идентификатором [%ls] до реплики доступности "%ls" с идентификатором [%ls] было успешно установлено. Это информационное сообщение. Вмешательство пользователя не требуется.
35206 Истекло время ожидания для ранее установленного соединения с репликой доступности "%ls".
35204 Подключение между экземпляром "%ls" и "%ls" отключено из-за завершения работы конечной точки.
Время ожидания + подключение
35207 Попытка соединения с идентификатором группы доступности "%ls" из реплики с идентификатором "%ls" к реплике с идентификатором "%ls" завершилась с ошибкой %d, уровень серьезности %d, состояние %d. (Этот вариант может плохо подходить для использования администратором базы данных. В этом случае нужно проверить и удалить его позднее.)
35217 (Впервые появилось в SQL Server 2019 CU15 (15.0.4198.2)) Пул потоков для групп доступности Always On не мог запустить новый рабочий поток из-за нехватки доступных рабочих потоков. Это может ухудшить производительность групп доступности Always On. Увеличьте число разрешенных потоков с помощью параметра конфигурации "Макс. число рабочих потоков".
9642 Произошла ошибка конечной точки транспорта компонента Service Broker или зеркального отображения базы данных. Ошибка: %i, состояние: %i. (Роль ближней конечной точки: %S_MSG, адрес дальней конечной точки: "%.*hs".) Ошибка: %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 еще не загружена.

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

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

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

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

Поля событий

Имя. Type_name Description
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

RESUMED

SUSPENDED

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
Категория always on
Канал Аналитический

Поля событий

Имя. Type_name Description
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.
Оператор 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
Категория always on
Канал Операционный

Поля событий

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

Миграция по сети

Offline

WaitingForClusterCommunication

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

Номер ошибки 1480: база данных "DATABASE_NAME" REPLICATION_TYPE_MSG меняет роль с "OLD_ROLE" на "NEW_ROLE" по причине 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 Description
component UInt8 Имя компонента.
state UInt8 Указывает состояние работоспособности компонента.
. 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 Description
setup_event Int32 Событие настройки подключения.
obj_address Указатель Адрес конечной точки подключения.
endpoint_type Int32 Тип конечной точки
stream_status Int32 Состояние потока подключения.
error_number UInt32 Код ошибки подключения.
connection_id GUID Идентификатор подключения.
error_message UnicodeString Сообщение об ошибке подключения.
address UnicodeString Целевой адрес подключения.
circuit_id UnicodeString Идентификатор цепи подключения.

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

Следующие шаги