Алгоритм повторного соединения (для соединений по протоколу TCP/IP)

Для соединения по протоколу TCP/IP, если клиент работает в операционной системе Microsoft Windows XP или более поздних версиях, когда имена обоих участников находятся в кэше, поставщик доступа к данным устанавливает соединение по алгоритму повторного соединения. Это справедливо как для начального соединения с сеансом, так и для повторного соединения после потери связи. После установки соединения выполнение предварительных и основных шагов подключения требует дополнительного времени.

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

Время, затраченное на создание соединения, может превышать время повтора по причине внешних факторов, таких как медленные уточняющие запросы DNS, медленный контроллер домена или KDC, время, затраченное на связь с обозревателем SQL Server, загруженность сети и так далее. Такие внешние факторы могут препятствовать подключению клиента к зеркально отображаемой базе данных. Также внешние факторы могут сделать время создания соединения большим, чем установленное время повтора. Дополнительные сведения об обходе DNS и обозревателя SQL Server при подключении к исходному участнику см. в разделе Установка первоначального соединения с сеансом зеркального отображения базы данных.

Если попытка соединения не удается или время повтора истекает до успешного создания соединения, поставщик данных пытается подключиться к другому участнику. Если создать соединение не удалось, поставщик пытается менять имена исходного участника и участника, являющегося резервным сервером, пока не установится соединение или не истечет время входа. По умолчанию период ожидания входа составляет 15 секунд. Рекомендуется устанавливать значение интервала времени ожидания не менее 5 секунд. Задание меньшего интервала времени ожидания может препятствовать успешному выполнению любых попыток соединения.

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

8%, 8%, 16%, 16%, 24%, 24%, 32%, 32%

Время повтора рассчитывается при помощи следующей формулы:

RetryTime**=PreviousRetryTime+(** 0,08 *LoginTimeout)

где PreviousRetryTime изначально равно 0.

Например, при использовании времени ожидания входа 15 секунд LoginTimeout = 15. В этом случае время повтора, назначенное на первые три цикла, будет следующим:

Цикл

Вычисление RetryTime

Время повтора на попытку

1

0 +(0.08 * 15)

1,2 секунды

2

1.2 +(0.08 * 15)

2,4 секунды

3

2.4 +(0.08 * 15)

3,6 секунды

4

3.6 +(0.08 * 15)

4,8 секунды

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

Максимальная задержка перед повтором при 15-секундном времени ожидании входа

Для времени ожидания периода входа, установленного по умолчанию, максимальное время, назначенное на первые три цикла попыток соединения, составляет 14,4 секунды. Если бы каждая попытка использовала все свое назначенное время, то оставалось бы всего 0,6 секунды до истечения времени входа. В этом случае четвертый цикл будет сокращен, допуская только последнюю быструю попытку соединения с использованием имени исходного участника. Однако попытка соединения может не удаться за время повтора, меньше назначенного, особенно в последующих циклах. Например, возникновение ошибки сети может привести к прекращению попытки до истечения времени повтора. Если предыдущие попытки не удались из-за ошибки сети, для четвертого и, возможно, дополнительных циклов будет доступно дополнительное время.

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

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

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

Задержки повторов во время перехода на другой ресурс

Если клиент пытается подключиться к участнику, переходящему на другой ресурс, участник немедленно отвечает, что он недоступен. В этом случае каждый цикл попыток соединения будет значительно короче назначенного времени повтора. Это означает, что до истечения времени входа может возникнуть множество циклов попыток подключения. Чтобы избежать перегрузки участников быстрыми сериями попыток соединения во время перехода на другой ресурс, поставщик доступа к данным добавляет краткую задержку повтора после каждого цикла повтора. Продолжительность заданной задержки повтора определяется алгоритмом задержки повтора. После первого цикла задержка составляет 100 миллисекунд. После каждых трех последующих циклов задержка повтора удваивается до 200, 400, и 800. Для всех последующих циклов задержка повтора составляет 1 секунду, вплоть до успешного выполнения попытки соединения или истечения времени.

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

Если экземпляр сервера остановлен, запрос на подключение прекращается немедленно.

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

Алгоритм «повтор-задержка»