sys.dm_hadr_database_replica_states
システムテーブルのさまざまな時間列の意味を理解しようとしています。
3つのノードのAlways On可用性グループがあり、2つのノードが同期し、1つのノードが非同期です。 レポートに非同期ノードを使用し、プライマリレプリカと非同期レプリカの間の遅延を計算する正確な方法を見つけたいと考えています。
以下はクエリのスナップショットです。
select synchronization_state_desc,
is_primary_replica,
last_sent_time,
last_received_time,
last_hardened_time,
last_redone_time,
last_commit_time
from sys.dm_hadr_database_replica_states DRS
where database_id = db_id('DBname')
質問を絞り込むために投稿を編集しました
データが非同期ノードに表示されるまでにかかる実際の遅延を見つける必要がある場合、どの列を使用しますか?
手始めに、これが Microsoft Docs Page です。
余談ですが、純粋に私の答えを理解できるように、可用性グループのメカニズムについて少し読んでおくことをお勧めします。 ( Microsoft Docsページ )
質問への回答については、RDBMSに関する質問の場合と同様に、状況によって異なります。
この場合は、「...データが表示される」という意味によって異なります
質問の列を見てみましょう:
また、参照しているシステムDMVがデータベースレベルであることにも注意してください。
この時刻は、PRIMARYがログブロックを使用可能なセカンダリに最後に送信した時刻を示します。これは、データ同期プロセスの開始です。
これは、セカンダリが最後にログブロックを受信した時間を示します。
これは、セカンダリが受信したログブロックデータをディスクに最後にキャッシュした時間を示します。
これは、最後のLSNがターゲットデータベースでやり直された時刻です。
これは、最後のコミットレコードがやり直され、プライマリに報告された時間です。
上記のうち、セカンダリシステムへのデータのさまざまなエントリポイントがあります。
データは最初にlast_received_timeでサーバーにメモリに入ります
データは最初にlast_hardened_timeにディスク上のサーバーに入ります
データは最初にlast_redone_timeにデータベースデータファイルに入ります
last_commit_timeに、データが最初にコミットされ、クエリによる読み取り(奇妙なNOLOCK状況以外)に利用できるようになります。
あなたの質問に対する答えは、4つの概念のうちの後者だと思います。 SECONDARYとPRIMARYの間のデータの送信時間のため、この列の時間にはsmallオーバーヘッドがあります。ただし、これはデータスループットの速度を決定するための計算では重要ではない可能性があります。