Aurora PostgreSQL で積極的なバキュームのブロック要因を特定して解決する
PostgreSQL でデータベースの正常な状態を維持するためにはバキューム処理が不可欠です。バキューム処理によって、ストレージの再利用が可能になり、トランザクション ID の循環
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 億トランザクション以上古いものとなります。