Возможные неполадки при зеркальном отображении базы данных
Область применения: SQL Server
Физические, операционные системы или проблемы SQL Server могут привести к сбою в сеансе зеркального отображения базы данных. Сеанс зеркального отображения базы данных не выполняет активных проверок компонентов, на которые опирается процесс Sqlservr.exe, и не контролирует правильность их работы. Однако при сбоях некоторых типов затронутый компонент сообщает приложению Sqlservr.exe об ошибке. Ошибка, о которой сообщил другой компонент, называется постоянной ошибкой. Чтобы обнаружить другие сбои, которые в противном случае могли быть не замечены, для зеркального отображения базы данных реализован собственный механизм ожидания. По истечении времени ожидания для зеркального отображения базы данных предполагается, что произошел сбой и объявляется кратковременная ошибка. Однако некоторые ошибки, которые возникают на уровне экземпляра SQL Server, не превышают времени ожидания зеркального отображения и поэтому не обнаруживаются.
Внимание
Ошибки баз данных, кроме ошибок в зеркальной базе данных, невозможно выявить в сеансе зеркального отображения базы данных. Более того, весьма проблематично будет обнаружить сбой диска данных, если только база данных не перезапускается вследствие такого сбоя.
Время обнаружения и, следовательно, время реакции на ошибку в сеансе зеркального отображения зависят от типа ошибки: постоянная или кратковременная. Отчеты о некоторых постоянных ошибках, таких как сбои в сети, отправляются немедленно. Однако в некоторых случаях зависящие от компонента периоды ожидания могут отложить отправку отчета о некоторых постоянных ошибках. В случае краткосрочных ошибок, длина времени ожидания зеркала определяется скоростью определения ошибок. По умолчанию, это период равен 10 секундам. Это минимальное рекомендуемое значение.
Сбои из-за постоянных ошибок
Постоянные ошибки могут быть вызваны следующими причинами (но не ограничиваются ими):
физический разрыв соединения или кабеля;
неисправная сетевая плата;
изменение настроек маршрутизатора;
изменения в конфигурации брандмауэра;
изменения в конфигурации конечной точки;
выход из строя накопителя, на котором находятся журналы транзакций;
сбой операционной системы или процесса.
Например: если устройство, на котором ведется журнал основной базы данных, не отвечает и отказывает, операционная система сообщает процессу Sqlservr.exe о возникновении серьезной ошибки.
Некоторые компоненты, например сетевые компоненты и ряд подсистем ввода-вывода, имеют собственные интервалы ожидания, предназначенные для выявления отказов. Некоторые интервалы ожидания не зависят от зеркального отображения базы данных, у которой совершенно нет сведений ни о них, ни об их поведении. В этих случаях интервал ожидания увеличивает время между возникновением сбоя и получением зеркалом базы данных итоговой постоянной ошибки.
Примечание.
Единственным случаем, когда для сеанса зеркального отображения базы данных выполняется активная проверка на ошибки, являются кратковременные ошибки. Дополнительные сведения см. в подразделе «Сбои из-за кратковременных ошибок» далее в этом разделе.
Чтобы помочь интерпретировать условия возникновения ошибок в сети, спросите у инженера сети, какие сообщения об ошибках отправляются на порт перед возникновением следующих событий в соединении TCP.
DNS не работает.
Выдернуты кабели.
В Microsoft Windows есть брандмауэр, который блокирует определенный порт.
Ошибка приложения, наблюдающего за портом.
Переименован сервер Windows.
Сервер под управлением Windows перезагружается.
Примечание.
Зеркальное отображение не защищает от проблем, связанных с доступом клиентов к серверу. Например, рассмотрите ситуацию, в которой публичный сетевой адаптер обрабатывает подключения клиентов к экземпляру основного сервера, в то время как частная сетевая карта обрабатывает весь трафик зеркального отображения между экземплярами серверов. В этом случае сбой публичного сетевого адаптера приведет к запрету доступа к базе данных, в то время как зеркалирование базы данных будет продолжать работать.
Сбои из-за кратковременных ошибок
Условия, приводящие к превышению времени ожидания при зеркальном отображении, могут быть вызваны следующими причинами (но не ограничиваются ими).
Сетевые ошибки (истечение времени ожидания канала связи TCP, пропущенные или искаженные пакеты, поступление пакетов в неверном порядке).
Операционная система, сервер или база данных не отвечает на запросы.
Время ожидания сервера Windows.
Нехватка вычислительных ресурсов (например, из-за перегрузки ЦП или диска, переполнения журнала транзакций, переполнения памяти или превышения числа потоков). В таких случаях необходимо увеличить время ожидания, снизить рабочую нагрузку или сменить оборудование, чтобы оно соответствовало задачам, выполняемым системой.
Механизм ожидания при зеркальном отображении
Так как экземпляр сервера не в состоянии выявить кратковременные ошибки, они потенциально могут заставить экземпляр сервера бесконечно ожидать ответа. Для предотвращения такого поведения в сеансе зеркального отображения базы данных используется механизм ожидания, основанный на том, что каждый экземпляр сервера, участвующий в сеансе, через заданный промежуток времени посылает сообщение PING по всем открытым соединениям.
Чтобы поддерживать соединение открытым, экземпляр сервера должен получить по нему сообщение PING в течение времени ожидания, заданного интервалом ожидания в сеансе зеркального отображения базы данных, плюс время, необходимое для отправки еще одного сообщения PING. Получение сообщения PING до истечения интервала ожидания указывает на то, что соединение все еще открыто, и что экземпляры сервера поддерживают связь по нему. При получении сообщения PING экземпляр сервера сбрасывает таймер ожидания для этого соединения.
Если при истечении времени ожидания связь не получена, экземпляр сервера считает, что истекло время ожидания подключения. Экземпляр сервера закрывает время ожидания подключения и обрабатывает событие времени ожидания в соответствии с состоянием и режимом работы сеанса.
Истечение времени ожидания будет считаться сбоем даже в том случае, если фактически другой сервер работает нормально. Если время ожидания для сеанса установлено слишком коротким и не позволяет поддерживать нормальное реагирование какого-либо из участников, возникают ложные сбои. Ложные сбои возникают, когда один экземпляр сервера успешно обращается к другому, время отклика которого настолько велико, что его сообщения PING не успевают дойти до истечения времени ожидания.
В сеансах высокопроизводительного режима тайм-аут всегда равен 10 секундам. Обычно этого достаточно для избегания ложных сбоев. В сеансах режима высокой безопасности установленный по умолчанию тайм-аут равен 10 секундам, но его длительность можно изменить. Во избежание ложных сбоев рекомендуется установить тайм-аут зеркалирование равным 1- секундам или выше.
Изменение величины тайм-аута (только в режиме высокой безопасности)
- Используйте инструкцию ALTER DATABASE <база данных> SET PARTNER TIMEOUT <целое число>.
Просмотр текущего значения времени ожидания
- Запрос mirroring_connection_timeout в sys.database_mirroring.
Реакция на ошибку
Независимо от типа ошибки, экземпляр сервера, который обнаружил ее, реагирует в соответствии со своей ролью, режимом работы сеанса и состоянием других соединений того же сеанса. Сведения о том, что происходит при потере участника, см. в разделе Database Mirroring Operating Modes.
См. также
Оценка прерывания работы службы во время переключения ролей (зеркальное отображение базы данных)
Режимы работы зеркального отображения базы данных
Переключение ролей во время сеанса зеркального отображения базы данных (SQL Server)
Зеркальное отображение базы данных (SQL Server)