すべてのプロダクト
Search
ドキュメントセンター

ApsaraDB RDS:WALログがPostgreSQLに蓄積される問題のトラブルシューティング

最終更新日:Oct 11, 2024

ピーク時には、PostgreSQLで生成されるWALログの数が非常に多くなります。 WALは、先読みロギングの略です。 チェックポインタプロセスは、定期的に期限切れのWALログを削除します。 ただし、運用環境では、不適切な操作によりWALログが削除されない場合があります。 この場合、大量のストレージが占有されます。 このトピックでは、WALログがプライマリデータベースまたは読み取り専用データベースに蓄積される問題をトラブルシューティングする方法について説明します。

背景情報

WALは、データのセキュリティを確保し、システムの信頼性とパフォーマンスを向上させるためのPostgreSQLの重要なコンポーネントです。 WALは、データの損失を防ぎ、複数の障害が発生した場合でもデータを確実に復元できるようにします。

プライマリデータベースのログ蓄積

WALログがプライマリデータベースに蓄積されている場合、次の側面から問題を特定してトラブルシューティングできます。

非アクティブなレプリケーションスロットまたはコンシューマーからの未報告のLSN

  • レプリケーションスロットは、高可用性とディザスタリカバリを実装するためのPostgreSQLの重要なツールです。 レプリケーションスロットを使用して、WALログの削除を防ぎ、レプリケーションの中断を防ぐことができます。 ただし、レプリケーションスロットが非アクティブの場合、そのスロットに関連付けられているWALログは削除されず、蓄積され続けます。

  • LSNがコンシューマによって適時に報告されない場合、WALログのサイズは増加し続けます。

pg_replication_slotsシステムビューを使用して、LSNなどのレプリケーションスロットに関する情報を表示できます。 たとえば、次のSQL文を使用して、レプリケーションスロットに蓄積されるWALログのサイズを照会できます。 この累積により、プライマリデータベースとセカンダリデータベース間のレプリケーション遅延が発生します。 この場合、蓄積されたWALログを削除する必要があります。

SELECT slot_name, pg_size_pretty(pg_wal_lsn_diff(pg_current_wal_insert_lsn(), restart_lsn)) AS delay_size
FROM pg_replication_slots;

クエリ結果に表示されるサイズがWALログの蓄積数と同じか大きい場合は、ビジネス要件に基づいてレプリケーションスロットを評価して削除します。

不適切なパラメータ設定

wal_keep_segmentswal_keep_size、およびmax_wal_sizeパラメーターの値が大きすぎると、大量のWALログが蓄積されます。 ビジネス要件に基づいて、これらのパラメーターの値を確認および変更します。

VACUUMの嵐と多数の書き込み

ほとんどの場合、VACUUMストームとは、データベースに対して同時に実行される多数の自動または手動のVACUUM操作を指します。 これらの操作が実行されると、多数のWALログが生成される可能性がある。 これにより、I/Oロードが大幅に増加し、データベースのパフォーマンスに影響します。 さらに、WALログはタイムリーに削除されない可能性があります。 VACUUMステートメントでパラメーターを設定し、ビジネス要件に基づいてVACUUMステートメントの実行をスケジュールすることを推奨します。

多数の書き込みが発生するシナリオは、VACUUMストームに似ています。 ビジネス要件に基づいてデータ書き込みをスケジュールする必要があります。

読み取り専用データベースでのログ蓄積

WALログが読み取り専用データベースに蓄積されている場合、次の側面から問題を特定してトラブルシューティングできます。

レプリケーションレイテンシ

次のリストは、WALログが読み取り専用インスタンスで再生されるときにレイテンシが発生するという一般的な問題の考えられる原因を説明しています。

  • 実行時間の長いトランザクションが読み取り専用データベースに存在し、WALログの再生と競合します。 この場合、ビジネス要件に基づいて、hot_standby_feedbackおよびmax_standby_streaming_delayパラメーターの値を評価および変更する必要があります。

    たとえば、hot_standby_feedbackパラメーターがoffに設定され、max_standby_streaming_delayパラメーターが大きな値に設定されている場合、読み取り専用データベースで実行時間の長いトランザクションを実行すると、再生待ち時間が発生する可能性があります。

  • プライマリデータベースと読み取り専用データベースの仕様は異なります。 読み取り専用データベースのコンピューティングおよびストレージの仕様がプライマリデータベースの仕様よりも低い場合、レプリケーションの待ち時間が発生する可能性があります。 その結果、再生されていないWALログは削除できません。 この場合、ビジネス要件に基づいて読み取り専用データベースの適切な仕様を評価し、選択する必要があります。

次に何をすべきか

ApsaraDB RDS For PostgreSQLインスタンスの場合、上記のトラブルシューティング操作を実行した後にWALログが蓄積されるという問題が解決しない場合は、ApsaraDB RDS for PostgreSQLのテクニカルサポートにお問い合わせください。

参考情報

非アクティブなレプリケーションスロットを手動で削除して、AliPGがWALログを自動的に削除できるようにすることができます。 詳細については、「WALログ管理機能の使用」をご参照ください。