SE の雑記

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

AlwaysOn Availability Gruops のデータ同期の仕組みを調べてみる その 3

leave a comment

今回はセカンダリが停止している状態のログの連携について少しまとめていきたいと思います。

■ログの連携状態を確認する


AlwaysOn は複数のセカンダリを持つことが可能です。
image

それぞれのセカンダリに対してどこまでログブロックが連携されているかは [sys.dm_hadr_database_replica_states] で確認することができます。
[last~] 関連の項目を調べると、どこまで連携されているかが確認できます。

SELECT
    replica_server_name,
    DB_NAME(DB_ID()) AS database_name,
    synchronization_state_desc,
    suspend_reason,
    recovery_lsn,
    truncation_lsn,
    last_sent_lsn,
    last_sent_time,
    last_received_time,
    last_hardened_lsn,
    last_hardened_time,
    last_redone_lsn,
    last_redone_time,
    end_of_log,
    last_commit_lsn,
    last_commit_time
FROM
    sys.dm_hadr_database_replica_states AS dhdrs
    LEFT JOIN
    sys.availability_replicas AS ar
    ON
    dhdrs.replica_id = ar.replica_id
    AND
    dhdrs.group_id = ar.group_id
ORDER BY
    replica_server_name

現在は、2008R2-SQL11-03] はサービスを停止した状態にしています。
そのため [last~] の項目が同期をされている [2008R2-SQL-02] が異なっている状態となります。
# [2008R2-SQL11-01] がプライマリとなっています。
image

それでは [2008R2-SQL11-03] を開始してみます。
[last_hadrended_lsn] がすべてのサーバーで同一になっているのが確認できますね。
image

ログの連携ですが、基本的には以下のような流れになります。
image

サーバーが停止している状態では、連携ができません。
image

ログプールはメモリ上のデータですのでいつまでデータが保持されているかの保証はないですよね。
セカンダリが復帰した場合、ログの連携はどのように行われるかというと、ログファイルからログプールにデータが読み込まれそこから連携がされます。

以下のデータが、セカンダリを復旧する前のプライマリのログファイルの読み込み状況になります。
image

それでは、セカンダリを復旧させてみます。
セカンダリを復旧させたタイミングでプライマリのログファイルの読み込みが増加していることが確認できます。
image

こちらはパフォーマンスモニタの情報になるのですが、 [Log Pool Disk Reads/sec] が表れているのが確認できますね。
このカウンタはログディスクを介して、ログプールに読み込みが発生した際に上昇するカウンタですのでディスクから読み込みが発生しているということがパフォーマンスモニタからも確認することができます。
image

ログプールへのデータ連携ですが、
image

というような経路も用意がされているようですね。

まだ調べていないので見れるかわかっていないのですが、セカンダリ上の REDO スレッドの動きが見れるようでしたら次の投稿でまとめてみたいと思います。

Share

Written by Masayuki.Ozawa

9月 17th, 2011 at 12:07 pm

Posted in SQL Server

Tagged with , ,

Leave a Reply