В SQL Server одной из самых важных функций для обеспечения высокой доступности являются группы доступности. С помощью доступных для чтения вторичных копий иногда бывает сложно определить, когда произошло переключение и где находится группа доступности. В этой статье мы рассмотрим, как ответить на эти вопросы и лучше понять группы доступности.
AlwaysON Extended Event
Одной из отличных возможностей групп доступности является встроенное расширенное событие с названием “AlwaysOn_health”, которое записывает информацию для устранения неполадок. Анализируя это расширенное событие, мы можем определить конкретные номера ошибок, которые включены в фильтр. Эти номера ошибок предоставляют ценную информацию о поведении группы доступности.
Например, давайте рассмотрим ошибку с номером 1480. Эта ошибка возникает каждый раз, когда база данных, включенная в группу доступности или в зеркалирование базы данных, меняет свою роль из-за переключения. Сообщение об ошибке содержит информацию о базе данных и изменении роли.
Когда произошло переключение в моей группе доступности?
Чтобы определить, когда произошло переключение в группе доступности, мы можем отфильтровать расширенное событие “AlwaysOn_health” по номеру ошибки 1480. Целью расширенного события является файл, и по умолчанию он использует папку журнала по умолчанию для SQL Server. Запросив данные события из файла, мы можем получить временную метку переключения.
Вот пример запроса для получения временной метки переключения:
;WITH cte_HADR AS (
SELECT object_name, CONVERT(XML, event_data) AS data
FROM sys.fn_xe_file_target_read_file('C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Log\AlwaysOn*.xel', null, null, null)
WHERE object_name = 'error_reported'
)
SELECT data.value('(/event/@timestamp)[1]','datetime') AS [timestamp],
data.value('(/event/data[@name=''error_number''])[1]','int') AS [error_number],
data.value('(/event/data[@name=''message''])[1]','varchar(max)') AS [message]
FROM cte_HADR
WHERE data.value('(/event/data[@name=''error_number''])[1]','int') = 1480
Этот запрос предоставит вам временную метку последнего переключения. Вы также можете использовать графический интерфейс Extended Event для отслеживания переключений, но использование T-SQL позволяет отслеживать переключения в нескольких группах доступности на разных серверах.
Как стать проактивным?
Если вы хотите предпринимать проактивные действия, когда база данных внутри группы доступности меняет роли, вы можете настроить оповещение SQL Agent. Оповещение SQL Agent может выполнять действия, такие как отправка электронной почты вашей команде DBA или запуск другой задачи SQL Agent для выполнения необходимых действий. Это позволяет быть впереди потенциальных проблем и минимизировать время простоя.
Как отчет о переключениях в группе доступности по всему предприятию?
Для отчета о переключениях в группе доступности по всему предприятию вы можете использовать функцию Центрального сервера управления (CMS). Создав группу CMS для ваших экземпляров SQL Server и запустив вышеупомянутый запрос, вы можете обнаружить переключения групп доступности. При этом предполагается, что у вас есть стандартный процесс установки, который сохраняет путь к журналу по умолчанию одинаковым для всех экземпляров SQL Server.
Следуя этим шагам, вы можете лучше понять свои группы доступности и эффективно управлять переключениями. Используя встроенные расширенные события и функции SQL Server, вы можете проактивно отслеживать и отчитываться о поведении групп доступности.
Спасибо за прочтение этой статьи. Следите за новыми советами и трюками по SQL Server!