Aurora PostgreSQL で積極的なバキュームのブロック要因を特定して解決する - Amazon Aurora

Aurora PostgreSQL で積極的なバキュームのブロック要因を特定して解決する

PostgreSQL でデータベースの正常な状態を維持するためにはバキューム処理が不可欠です。バキューム処理によって、ストレージの再利用が可能になり、トランザクション ID の循環に関する問題を回避できます。しかし、バキューム処理が目的どおりに動作しなくなることもあります。これにより、パフォーマンスの低下やストレージの肥大化が生じ、トランザクション ID の循環によって DB インスタンスの可用性にも影響する場合があります。したがって、データベースのパフォーマンスと可用性を最適化するには、これらの問題を特定して解決することが不可欠です。「Understanding autovacuum in Amazon RDS for PostgreSQL environments」で自動バキュームの詳細について確認してください。

postgres_get_av_diag() 関数は、積極的なバキュームの進行を妨げたり遅らせたりしている問題を特定するのに役立ちます。推奨事項が提示され、問題が特定可能な場合はそれを解決するためのコマンドが、問題を特定できない場合は詳細な診断のためのガイダンスが得られます。積極的なバキュームのブロック要因は、経過時間が RDS の適応型自動バキュームのしきい値である 5 億トランザクション ID を超えた場合に報告されます。

トランザクション ID の経過時間とは

トランザクション ID の age() 関数は、データベース (pg_database.datfrozenxid) またはテーブル (pg_class.relfrozenxid) の最も古いフリーズしていないトランザクション ID 以降に発生したトランザクションの数を計算します。この値は、前回の積極的なバキューム操作以降のデータベースアクティビティを示し、今後の VACUUM プロセスのワークロードについての見通しを示します。

積極的なバキュームとは

積極的な VACUUM 操作では、通常の VACUUM で省略されるページも含め、テーブル内のすべてのページが包括的にスキャンされます。この徹底的なスキャンは、最大経過時間に近づいているトランザクション ID を「フリーズ」することを目指しており、トランザクション ID の循環と呼ばれる状況を効果的に防止します。

postgres_get_av_diag() で報告されるブロック要因は、5 億トランザクション以上古いものとなります。