接続再試行アルゴリズム (TCP/IP 接続用)
クライアントで Microsoft Windows XP 以降が実行されている場合の TCP/IP 接続では、両方のパートナー名がキャッシュ内に存在すると、データ アクセス プロバイダは接続再試行アルゴリズムに従います。これは、セッションに初めて接続する場合にも、確立した接続が切断された後に再接続する場合にも当てはまります。接続を開いた後の場合、ログイン前およびログイン時の手順を完了するのにさらに時間がかかります。
注意 |
---|
接続を開くときにかかる時間は、外部要因が原因で再試行時間を超える場合があります。外部要因には、速度の遅い DNS 参照、処理速度の遅いドメイン コントローラや Kerberos キー配布センター (KDC)、SQL Server Browser への接続にかかる時間、ネットワークの混雑などがあります。このような外部要因により、クライアントはミラー化されたデータベースに接続できなくなる場合があります。また、接続を開くとき、割り当てられた再試行時間より長い時間がかかる場合もあります。イニシャル パートナーへの接続試行時の DNS および SQL Server Browser のバイパスについては、「データベース ミラーリング セッションへの最初の接続」を参照してください。 |
接続試行が失敗したり、接続試行が成功する前に再試行時間がタイムアウトした場合、データ アクセス プロバイダは他のパートナーを使用します。この時点までに接続が開かれていない場合は、接続が開かれるかログイン期間がタイムアウトするまで、プロバイダはイニシャル パートナー名とフェールオーバー パートナー名を交互に使用します。既定のログイン タイムアウト期間は 15 秒です。ログイン タイムアウト期間は 5 秒以上にすることをお勧めします。タイムアウト期間を 5 秒未満にすると、接続試行が成功しない場合があります。
再試行時間は、ログイン タイムアウト期間の比率で決まります。接続試行の再試行時間は、連続する各ラウンドでラウンドごとに長くなります。最初のラウンドでは、2 回の接続試行それぞれの再試行時間は、合計ログイン タイムアウト期間の 8% です。その後に続く各ラウンドでは、再試行アルゴリズムによって、最大再試行時間が一定の比率で増加します。したがって、最初の 8 回の接続試行の再試行時間は次のようになります。
8%, 8%, 16%, 16%, 24%, 24%, 32%, 32%
再試行時間は、次の式を使用して計算されます。
RetryTime**=PreviousRetryTime+(** 0.08 *LoginTimeout)
ここでは、PreviousRetryTime の初期値は 0 です。
たとえば、15 秒という既定のログイン タイムアウト期間を使用すると、LoginTimeout = 15 となります。この場合、最初の 3 ラウンドに割り当てられる再試行時間は次のようになります。
ラウンド |
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 秒 |
次の図では、連続する接続試行のそれぞれがタイムアウトする再試行時間を示しています。
既定のログイン タイムアウト期間に対して、接続試行の最初の 3 ラウンドに割り当てられた最大時間は 14.4 秒です。各接続試行で割り当てられた時間をすべて使用してしまった場合、ログイン期間がタイムアウトするまでに 0.6 秒しか残っていません。その場合、4 ラウンド目は短縮されるので、最後は、イニシャル パートナー名を使用した簡単な接続試行しか行うことができません。ただし、特に後半のラウンドでは、割り当てられた再試行時間が経過しないうちに接続試行が失敗する場合があります。たとえば、ネットワーク エラーが発生すると、再試行時間がタイムアウトする前に、試行が終了する場合があります。初期の接続試行がネットワーク エラーによって失敗すると、4 ラウンド目とおそらくは追加のラウンドで、使用できる時間が追加されることがあります。
接続試行に失敗するもう 1 つの原因として、サーバー インスタンスがそのデータベースをフェールオーバーしている場合に発生するような、非アクティブなサーバー インスタンスがあります。この場合、クライアントが短時間の連続的な接続試行によってパートナーに負荷をかけ過ぎないように、再試行間隔が指定されます。
注意 |
---|
両方のパートナー名が使用できる場合、ログイン タイムアウト期間に制限がないと、クライアントは、イニシャル パートナー名とフェールオーバー パートナー名を交互に使いながら、無制限にサーバーへの再接続を試みます。 |
フェールオーバー中の再試行間隔
フェールオーバーしているパートナーにクライアントが接続を試みると、パートナーはすぐに非アクティブであることを応答します。この場合、接続試行の各ラウンドは、割り当てられた再試行時間よりかなり短くなります。つまり、接続試行の多くのラウンドは、ログイン期間がタイムアウトする前に発生する場合があります。フェールオーバー中に短時間で連続した接続試行を行ってパートナーに負荷がかかり過ぎるのを回避するために、データ アクセス プロバイダは、各再試行サイクルの後に短い再試行間隔を追加します。指定された再試行間隔の長さは、再試行間隔アルゴリズムによって決まります。最初のラウンドの後の間隔は 100 ミリ秒です。それ以降の再試行間隔は 3 ラウンドごとに、200、400、800 と倍になっていきます。その後のすべてのラウンドでは、接続試行が成功するかタイムアウトするまで再試行間隔は 1 秒になります。
注意 |
---|
サーバー インスタンスが停止すると、接続要求はすぐに失敗します。 |
次の図では、手動フェールオーバー中の再試行間隔による接続試行への影響を示しています。ここでは、パートナーは役割を交換しています。ログイン タイムアウト期間は 15 秒です。