В мире SQL Server могут возникать различные проблемы при работе с группами доступности AlwaysOn. Одной из таких проблем является ожидание HADR_AR_CRITICAL_SECTION_ENTRY, которое может привести к застреванию модификаций группы доступности и предотвратить синхронизацию реплик.
Давайте рассмотрим реальный сценарий, в котором возникло это ожидание, и изучим решение для его исправления.
Ситуация
Клиент использовал SQL Server в виртуальной среде. Из-за нестабильности сетевой инфраструктуры кластер Windows потерял кворум на несколько минут, прежде чем восстановиться. Поскольку группы доступности AlwaysOn тесно связаны с отказоустойчивым кластером серверов Windows, любые проблемы внутри кластера могут повлиять на группу доступности.
В результате этой нестабильности сети клиент столкнулся с проблемой. Он не мог вносить изменения в группу доступности, так как она находилась в несогласованном состоянии, а запросы на модификацию застревали в ожидании HADR_AR_CRITICAL_SECTION_ENTRY.
Причина
Согласно документации Microsoft, ожидание HADR_AR_CRITICAL_SECTION_ENTRY возникает, когда команда Always On DDL или команда кластеризации отказоустойчивого сервера Windows ожидает эксклюзивного чтения/записи доступа к текущему состоянию выполнения локальной реплики связанной группы доступности.
Решение/Обходное решение
После изучения проблемы было обнаружено, что перезапуск экземпляра SQL Server является рекомендуемым решением для устранения ожидания HADR_AR_CRITICAL_SECTION_ENTRY. В данном случае клиент установил ручное переключение отказоустойчивости группы доступности и перезапустил обе реплики. Через несколько минут вторичная реплика синхронизировалась, и им удалось успешно удалить базы данных из группы доступности.
Для проверки правильности работы клиент протестировал переключение вперед и назад, и все операции прошли успешно.
Заключение
Если вы столкнулись с ожиданием HADR_AR_CRITICAL_SECTION_ENTRY в вашей среде SQL Server, рекомендуется перезапустить экземпляр SQL Server. Это ожидание может возникать при проблемах с отказоустойчивым кластером серверов Windows или при выполнении команд Always On DDL.
Вы сталкивались с этим ожиданием в своей среде? Если да, мы хотели бы услышать о причине и о том, как вы ее решили. Пожалуйста, поделитесь своими идеями в комментариях ниже.