pgactive メンバー間のレプリケーションラグの測定
次のクエリを使用して、pgactive
メンバー間のレプリケーションラグを表示できます。全体像を把握するには、すべての pgactive
ノードでこのクエリを実行します。
app=> SELECT * FROM pgactive.pgactive_get_replication_lag_info();
│-[ RECORD 1 ]--------+---------------------------------------------
│node_name | node2-app
│node_sysid | 7481018224801653637
│application_name | pgactive:7481018224801653637:send
│slot_name | pgactive_16385_7481018224801653637_0_16385__
│active | t
│active_pid | 783486
│pending_wal_decoding | 0
│pending_wal_to_apply | 0
│restart_lsn | 0/2108150
│confirmed_flush_lsn | 0/2154690
│sent_lsn | 0/2154690
│write_lsn | 0/2154690
│flush_lsn | 0/2154690
│replay_lsn | 0/2154690
│-[ RECORD 2 ]--------+---------------------------------------------
│node_name | node1-app
│node_sysid | 7481018033434600853
│application_name | pgactive:7481018033434600853:send
│slot_name | pgactive_16385_7481018033434600853_0_16385__
│active | t
│active_pid | 783488
│pending_wal_decoding | 0
│pending_wal_to_apply | 0
│restart_lsn | 0/20F5AD0
│confirmed_flush_lsn | 0/214EF68
│sent_lsn | 0/214EF68
│write_lsn | 0/214EF68
│flush_lsn | 0/214EF68
│replay_lsn | 0/214EF68
少なくとも次の診断をモニタリングします。
- ACTIVE
-
アクティブが false の場合にアラートを設定します。これは、スロットが現在使用されていない (サブスクライバーインスタンスがパブリッシャーから切断された) ことを示します。
- Pending_wal_decoding
-
PostgreSQL の論理レプリケーションでは、WAL ファイルはバイナリ形式で保存されます。パブリッシャーは、これらの WAL の変更をデコードし、論理的な変更 (挿入、更新、削除オペレーションなど) に変換する必要があります。
pending_wal_decoding メトリクスは、パブリッシャー側でデコードを待っている WAL ファイルの数を示します。
この数は、次の要因により増加する可能性があります。
-
サブスクライバーが接続されていない場合、アクティブステータスは false になり、pending_wal_decoding は増加する
-
スロットはアクティブだが、パブリッシャーは WAL の変更の量に対応できない
-
- pending_wal_to_apply
-
pending_wal_apply メトリクスは、サブスクライバー側で適用を待っている WAL ファイルの数を示します。
いくつかの要因により、サブスクライバーが変更を適用できなくなり、ディスクがいっぱいになるシナリオが発生する可能性があります。
-
スキーマの違い - サンプルという名前のテーブルの WAL ストリームに変更があっても、そのテーブルがサブスクライバー側に存在しない場合など
-
プライマリキー列の値が更新された場合
-
セカンダリの一意のインデックスはデータの相違を引き起こす可能性がある
-