ロールの切り替え中に、データベース ミラーリングがサービスを利用しなくなる時間は、ロールの切り替えの種類とロールの切り替えの原因によって異なります。
自動フェールオーバーの場合、タイム サービスに影響する 2 つの要因が中断されます。ミラー サーバーがプリンシパル サーバー インスタンスが失敗したことを認識するのに必要な時間、つまりエラー検出、およびデータベースのフェールオーバーに必要な時間 (フェールオーバー時間) です。
強制サービス操作の場合、障害が発生しても、障害の検出と対応は人間の応答性に依存します。 ただし、サービスの中断の可能性を見積もる場合は、強制サービス コマンドの発行後にミラー サーバーがロールを切り替える時間を見積もる必要があります。
注
一部の種類のエラーなど、特定の条件を検出するために必要な時間を短縮するために、それらの条件のアラートを定義できます。
手動フェールオーバーの場合、フェールオーバー コマンドの発行後にデータベースのフェールオーバーに必要な時間だけです。
エラー検出
システムがエラーに気付く時間は、エラーの種類によって異なります。たとえば、ネットワーク エラーはほぼ瞬時に発生しますが、応答していないサーバーに気付いた場合は 10 秒かかります (既定のタイムアウト)。
データベース ミラーリング セッション中にエラーが発生する可能性があるエラーと、自動フェールオーバーを使用した高い安全性モードでのタイムアウト検出については、「 データベース ミラーリング中に発生する可能性のあるエラー」を参照してください。
フェールオーバー時間
フェールオーバー時間は、主に、以前のミラー サーバーが再実行キューに残っているログをロールフォワードするために必要な時間と、短時間の追加時間で構成されます (ミラー サーバーがログ レコードを処理する方法の詳細については、 データベース ミラーリング (SQL Server) を参照してください)。 フェールオーバー時間の見積もりについては、このトピックで後述する「フェールオーバー再実行率の見積もり」を参照してください。
重要
インデックスまたはテーブルが作成されて変更されたトランザクション中にフェールオーバーが発生した場合、フェールオーバーに通常よりも時間がかかる場合があります。 たとえば、次の一連の操作中にフェールオーバーすると、フェールオーバー時間が長くなる可能性があります。これには、テーブルに対する BEGIN TRANSACTION、テーブルに対する CREATE INDEX、そして SELECT INTO テーブルへの操作が含まれます。 このようなトランザクション中にフェールオーバー時間が増加する可能性は、COMMIT TRANSACTION ステートメントまたは ROLLBACK TRANSACTION ステートメントで完了するまで残ります。
リドゥキュー
データベースをロールフォワードするには、ミラー サーバーの再実行キューに現在存在するログ レコードを適用する必要があります。 再実行キューは、ミラー サーバー上のディスクに書き込まれたが、ミラー データベースでまだロールフォワードされていないログ レコードで構成されます。
データベースのフェールオーバー時間は、ミラー サーバーが再実行キューのログをロールフォワードできる速度によって異なります。これは、主にシステム ハードウェアと現在の作業負荷によって決まります。 プリンシパル データベースがビジー状態になり、プリンシパル サーバーがログをミラー サーバーに送信する時間が、ログをロールフォワードするよりもはるかに高速になる可能性があります。 この状況では、ミラー サーバーが再実行キューのログをロールフォワードする間、フェールオーバーにかなりの時間がかかる場合があります。 再実行キューの現在のサイズを確認するには、データベース ミラーリング パフォーマンス オブジェクトの Redo Queue カウンターを使用します。 詳細については、「 SQL Server、データベース ミラーリング オブジェクト」を参照してください。
フェールオーバー再実行率の見積もり
実稼働データベースのテスト コピーを使用して、ログ レコードのロールフォワードに必要な時間 ( 再実行率) を測定できます。
フェールオーバー中のロールフォワード時間を推定する方法は、再実行フェーズ中にミラー サーバーが使用するスレッドの数によって異なります。 スレッドの数は、次によって異なります。
SQL Server Standard では、ミラー サーバーは常に 1 つのスレッドを使用してデータベースをロールフォワードします。
SQL Server Enterprise では、CPU が 5 つ未満のコンピューター上のミラー サーバーでも、1 つのスレッドのみが使用されます。 5 つ以上の CPU を使用すると、ミラー サーバーはフェールオーバー中に複数のスレッド間でロールフォワード操作を分散します ( これは並列再実行と呼ばれます)。 並列再実行は、4 つの CPU ごとに 1 つのスレッドを使用するように最適化されています。
Single-Threaded再実行率の見積もり
シングル スレッド再実行の場合、フェールオーバー中にミラー データベースをロールフォワードするには、ログ バックアップの復元に同じ量のログをロールフォワードするのにかかる時間とほぼ同じ時間がかかります。 フェールオーバー時間を見積もるために、ミラーリングを実行する環境にテスト データベースを作成します。 次に、実稼働データベースからログ バックアップを作成します。 そのログ バックアップの再実行率を測定するには、NORECOVERY を使用してログ バックアップをテスト データベースに復元するのにかかる時間です。
ミラー サーバーの再実行率がわかったら、( Redo Queue パフォーマンス カウンターで測定される) ミラーで再実行される現在のログの量を再実行率で割ることで、特定の時点でデータベースをフェールオーバーする時間を見積もることができます。 通常の状況では、ミラー サーバーがプリンシパルからの負荷に追いつくことができる場合、 再実行キュー は小さいか 0 に近く、フェールオーバーには数秒しかかかりません。
並列やり直し率の推定
SQL Server Enterprise では、並列再実行は 4 つの CPU ごとに 1 つのスレッドを使用するように最適化されています。 並列再実行のロールフォワード時間を見積もるために、テスト データベースよりも実行中のテスト システムにアクセスする方が正確です。 ミラー サーバーでの再実行キューの監視中に、プリンシパル サーバーの負荷を増やします。 通常の操作では、再実行キューは 0 に近い状態です。 Redo キューが継続的に増加し始めるまで、プリンシパル サーバーの負荷を増やします。その後、システムは最大再実行レートになり、この時点の Redo Bytes/sec パフォーマンス カウンターは最大再実行レートを表します。 詳細については、「 SQL Server、データベース ミラーリング オブジェクト」を参照してください。
自動フェールオーバー中のサービス中断の見積もり
次の図は、エラー検出とフェールオーバー時間が、 Partner_Bでの自動フェールオーバーの完了に必要な全体的な時間にどのように影響するかを示しています。 フェールオーバーには、データベースをロールフォワードする時間 (再実行フェーズ) に加えて、データベースをオンラインにするには少しの時間が必要です。 コミットされていないトランザクションのロールバックを伴う元に戻すフェーズは、新しいプリンシパル データベースがオンラインになった後に発生し、フェールオーバー後も続行されます。 データベースは元に戻すフェーズ中に使用できます。
こちらもご覧ください
データベース ミラーリング セッション中のデータベース ミラーリング操作モードの役割の切り替え (SQL Server)データベース ミラーリングの監視 (SQL Server)