質問: -1 ### 試したこと ・手動でvacuumを実施すると問題なく実行される。(n_dead_tupが0になることを確認。) ・テーブル毎の設定が入っているか確認したが、何もなかった。 ### 補足情報(FW/ツールのバージョンなど) ・autovacuumが実行されないテーブルがあるDBは17つのテーブルがあり、 autovacuumが実行されないテーブルは他のテーブルと比べてデータ量が100倍近くある。 ・autovacuumが実行されないテーブルでanalyzeを実施しても、select count(*)の数とn_live_tupの数に大きく差がある。
回答: 空き容量が不足しているのかもしれません。 ※手動だと上手くいくというので当てはまらないかもしれませんが。 インデックスを削除し、vaccum fullを実行してみて下さい。 PostgreSQL Vacuum について 23.1. 定常的なバキューム作業 > > 23.1.2. ディスク容量の復旧 > > ティップ: 大規模な更新や削除作業の結果としてテーブルが不要な行バージョンを大量に含む場合、通常のVACUUMでは満足のゆくものではないかもしれません。 もしそのようなテーブルを所有し、それが占有する余分なディスク空間の回収が必要であれば、VACUUM FULL、またはその代わりにCLUSTERやテーブルを書き換えるALTER TABLE構文の1つを使用しなければなりません。 これらのコマンドはテーブル全体を新しいコピーに書き換え、それに対する新規インデックスを作成します。 これらの選択肢はすべて排他ロックを必要とします。 > > 新しいものが完成するまで、テーブルの旧コピーとインデックスは解放されませんので、**元のテーブルと同程度の容量の余計なディスク領域も一時的に使用することに注意してください。** > > >