postgres テーブル メンテナンス

https://www.fujitsu.com/jp/products/software/resources/feature-stories/postgres/article-index/tuningrule9-base/ 2021

データを整理し、統計情報を最新化する

  • VACUUMで不要領域を再利用可能にする
  • REINDEXで不要領域を削除する
  • ANALYZEで統計情報を最新化する
  • VACUUM FREEZEでトランザクションIDを凍結状態にする

https://www.fujitsu.com/jp/products/software/resources/feature-stories/postgres/article-index/tuningrule9-search/ 2021

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 ;

autovacuum、autoanalyzeの実行頻度を調整 #AWS - Qiita

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

https://aws.amazon.com/jp/blogs/news/understanding-autovacuum-in-amazon-rds-for-postgresql-environments/

autovacuum_vacuum_scale_factor = 0.1    # 10%
autovacuum_analyze_scale_factor = 0.05  # 5%

テーブルレベルで自動バキュームを設定する
グローバル自動バキューム設定に基づいて成長している PostgreSQL 環境では、大きなテーブルが効果的にバキュームされず、小さなテーブルが頻繁にバキュームされるのを目にするかもしれません。これらのシナリオを回避するために、次の手順に従ってテーブルレベルで自動バキュームパラメータを設定できます。

  1. 環境内の大きなテーブルを一覧表示します。
  2. 変更が多数発生しているテーブルを一覧表示します。
  3. 'n_dead_tup の数が多いテーブルを確認します。
  4. テーブルが最後に自動分析され、自動バキュームされたタイミングを確認します。
  5. テーブルレベルで自動バキュームと自動分析パラメータを変更します。

https://aws.amazon.com/jp/blogs/news/understanding-autovacuum-in-amazon-rds-for-postgresql-environments/

https://aws.amazon.com/jp/blogs/database/a-case-study-of-tuning-autovacuum-in-amazon-rds-for-postgresql/