SE の雑記

SQL Server の情報をメインに Microsoft 製品の勉強内容を日々投稿

AlwaysOn 可用性グループのデータ復旧に影響する 2 種類のキュー

leave a comment

AlwaysOn 可用性グループ (HADR) はプライマリレプリカとセカンダリレプリカ間でデータの同期を行い、データの冗長化をすることができます。

このデータ同期に影響をする 2 種類のキューについて軽くまとめてみたいと思います。

関連する技術情報としては以下の情報になります。
sys.dm_hadr_database_replica_states (Transact-SQL)
SQL Server、Database Replica
AlwaysOn ダッシュボードの使用 (SQL Server Management Studio)

■2 種類のキュー


AlwaysOn 可用性グループの基本的な仕組みは以下のようになっています。
image

ログプールに蓄えられたログレコードをセカンダリに送信し、トランザクションログに書き込まれたレコードをセカンダリでロールフォワードするというのが基本的な動作になるのですが、この一連の流れの中で 2 種類のキューがあります。

それが ログ送信キュー (Log Send Queue) と 再実行キュー (Recovery Queue) になります。
ログ送信キューはプライマリからセカンダリに送信が行われていないデータ、再実行キューはセカンダリのトランザクションログには書き込みが行われているがデータファイルには書き込みが行われていないデータの蓄積状況を表す情報となります。

ログ送信キューが高い値を示している場合は、プライマリ / セカンダリ間のデータ転送、再実行キューが高い値を示している場合はセカンダリでの REDO 処理で処理の待ちが発生していることになります。
そのため、ログ送信キューが高い場合にはセカンダリでフェールオーバーした際のデータ損失、再実行キューが高い場合にはセカンダリにフェールオーバーした際にデータベースが使用できるようになるまでの時間が長くなります。

なお、ログ送信キューに関しては同期モードを設定していても 0 以外の値が返ってくるかと思います。

 

■キューの状態の取得方法


キューにどれだけのデータが滞留しているかを見るための方法ですが、最初に紹介した技術文書の 3 種類の方法があります。
DMV / パフォーマンスモニター / 可用性グループのダッシュボード のいずれかを使用することでキューの状態を取得することができます。

この中でパフォーマンスモニターの情報に関しては、セカンダリでないと値が取得できない (プライマリでは常に 0 を返す) ので注意が必要となります。

また、ダッシュボードではキューの情報はデフォルトでは表示されていません。
image

ダッシュボードで表示するためには表示列を追加する必要があります。
# 列の見出しを右クリックすることで表示列を変更することができます。
image

可用性レプリカ / グループともに表示列を変更することができますので、いくつかの情報は追加しておくと便利だと思います。
# というよりはデフォルトの情報では同期状況を把握するための項目が足りていないので追加しておいたほうが良いとかと。
image

こちらの画像は非同期モードを使用している場合の情報になるのですが、実行されているトランザクション量に対してプライマリの性能とネットワーク帯域のバランスが取れているので、データ損失の可能性があるデータが 1 秒程度に抑えられています。
# 今回の環境であれば、データ同期のバランスが取れているのでデータの取得タイミングによっては推定データ損失時間が 0 秒 (なし) になることもあります。

この環境に対してプライマリ / セカンダリ間の帯域に 400ms の遅延を発生させてみた際のデータ同期状況がこちらになります。
image

先ほどまでは 1 秒あるかどうかの推定データ損失時間が処理の時間経過とともに蓄積されていき、画像を取得したタイミングでは 1 分程度の値を示しています。

この状態ですと、時間の経過とともにログ送信キューと推定データ損失時間が上昇をしていきます。
営業時間外にトランザクションが低くなり送信キューがなくなるのであれば、あるタイミングでデータ損失が最小限に抑えられると思いますが、恒常的にキューが蓄積しデータ損失時間が上昇を続ける場合には、データの同期が落ち着くタイミングがありませんので、トランザクション量と環境のバランスが取れていないことになるかと思います。

非同期モードの場合、データ損失が多少発生するのは仕方がないと思いますが、実際にどの程度の損失が発生するのかは負荷をシミュレートまたは、トライアル運用等で実機のデータをパフォーマンスモニターで取得して、各キューがどのような波形を描くかを確認しておいたほうが良いかと思います。

Share

Written by Masayuki.Ozawa

8月 20th, 2012 at 8:49 am

Leave a Reply