😺

vacuumの設定を覗いてみる

2025/02/17に公開

Daily Blogging58日目

pgheroでvacuumの存在を知ったはいいけど、vacuum自体の設定の確認が分からなかったのでちょっと調べてみた
今回はAmazon RDS for PostgreSQL データベースと Aurora PostgreSQLのお話

クエリで現状の確認ができる

次のクエリでautovacuumの設定を確認できる

SELECT name, setting, unit FROM pg_settings WHERE name LIKE 'autovacuum%';

※設定値は適当な値にしてます

基本設定

パラメータ 設定値 説明
autovacuum on 自動バキュームを有効化。
autovacuum_naptime 1min autovacuumがテーブル状況を確認する間隔。短くするとその分チェック回数が増えるが、CPU負荷も上がる。
autovacuum_max_workers 3 Autovacuumワーカーの最大並列数(デフォルト 3)。増やすと同時並行でより多くのテーブルを処理できるが、サーバー負荷が高くなる。
autovacuum_work_mem -1 Autovacuum用の作業メモリ(デフォルト-1maintenance_work_memを使用)。大きくするとバキュームがより多くのデータを一度に処理可能。

バキューム (VACUUM) のトリガー設定

パラメータ 設定値 説明
autovacuum_vacuum_threshold 50 VACUUMが実行される変更行数の最小閾値(デフォルト 50)。変更の少ないテーブルでもバキュームが走るようになる。
autovacuum_vacuum_scale_factor 0.2 テーブルの20%が変更された場合に VACUUMを実行(デフォルト 0.2)。デッドタプルの蓄積を抑えるが、頻繁にバキュームが走るため負荷が増加。
autovacuum_vacuum_insert_threshold 1000 INSERTのみが行われるテーブルで VACUUMを実行するための行数閾値(デフォルト 1000)。
autovacuum_vacuum_insert_scale_factor 0.2 INSERTのみのテーブルで、 20%の行が追加されるとVACUUMを実行(デフォルト 0.2)。

ANALYZE (統計情報更新) のトリガー設定

パラメータ 設定値 説明
autovacuum_analyze_threshold 50 ANALYZEが実行される変更行数の最小閾値(デフォルト 50)。統計情報の更新が頻繁に行われる設定。
autovacuum_analyze_scale_factor 0.1 テーブルの10%が更新された場合に ANALYZEを実行(デフォルト 0.1)。小さくすると統計情報がより最新に保たれるが、負荷が増える。

VACUUM のパフォーマンス設定

パラメータ 設定値 説明
autovacuum_vacuum_cost_limit 200 1回のAutovacuumで消費できるコストの上限(デフォルト 200)。高くするとバキュームがより多くのデータを処理できるが、負荷も増加。
autovacuum_vacuum_cost_delay 20ms Autovacuumが1回の処理ごとに待機する時間(デフォルト 20ms)。短くするとバキューム速度が上がるが、I/O負荷が増える。

まとめ

vacuumの負荷も計算しながら適切な値を設定しないとダメ
結構大変だ

Discussion