PostgreSQLスキルアップノート(自己啓発のための個人サイト)
バキューム・関連パラメータとチューニング
【一覧に戻る】
マニュアルへのリンクは9.2としています。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
■■■■ PostgreSQL スキルアップノート
■■■■
■◆■■ バキューム・関連パラメータ
■■■■
■■■■
■■■■ 2013/02/24
■■■■ 使用環境:PostgreSQL9.1.7 (CentOS6.2)
(C) 2013 ohdb
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
┌───────┐
│全般に未整備 │
└───────┘
【マニュアル】
・第18章サーバの設定・自動Vacuum作業→●[マニュアル]
・第18章サーバの設定・コストに基づくVacuum遅延 →●[マニュアル]
【マニュアル参考】
・VACUUM概要 →●[マニュアル]
・vacuumdbコマンド →●[マニュアル]
・VACUUM文 →●[マニュアル]
■1■ 特に重要と思われるもの
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
一部アナライズも含む
maintenance_work_mem
log_autovacuum_min_duration
autovacuum_max_workers
autovacuum_naptime
autovacuum_vacuum_scale_factor
autovacuum_analyze_scale_factor
■2■ 詳細・共通のパラメータ・maintenance_work_mem
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
maintenance_work_memは保守操作で使用されるメモリ最大容量。
#maintenance_work_mem = 16MB
・バキューム専用のパラメータではないがバキューム中心で値を決めるべきパラメータ
・VACUUMの他、CREATE INDEXやALTER TABLE ADD FOREIGN KEYなどで使われる。
・デフォルト16MB
・関連するセッションは限られるのでwork_memよりもかなり大きめにとるのが一般的。
・ただしautovacuumのワーカ数分×設定値となるので注意。
■3■ 詳細・自動バキューム(autovacuum)のパラメータ
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
第18章サーバの設定・自動Vacuum作業→●[マニュアル]
定常的なバキューム作業→●[マニュアル]
【□】 grep -i autovacuum postgresql.conf
# AUTOVACUUM PARAMETERS
#autovacuum = on
#log_autovacuum_min_duration = -1
log_autovacuum_min_duration = 0
#autovacuum_max_workers = 3
#autovacuum_naptime = 1min
#autovacuum_vacuum_threshold = 50
#autovacuum_analyze_threshold = 50
#autovacuum_vacuum_scale_factor = 0.2
#autovacuum_analyze_scale_factor = 0.1
#autovacuum_freeze_max_age = 200000000
#autovacuum_vacuum_cost_delay = 20ms
#autovacuum_vacuum_cost_limit = -1
1.autovacuumの機能有効/無効
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
#autovacuum = on
・有効にするにはtrack_counts = onも必要。(通常はon)
・このパラメータに関わらず「xid周回防止目的のvacuum」は実行される。
2.autovacuum実行の制御 ログ記録/プロセス数/周期/負荷制御等
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
(1)ログ記録
#log_autovacuum_min_duration = -1
log_autovacuum_min_duration = 0
指定した数値(ミリ秒)以上の実行がログに記録される。
デフォルトは-1で一切記録されない。
0の場合は全部記録
(2)ワーカの最大の同時実行数
#autovacuum_max_workers = 3
(3)自動バキュームの周期 ※naptimeは「お昼寝」
#autovacuum_naptime = 1min
(4)コストに基づく遅延関連
#autovacuum_vacuum_cost_delay = 20ms
#autovacuum_vacuum_cost_limit = -1
┌───────┐
│この項未整理 │
└───────┘
3.autovacuum対象閾値関連
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
バキューム基礎閾値 #autovacuum_vacuum_threshold = 50
バキューム規模係数 #autovacuum_vacuum_scale_factor = 0.2
バキューム閾値 = バキューム基礎閾値 + バキューム規模係数 * タプル数
解析基礎閾値 #autovacuum_analyze_threshold = 50
解析規模係数 #autovacuum_analyze_scale_factor = 0.1
解析閾値 = 解析基礎閾値 + 解析規模係数 * タプル数
・thresholdは更新タプル数(基礎閾値)
・scale_factorは更新タプルの割合(規模係数)
基礎閾値の更新タプル数とテーブルの規模に対する更新割合
を足したものがバキューム、解析(アナライズ)の閾値となる。
・100万件のテーブルなら20万50件がバキューム契機となる閾値
※ここでの更新タプルとは
vacuumの場合は更新、削除
analyzeの場合は挿入、更新、削除
4.その他
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
#autovacuum_freeze_max_age = 200000000 # maximum XID age before forced vacuum
┌───────┐
│この項未整理 │
└───────┘
■3■ 詳細・バキューム(vacuum)のパラメータ
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
1.コストに基づくVacuum遅延のパラメータ
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
vacuum_cost_〜は「コストに基づくVacuum遅延」のパラメータ
・第18章サーバの設定・コストに基づくVacuum遅延 →●[マニュアル]
【□】 grep -i vacuum_cost postgresql.conf
# - Cost-Based Vacuum Delay -
#vacuum_cost_delay = 0ms # 0-100 milliseconds
#vacuum_cost_page_hit = 1 # 0-10000 credits
#vacuum_cost_page_miss = 10 # 0-10000 credits
#vacuum_cost_page_dirty = 20 # 0-10000 credits
#vacuum_cost_limit = 200 # 1-10000 credits
┌───────┐
│この項未整理 │
└───────┘
2.それ以外
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
# REPLICATION
#vacuum_defer_cleanup_age = 0 # number of xacts by which cleanup is delayed
# CLIENT CONNECTION DEFAULTS
#vacuum_freeze_min_age = 50000000
#vacuum_freeze_table_age = 150000000
┌───────┐
│この項未整理 │
└───────┘
以上