共用方式為


連接重試演算法 (TCP/IP 連接)

就 TCP/IP 連接而言,如果用戶端正在執行 Microsoft Windows XP 或更新版本,則當兩個夥伴名稱都位於快取中時,資料存取提供者就會遵守連接重試演算法。這在建立工作階段的初始連接以及失去已建立連接之後重新連接的情況都適用。一旦開啟連接後,完成預先登入和登入步驟就會需要額外時間。

[!附註]

開啟連接所用的時間可能會由於外部因素而超過重試時間,這些因素包括 DNS 查閱速度很慢、網域控制站/Kerberos 金鑰發佈中心 (KDC) 速度很慢、連絡 SQL Server Browser 所用的時間以及網路壅塞等。這些外部因素可能會讓用戶端無法連接至鏡像資料庫。此外,外部因素也會導致開啟連接所用的時間比分配的重試時間要長。如需針對初始夥伴的連接嘗試略過 DNS 和 SQL Server Browser 的詳細資訊,請參閱<建立資料庫鏡像工作階段的初始連接>。

如果連接嘗試失敗或在成功之前重試時間過期,資料存取提供者就會嘗試其他夥伴。如果在此時間點以前未開啟連接,提供者就會輪流嘗試初始和容錯移轉夥伴名稱,直到開啟連接或登入期限逾時為止。預設登入逾時期限是 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 秒。

重試延遲演算法