Aurora PostgreSQL 論理レプリケーションの書き込みスルーキャッシュと論理スロットのモニタリング - Amazon Aurora

Aurora PostgreSQL 論理レプリケーションの書き込みスルーキャッシュと論理スロットのモニタリング

論理レプリケーションの書き込みスルーキャッシュをモニタリングし、論理スロットを管理して、Aurora PostgreSQL DB クラスターのパフォーマンスを向上させます。以下に、書き込みスルーキャッシュと論理スロットの詳細を示します。

Aurora PostgreSQL 論理レプリケーション書き込みスルーキャッシュのモニタリング

デフォルトでは、Aurora PostgreSQL バージョン 14.5、13.8、12.12、11.17 以降は、ライトスルーキャッシュを使用して論理レプリケーションのパフォーマンスを向上させます。ライトスルーキャッシュがない場合、Aurora PostgreSQL はネイティブ PostgreSQL 論理レプリケーションプロセスの実装に Aurora ストレージレイヤーを使用します。そのためには、WAL データをストレージに書き込み、ストレージからデータを読み戻してデコードし、ターゲット (サブスクライバー) に送信 (複製) します。このため、Aurora PostgreSQL DB クラスターの論理レプリケーション中にボトルネックが発生する可能性があります。

書き込みスルーキャッシュは、Aurora ストレージレイヤーへの依存を最小限に抑えます。このレイヤーに対して書き込みと読み取りを一貫して行う代わりに、Aurora PostgreSQL はバッファを使用して論理 WAL ストリームをキャッシュしてレプリケーションプロセスで使用し、ディスクにアクセスする必要性を減らします。このバッファは、論理レプリケーションで使用する PostgreSQL ネイティブキャッシュであり、Aurora PostgreSQL DB クラスターのパラメータで rds.logical_wal_cache として識別されます。

Aurora PostgreSQL DB クラスターで論理レプリケーションを使用する場合 (ライトスルーキャッシュをサポートするバージョンの場合)、キャッシュヒット率をモニタリングして、ユースケースでの機能を確認できます。そのためには、次の例に示すように、psql を使用して Aurora PostgreSQL DB クラスターの書き込みインスタンスに接続し、次に Aurora 関数 aurora_stat_logical_wal_cache を使用します。

SELECT * FROM aurora_stat_logical_wal_cache();

関数は、次のような出力を返します。

name | active_pid | cache_hit | cache_miss | blks_read | hit_rate | last_reset_timestamp -----------+------------+-----------+------------+-----------+----------+-------------- test_slot1 | 79183 | 24 | 0 | 24 | 100.00% | 2022-08-05 17:39... test_slot2 | | 1 | 0 | 1 | 100.00% | 2022-08-05 17:34... (2 rows)

last_reset_timestamp 値は読みやすいように短くされています。この関数の詳細については、「aurora_stat_logical_wal_cache」を参照してください。

Aurora PostgreSQL には、ライトスルーキャッシュをモニタリングするための次の 2 つの関数が用意されています。

  • aurora_stat_logical_wal_cache 関数 - リファレンスドキュメントについては、「aurora_stat_logical_wal_cache」を参照してください。

  • aurora_stat_reset_wal_cache 関数 - リファレンスドキュメントについては、「aurora_stat_reset_wal_cache」を参照してください。

自動調整された WAL キャッシュサイズがワークロードに十分でないと判明した場合は、rds.logical_wal_cache の値を手動で変更できます。以下の点を考慮します。

  • rds.logical_replication パラメータが無効になっている場合、rds.logical_wal_cache はゼロ (0) に設定されます。

  • rds.logical_replication パラメータが有効になっている場合、rds.logical_wal_cache のデフォルト値は 16 MB です。

  • rds.logical_wal_cache パラメータは静的であるため、変更を有効にするには、データベースインスタンスを再起動する必要があります。このパラメータは、8 Kb ブロック単位で定義されます。32 Kb 未満の正の値は 32 Kb として扱われることに注意してください。wal_buffers の詳細については、PostgreSQL ドキュメントの「Write Ahead Log」を参照してください。

Aurora PostgreSQL の論理スロットの管理

ストリーミングアクティビティは、pg_replication_origin_status ビューにキャプチャされます。このビューの内容を確認するには、次に示す pg_show_replication_origin_status() 関数が使用できます。

SELECT * FROM pg_show_replication_origin_status();

次の SQL クエリを使用すると、論理スロットのリストを取得できます。

SELECT * FROM pg_replication_slots;

論理スロットを削除するには、次のコマンドに示すように、スロットの名前を指定して pg_drop_replication_slot を使用します。

SELECT pg_drop_replication_slot('test_slot');