Возможные неполадки при зеркальном отображении базы данных

К сбою во время сеанса зеркального отображения базы данных могут привести различные физические неисправности, ошибки операционной системы или ошибки SQL Server. Сеанс зеркального отображения базы данных не выполняет активных проверок компонентов, на которые опирается процесс Sqlservr.exe, и не контролирует правильность их работы. Однако для некоторых типов сбоев подверженный сбою компонент сообщает об ошибке в Sqlservr.exe. Отчет об ошибке, переданный другим компонентом, называется постоянной ошибкой. Чтобы обнаружить другие сбои, которые в противном случае могли быть не замечены, для зеркального отображения базы данных реализован собственный механизм ожидания. По истечении времени ожидания для зеркального отображения базы данных предполагается, что произошел сбой и объявляется кратковременная ошибка.

Важное примечаниеВажно!

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

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

Сбои из-за постоянных ошибок

Постоянные ошибки могут быть вызваны следующими причинами (но не ограничиваются ими):

  • физический разрыв соединения или кабеля;

  • неисправная сетевая плата;

  • изменение настроек маршрутизатора;

  • изменения в конфигурации брандмауэра;

  • изменения в конфигурации конечной точки;

  • выход из строя накопителя, на котором находятся журналы транзакций;

  • сбой операционной системы или процесса.

Например: если устройство, на котором ведется журнал основной базы данных, не отвечает и отказывает, операционная система сообщает процессу Sqlservr.exe о возникновении серьезной ошибки.

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

ПримечаниеПримечание

Единственным случаем, когда для сеанса зеркального отображения базы данных выполняется активная проверка на ошибки, являются кратковременные ошибки. Дополнительные сведения см. в подразделе «Сбои из-за кратковременных ошибок» далее в этом разделе.

Чтобы помочь интерпретировать условия возникновения ошибок в сети, спросите у инженера сети, какие сообщения об ошибках отправляются на порт перед возникновением следующих событий в соединении TCP.

  • DNS не работает.

  • Выдернуты кабели.

  • Установлен брандмауэр Microsoft Windows, блокирующий указанный порт.

  • Ошибка приложения, следящего за портом.

  • Переименован сервер Windows.

  • Перезагружен сервер Windows.

ПримечаниеПримечание

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

Сбои из-за кратковременных ошибок

Условия, приводящие к превышению времени ожидания при зеркальном отображении, могут быть вызваны следующими причинами (но не ограничиваются ими).

  • Сетевые ошибки (истечение времени ожидания канала связи TCP, пропущенные или искаженные пакеты, поступление пакетов в неверном порядке).

  • Зависание операционной системы, сервера или состояния базы данных.

  • Время ожидания сервера Windows.

  • Нехватка вычислительных ресурсов (например, из-за перегрузки ЦП или диска, переполнения журнала транзакций, переполнения памяти или превышения числа потоков). В таких случаях необходимо увеличить время ожидания, снизить рабочую нагрузку или сменить оборудование, чтобы оно соответствовало задачам, выполняемым системой.

Механизм ожидания при зеркальном отображении

Так как экземпляр сервера не в состоянии выявить кратковременные ошибки, они потенциально могут заставить экземпляр сервера бесконечно ожидать ответа. Для предотвращения такого поведения в сеансе зеркального отображения базы данных используется механизм ожидания, основанный на том, что каждый экземпляр сервера, участвующий в сеансе, через заданный промежуток времени посылает сообщение PING по всем открытым соединениям.

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

Если до истечения интервала ожидания сообщение PING не пришло, экземпляр сервера считает, что для соединения наступил тайм-аут. После этого экземпляр сервера закрывает соединение, для которого время ожидания истекло, и обрабатывает событие истечения времени ожидания в соответствии с состоянием и режимом работы сеанса.

Истечение времени ожидания будет считаться сбоем даже в том случае, если фактически другой сервер работает нормально. Если время ожидания для сеанса установлено слишком коротким и не позволяет поддерживать нормальное реагирование какого-либо из участников, возникают ложные сбои. Ложные сбои возникают, когда один экземпляр сервера успешно обращается к другому, время отклика которого настолько велико, что его сообщения PING не успевают дойти до истечения времени ожидания.

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

Изменение величины тайм-аута (только в режиме высокой безопасности)

Просмотр текущего значения времени ожидания

Реакция на ошибку

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