sys.dm_hadr_database_replica_states (Transact-SQL)
適用対象: SQL Server Azure SQL Managed Instance
SQL Server のローカル インスタンスが可用性レプリカをホストしている AlwaysOn 可用性グループに参加しているデータベースごとに 1 行のデータを返します。 この動的管理ビューは、プライマリ レプリカとセカンダリ レプリカの両方の状態情報を公開します。 セカンダリ レプリカの場合、このビューはサーバー インスタンス上のセカンダリ データベースごとに 1 行のデータを返します。 プライマリ レプリカでは、このビューは各プライマリ データベースの行と、対応するセカンダリ データベースの追加の行を返します。
重要
アクションと上位レベルの状態によっては、データベースの状態情報が使用できないか、古くなっている可能性があります。 また、値はローカルに関連しているものに限られます。 たとえば、プライマリ レプリカでは、 last_hardened_lsn
列の値には、プライマリ レプリカで現在使用できる特定のセカンダリ データベースに関する情報が反映され、セカンダリ レプリカが現在持っている可能性がある実際のセキュリティ強化されたログ シーケンス番号 (LSN) は反映されません。
列名 | データ型 | 説明 (プライマリ レプリカ上) |
---|---|---|
database_id |
int | SQL Server のインスタンス内で一意な、データベースの識別子。 これは、 sys.databases カタログ ビューに表示される値と同じです。 |
group_id |
uniqueidentifier | データベースが属する可用性グループの識別子。 |
replica_id |
uniqueidentifier | 可用性グループ内の可用性レプリカの識別子。 |
group_database_id |
uniqueidentifier | 可用性グループ内のデータベースの識別子。 この識別子は、このデータベースが参加しているすべてのレプリカで同じです。 |
is_local |
bit | 可用性データベースがローカルであるかどうか。次のいずれかになります。0 = データベースは SQL Server インスタンスに対してローカルではありません。1 = データベースはサーバー インスタンスに対してローカルです。 |
is_primary_replica |
bit | レプリカがプライマリの場合は 1 、セカンダリ レプリカの場合は 0 を返します。適用対象: SQL Server 2014 (12.x) 以降のバージョン。 |
synchronization_state |
tinyint | データ移動状態。次のいずれかの値。0 = 同期していません。 プライマリ データベースの場合、データベースが対応するセカンダリ データベースとトランザクション ログを同期する準備ができていないことを示します。 セカンダリ データベースの場合、この値は、接続の問題が原因でデータベースがログ同期を開始していない、中断中、または起動時またはロールの切り替え中に遷移状態が発生していることを示します。1 = 同期中。 プライマリ データベースの場合、データベースがセカンダリ データベースからのスキャン要求を受け入れる準備ができていることを示します。 セカンダリ データベースについては、そのデータベースのアクティブなデータ移動が行われていることを示します。2 = 同期済み。 プライマリ データベースには、SYNCHRONIZING の代わりにSYNCHRONIZED が表示されます。 同期コミットのセカンダリ データベースでは、データベース レプリカでフェールオーバーの準備ができていることをローカル キャッシュが示している場合、およびデータベース レプリカが同期中である場合、"同期済み" と表示されます。3 = 元に戻す。 セカンダリ データベースがプライマリ データベースからページをアクティブに取得している場合の元に戻すプロセスのフェーズを示します。注意: セカンダリ レプリカ上のデータベースが REVERTING 状態にある場合、セカンダリ レプリカへのフェールオーバーを強制すると、データベースはプライマリ データベースとして起動できない状態になります。 データベースをセカンダリ データベースとして再接続する必要があるか、ログ バックアップから新しいログ レコードを適用する必要があります。4 = 初期化中。 セカンダリ データベースが元に戻す LSN からの遅れを取り戻すために必要なトランザクション ログがセカンダリ レプリカに配布され、書き込まれている場合の元に戻すフェーズを示します。注意: セカンダリ レプリカ上のデータベースが INITIALIZING 状態にある場合、セカンダリ レプリカへのフェールオーバーを強制すると、データベースはプライマリ データベースとして起動できない状態になります。 データベースをセカンダリ データベースとして再接続する必要があるか、ログ バックアップから新しいログ レコードを適用する必要があります。 |
synchronization_state_desc |
nvarchar(60) | データ移動の状態の説明。次のいずれかになります。NOT SYNCHRONIZING SYNCHRONIZING SYNCHRONIZED REVERTING INITIALIZING |
is_commit_participant |
bit | 0 = トランザクション コミットは、このデータベースに対して同期されません。1 = トランザクション コミットは、このデータベースに対して同期されます。非同期コミット可用性レプリカ上のデータベースの場合、この値は常に 0 。同期コミット可用性レプリカ上のデータベースの場合、この値はプライマリ データベースでのみ正確です。 |
synchronization_health |
tinyint | 可用性レプリカ上の可用性グループに参加しているデータベースの同期状態と、可用性レプリカの可用性モード (同期コミットモードまたは非同期コミット モード) の積集合を反映します。 次のいずれかの値を指定できます。0 = 正常ではありません。 データベースの synchronization_state が 0 (NOT SYNCHRONIZING )。1 = 部分的に正常です。 同期コミット可用性レプリカ上のデータベースは、 synchronization_state が 1 (SYNCHRONIZING ) の場合、部分的に正常であると見なされます。2 = 正常です。 同期コミット可用性レプリカ上のデータベースは、 synchronization_state が 2 (SYNCHRONIZED ) の場合は正常と見なされ、 synchronization_state が 1 (SYNCHRONIZING ) の場合、非同期コミット可用性レプリカ上のデータベースは正常と見なされます。 |
synchronization_health_desc |
nvarchar(60) | 可用性データベースの synchronization_health の説明。NOT_HEALTHY PARTIALLY_HEALTHY HEALTHY |
database_state |
tinyint | 0 = オンライン1 = 復元中2 = 回復中3 = 回復が保留中4 = Suspect5 = 緊急6 = オフライン注: の state 列と同じ sys.databases. |
database_state_desc |
nvarchar(60) | 可用性レプリカの database_state の説明。ONLINE RESTORING RECOVERING RECOVERY_PENDING SUSPECT EMERGENCY OFFLINE 注: の state_desc 列と同じ sys.databases. |
is_suspended |
bit | データベースの状態。次のいずれかになります。0 = 再開済み1 = 中断 |
suspend_reason |
tinyint | データベースが中断されている場合、中断状態の理由は次のいずれかです。0 = ユーザー アクション1 = パートナーからの一時停止2 = やり直し3 = Capture4 = 適用5 = 再起動6 = 元に戻す7 = 再検証8 = セカンダリ レプリカ同期ポイントの計算中のエラー |
suspend_reason_desc |
nvarchar(60) | データベース中断状態の理由の説明。次のいずれかです。SUSPEND_FROM_USER = ユーザーが手動でデータ移動を中断したSUSPEND_FROM_PARTNER = 強制フェールオーバー後にデータベース レプリカが中断されるSUSPEND_FROM_REDO = 再実行フェーズ中にエラーが発生しましたSUSPEND_FROM_APPLY = ログをファイルに書き込むときにエラーが発生しました (エラー ログを参照)SUSPEND_FROM_CAPTURE = プライマリ レプリカのログのキャプチャ中にエラーが発生しましたSUSPEND_FROM_RESTART = データベースが再起動される前にデータベース レプリカが中断されました (エラー ログを参照)SUSPEND_FROM_UNDO = 元に戻すフェーズ中にエラーが発生しました (エラー ログを参照)SUSPEND_FROM_REVALIDATION = 再接続時にログ変更の不一致が検出されました (エラー ログを参照)SUSPEND_FROM_XRF_UPDATE = 共通ログ ポイントが見つかりません (エラー ログを参照) |
recovery_lsn |
numeric(25,0) | プライマリ レプリカの場合、復旧後またはフェールオーバー後、プライマリ データベースが新しいログ レコードを書き込む前のトランザクション ログの末尾。 特定のセカンダリ データベースの場合、この値が現在のセキュリティで強化された LSN (last_hardened_lsn ) より小さい場合、 recovery_lsn は、このセカンダリ データベースを再同期する必要がある (つまり、元に戻して再初期化する) 必要がある値です。 この値が現在の強化された LSN 以上の場合、再同期は不要であり、発生しません。recovery_lsn には、ゼロで埋め込まれたログ ブロック ID が反映されます。 実際の LSN ではありません。 この値の派生方法については、「 LSN 列の値を理解する、この記事の後半を参照してください。 |
truncation_lsn |
numeric(25,0) | プライマリ レプリカでは、プライマリ データベースに対して、対応するすべてのセカンダリ データベースの最小ログ切り捨て LSN が反映されます。 ローカル ログの切り捨てが (バックアップ操作などにより) ブロックされている場合、この LSN はローカル切り捨て LSN を超える可能性があります。 特定のセカンダリ データベースでは、対象となるデータベースの切り捨てポイントが反映されます。 truncation_lsn は、ゼロで埋め込まれたログ ブロック ID を反映します。 実際のログ シーケンス番号ではありません。 |
last_sent_lsn |
numeric(25,0) | プライマリ レプリカに対してクエリを実行すると、セカンダリ レプリカ データベース行ごとに last_sent_lsn が報告されます。 すべてのログ ブロックがプライマリによって送信されたポイントを示すログ ブロック識別子。 これは、最後に送信されたログ ブロックの ID ではなく、送信される次のログ ブロックの ID です。last_sent_lsn は、ゼロで埋め込まれたログ ブロック ID を反映します。 実際のログ シーケンス番号ではありません。 |
last_sent_time |
datetime | プライマリ レプリカに対してクエリを実行すると、セカンダリ レプリカ データベース行ごとに last_sent_time が報告されます。 最後のログ ブロックが送信された時刻。 |
last_received_lsn |
numeric(25,0) | セカンダリ レプリカに対してクエリを実行すると、ローカル セカンダリ レプリカ データベース行の last_received_lsn が報告されます。 このセカンダリ データベースをホストするセカンダリ レプリカによってすべてのログ ブロックが受信されたポイントを識別するログ ブロック ID。last_received_lsn には、ゼロで埋め込まれたログ ブロック ID が反映されます。 実際のログ シーケンス番号ではありません。 |
last_received_time |
datetime | セカンダリ レプリカに対してクエリを実行すると、ローカル セカンダリ レプリカ データベース行の last_received_time が報告されます。 最後に受信したメッセージのログ ブロック ID がセカンダリ レプリカで読み取られた時刻。 |
last_hardened_lsn |
numeric(25,0) | セカンダリ データベースで最後に強化された LSN のログ レコードを含むログ ブロックの先頭。 非同期コミット プライマリ データベース、または現在のポリシーが delay されている同期コミット データベースでは、値は NULL 。 その他の同期コミット プライマリ データベースの場合、 last_hardened_lsn はすべてのセカンダリ データベースで強化された LSN の最小値を示します。注: last_hardened_lsn 、ゼロで埋め込まれたログ ブロック ID が反映されます。 実際のログ シーケンス番号ではありません。 詳細については、この記事で後述する「 LSN 列の値を理解する」を参照してください。 |
last_hardened_time |
datetime | セカンダリ データベースで、最後に強化された LSN (last_hardened_lsn ) のログ ブロック識別子の時刻。 プライマリ データベースの場合、書き込まれた LSN の最小値に対応する時刻が反映されます。 |
last_redone_lsn |
numeric(25,0) | セカンダリ データベースで再実行された最後のログ レコードの実際のログ シーケンス番号。 last_redone_lsn は常にlast_hardened_lsn 未満です。 |
last_redone_time |
datetime | セカンダリ データベースでログ レコードが最後に再実行された時刻。 |
log_send_queue_size |
bigint | セカンダリ データベースに送信されていないプライマリ データベースのログ レコードの数 (KB 単位)。 |
log_send_rate |
bigint | プライマリ レプリカ インスタンスが最後のアクティブ期間中にデータを送信した平均レート (KB/秒)。 |
redo_queue_size |
bigint | まだ再実行されていないセカンダリ レプリカのログ ファイル内のログ レコードの数 (KB 単位)。 |
redo_rate |
bigint | 特定のセカンダリ データベースでログ レコードが再実行される平均レート (KB/秒)。redo_rate は、データベース エンジンの起動以降に再実行されたログ バイトの合計を、再実行がアクティブに実行されていた時間範囲で割ることによって計算されます(経過時間ではなく)。 再実行が継続的に実行されない可能性があるため、結果の値はパフォーマンス カウンターの値とは異なる (高い) Database Replica:Redone Bytes/sec 可能性があります。 |
filestream_send_rate |
bigint | FILESTREAM ファイルがセカンダリ レプリカに出荷される速度を KB/秒で指定します。 |
end_of_log_lsn |
numeric(25,0) | ログ LSN のローカル末尾。 プライマリ データベースとセカンダリ データベースのログ キャッシュ内の最後のログ レコードに対応する実際の LSN。 プライマリ レプリカでは、セカンダリ レプリカがプライマリ レプリカに送信した最新の進行状況メッセージからのログ LSN の末尾がセカンダリ行に反映されます。end_of_log_lsn は、ゼロで埋め込まれたログ ブロック ID を反映します。 実際のログ シーケンス番号ではありません。 詳細については、この記事で後述する「 LSN 列の値を理解する」を参照してください。 |
last_commit_lsn |
numeric(25,0) | トランザクション ログの最終コミット レコードに対応する実際のログ シーケンス番号。 プライマリ データベースの場合、これは処理された最終コミット レコードに対応します。 セカンダリ データベースの行には、セカンダリ レプリカがプライマリ レプリカに送信したログ シーケンス番号が表示されます。 セカンダリ レプリカの場合、これは再実行された最終コミット レコードです。 |
last_commit_time |
datetime | 最終コミット レコードに対応する時刻。 セカンダリ データベースの場合、この時刻はプライマリ データベースと同じになります。 プライマリ レプリカでは、セカンダリ データベースの各行に、セカンダリ データベースをホストするセカンダリ レプリカがプライマリ レプリカに報告した時刻が表示されます。 プライマリ データベース行と特定のセカンダリ データベース行の時間の差は、再実行プロセスがキャッチアップされ、進行状況がセカンダリ レプリカによってプライマリ レプリカに報告されたと仮定して、目標復旧ポイント (RPO) を表します。 |
low_water_mark_for_ghosts |
bigint | プライマリ データベースのゴースト クリーンアップで使用される低ウォーター マークを示す、データベースの単調に増加する数。 この数が時間の経過と同時に増加しない場合は、ゴーストクリーンアップが発生しない可能性があることを意味します。 プライマリ レプリカでは、クリーンアップする非実体行を決定するために、すべての可用性レプリカ (プライマリ レプリカを含む) でこのデータベースのこの列の最小値を使用します。 |
secondary_lag_seconds |
bigint | 同期中にセカンダリ レプリカがプライマリ レプリカの背後にある秒数。 プライマリ レプリカでは、各セカンダリ データベースの同期遅延 (lag) は、セカンダリ レプリカでまだ強化されていないプライマリ レプリカで最も早く強化された LSN が書き込まれた後の秒数として計算されます。 この値は、データ移動が中断された場合に 0 として表示されます。 この値がアクティブなラグを表示するには、データ移動が中断されていない状態である必要があります。適用対象: SQL Server 2016 (13.x) 以降のバージョン。 |
LSN 列の値について
end_of_log_lsn
、last_hardened_lsn
、last_received_lsn
、last_sent_lsn
、recovery_lsn
、truncation_lsn
の列の値は、実際のログ シーケンス番号 (LSN) ではありません。 これらの各値には、0 が埋め込まれたログ ブロック ID が反映されます。
end_of_log_lsn
、 last_hardened_lsn
、および recovery_lsn
はフラッシュ LSN です。 たとえば、 last_hardened_lsn
は、既にディスク上にあるブロックを超える次のブロックの開始を示します。 そのため、LSN が少ない場合、 last_hardened_lsn
の値はディスク上にあります。 この値以上の LSN はフラッシュされません。
sys.dm_hadr_database_replica_states
によって返される LSN 値のうち、last_redone_lsn
のみが実際の LSN です。
アクセス許可
SQL Server 2019 (15.x) 以前のバージョンでは、サーバーに対する VIEW SERVER STATE
アクセス許可が必要です。
SQL Server 2022 (16.x) 以降のバージョンでは、サーバーに対する VIEW SERVER PERFORMANCE STATE
アクセス許可が必要です。