44.10. pg_autovacuum

pg_autovacuumカタログは、自動バキュームデーモンについての付加的なリレーションごとの設定パラメータを保存しています。 もし特定のリレーションで、このカタログにエントリがある場合は、与えられたパラメータは、対象のテーブルに対しての自動バキュームに使用されます。エントリが無い場合はシステムのデフォルト値が使用されます。 自動バキュームデーモンについての詳細は項23.1.4を参照してください。

注意: pg_autovacuumは、その代わりにpg_class.reloptionsエントリに保存されている情報と共に今後のリリースで姿を消しそうです。

表 44-10. pg_autovacuumの列

名前参照先説明
vacrelidoidpg_class.oidこのエントリが指しているテーブル
enabledbool falseの場合は、トランザクションID周回を防ぐ場合を除いて、このテーブルは自動バキュームされません。
vac_base_threshinteger バキューム前の変更された列数の最小値
vac_scale_factorfloat4 vac_base_threshに加算されるreltuplesの乗数
anl_base_threshinteger 解析前に変更された列の最小値
anl_scale_factorfloat4 anl_base_threshに加算されるreltuplesの乗数
vac_cost_delayinteger vacuum_cost_delayのカスタムパラメータ
vac_cost_limitinteger vacuum_cost_limitカスタムパラメータ
freeze_min_ageinteger vacuum_freeze_min_ageカスタムパラメータ
freeze_max_ageinteger autovacuum_freeze_max_ageカスタムパラメータ

更新または削除されたタプルの数が、そのリレーションに存在すると見込まれている有効なタプル数×vac_scale_factorvac_base_threshを越えた時、自動バキュームデーモンは特定のテーブルに対するVACUUM操作を始めます。 同様に挿入または更新、削除されたタプルの数がそのリレーションに存在すると見込まれている有効なタプル数×anl_scale_factoranl_base_threshを越えた時に自動バキュームデーモンはANALYZE操作を始めます。

また、テーブルのpg_class.relfrozenxidフィールドがfreeze_max_ageトランザクションより多くなった時、テーブルが変更されたかどうか、またはpg_autovacuum.enabledfalseに設定されていることに関係なく、自動バキュームデーモンはトランザクションID周回を防ぐためにVACUUMを行います。 こうしたVACUUMを実行するための自動バキュームの起動は、自動バキュームが無効であっても行われます。 周回防止に関する詳細は項23.1.3を参照してください。

すべての数値フィールドには、特定の値についてはシステム全体のデフォルトを使用することを示す、-1(や任意の負の値)を持たせることができます。 vac_cost_delay変数はautovacuum_vacuum_cost_delay設定パラメータからそのデフォルト値を引き継ぎます。 もしこれが負の値であればvacuum_cost_delayから引き継ぐことに注目してください。 同じことがvac_cost_limitにも当てはまります。 また自動バキュームは、システム全体の設定より大きな値をテーブル毎のfreeze_max_ageに設定しようとしても無視します。 (小さな値しか設定できません。) さらに、freeze_min_age valueはシステム全体に対するautovacuum_freeze_max_age設定の半分までに制限されています。 freeze_max_ageを非常にゼロといった小さな値に設定できますが、頻繁にバキュームを強制することになるので賢明とはいえません。