データを整理し、統計情報を最新化する
- VACUUMで不要領域を再利用可能にする
- REINDEXで不要領域を削除する
- ANALYZEで統計情報を最新化する
- VACUUM FREEZEでトランザクションIDを凍結状態にする
PostgreSQL 11で導入されたVacuumの2つの改善 2018
autovacuum
autovacuumのチューニングってどのパラメータって何があるか
autovacuumのチューニングが必要なケースとその対策案ってどういうのがあるか
上記の裏取りとして、不要領域の回収が間に合わないパターンでのチューニングの結果(3パターン実施)
autovacuumのチューニング要素について考えてみる #PostgreSQL - Qiita 2021
default
autovacuum_vacuum_scale_factor = 0.2 # fraction of table size before vacuum (20%) autovacuum_analyze_scale_factor = 0.1 # fraction of table size before analyze (10%)
SELECT relname, n_live_tup, n_dead_tup, last_vacuum, last_autovacuum, last_analyze, last_autoanalyze FROM pg_stat_all_tables WHERE schemaname = 'public' ORDER BY relname ;
select category, name,setting,unit,source,min_val,max_val from pg_settings where category = 'Autovacuum' ; category | name | setting | unit | source | min_val | max_val | boot_val ------------+-------------------------------------+-----------+------+--------------------+---------+------------+----------- Autovacuum | autovacuum | on | | default | | | on Autovacuum | autovacuum_analyze_scale_factor | 0.05 | | configuration file | 0 | 100 | 0.1 Autovacuum | autovacuum_analyze_threshold | 50 | | default | 0 | 2147483647 | 50 Autovacuum | autovacuum_freeze_max_age | 200000000 | | default | 100000 | 2000000000 | 200000000 Autovacuum | autovacuum_max_workers | 3 | | default | 1 | 262143 | 3 Autovacuum | autovacuum_multixact_freeze_max_age | 400000000 | | default | 10000 | 2000000000 | 400000000 Autovacuum | autovacuum_naptime | 30 | s | configuration file | 1 | 2147483 | 60 Autovacuum | autovacuum_vacuum_cost_delay | 20 | ms | default | -1 | 100 | 20 Autovacuum | autovacuum_vacuum_cost_limit | -1 | | default | -1 | 10000 | -1 Autovacuum | autovacuum_vacuum_scale_factor | 0.1 | | configuration file | 0 | 100 | 0.2 Autovacuum | autovacuum_vacuum_threshold | 50 | | default | 0 | 2147483647 | 50
autovacuum_vacuum_scale_factor = 0.1 # 10% autovacuum_analyze_scale_factor = 0.05 # 5%
テーブルレベルで自動バキュームを設定する
グローバル自動バキューム設定に基づいて成長している PostgreSQL 環境では、大きなテーブルが効果的にバキュームされず、小さなテーブルが頻繁にバキュームされるのを目にするかもしれません。これらのシナリオを回避するために、次の手順に従ってテーブルレベルで自動バキュームパラメータを設定できます。
- 環境内の大きなテーブルを一覧表示します。
- 変更が多数発生しているテーブルを一覧表示します。
- 'n_dead_tup の数が多いテーブルを確認します。
- テーブルが最後に自動分析され、自動バキュームされたタイミングを確認します。
- テーブルレベルで自動バキュームと自動分析パラメータを変更します。