PostgreSQL AutoVacuum 相關引數

https://www.modb.pro/db/1724329716294426624發表於2024-10-17
1.###自動vacuum開關
autovacuum = on; 預設開啟
2.###autovacuum執行頻率
autovacuum_naptime = 60s; 預設1分鐘
3.###autovacuum工作執行緒數
autovacuum_max_workers = 3;預設三個執行緒
4.###觸發autovacuum執行的閾值
auto vacuum執行的閾值dead行大於這個值: autovacuum_vacuum_scale_factor × 表上記錄數 + autovacuum_vacuum_threshold
auto analyze執行的閾值dead行大於這個值: autovacuum_analyze_scale_factor × 表上記錄數 + autovacuum_analyze_threshold
4.1##如何檢視錶上的死元組以及vacuum資訊
SELECT u.schemaname,u.relname,c.reltuples,u.n_live_tup,u.n_mod_since_analyze,u.n_dead_tup,u.last_autoanalyze,u.last_autovacuum
FROM
pg_stat_user_tables u, pg_class c, pg_namespace n
WHERE n.oid = c.relnamespace
AND c.relname = u.relname
AND n.nspname = u.schemaname
AND u.schemaname = 'public'
AND u.relname = 't01'
5.###表級別auto_vacuum閾值定義
ALTER TABLE pgbench_accounts SET (autovacuum_vacuum_scale_factor = 0.1, autovacuum_vacuum_threshold = 2000);
6.###vacuum記憶體引數
##vacuum記憶體
# - Memory -
#maintenance_work_mem = 64MB # min 1MB
#autovacuum_work_mem = -1
# min 1MB, or -1 to use maintenance_work_mem
# - Cost-Based Vacuum Delay -
##當VACUUM 工作超出一定量之後會休眠vacuum_cost_delay這麼久的時間
#vacuum_cost_delay = 0 # 0-100 milliseconds (0 disables)
#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
6.1##autovacuum_work_mem
autovacuum_work_mem預設值為 -1即同 maintenance_work_memmaintenance_work_mem是手動vacuum的引數 預設值為 64MB
6.2##autovacuum工作
vacuum_cost_limit
預設200秒
6.3##autovacuum工作時長超出後休眠時間
vacuum_cost_delay
預設為0也即不休眠
6.4##autovacuum工作量評估標準
以下是三種不同 page 的 cost預設值分別為 11020基本不用調整
vacuum_cost_page_hit - The estimated cost for vacuuming a buffer found in the shared buffer cache.
vacuum_cost_page_miss - The estimated cost for vacuuming a buffer that has to be read from disk.
vacuum_cost_page_dirty - The estimated cost charged when vacuum modifies a block that was previously clean.
手動VACUUM 對應的引數是 maintenance_work_memvacuum_cost_delay 和 vacuum_cost_limit
AUTOVACUUM 對應的引數是 autovacuum_work_memautovacuum_vacuum_cost_delayautovacuum_vacuum_cost_limit
1適當增大 autovacuum_work_mem 和 autovacuum_vacuum_cost_limit減少 autovacuum_vacuum_cost_delay 可提高 AUTOVACUUM 效能
2手動VACUUM設定Session級別引數
SET vacuum_cost_delay = 10;
VACUUM ANALYZE pgbench_accounts;
7.###vacuum freeze表相關的引數
7.1##vacuum_freeze_min_age
預設值5000萬如果存在某個元組的事務年齡超過vacuum_freeze_min_age引數值時就可以在vacuum時把該元組事務號凍結也即將該元組事務id置為2
7.2##vacuum_freeze_table_age
預設值1.5億強制執行急切凍結閾值
7.3##autovacuum_freeze_max_age = 200000000
預設值2億強制凍結新老事物id差距不能超過20億這個差值的大小就是autovacuum_freeze_max_age的值
7.4##vacuum_multixact_freeze_min_age
預設值5000萬這個引數用於控制多事務IDmultixact達到多少年齡時觸發VACUUM操作
7.5##vacuum_multixact_freeze_table_age
預設值是1.5億
如果表的pg_class.relminmxid域超過了這個設定指定的年齡VACUUM會執行一次激進的掃描
激進的掃描與常規VACUUM的區別在於它會訪問每一個可能包含未凍結 XID 或者 MXID 的頁面而不是隻掃描那些可能包含死亡元組的頁面
7.6##autovacuum_multixact_freeze_max_age = 400000000
預設值是4億
指定在一個VACUUM操作被強制執行來防止表中多事務ID回捲之前一個表的pg_class.relminmxid域能保持的最大年齡多事務的)。注意即便自動清理被禁用系統也將發起自動清理程序來阻止回捲

參考https://www.modb.pro/db/1724329716294426624這裡相關的引數以及事務凍結模式

凍結模式觸發引數預設數值表級別引數設定
懶惰模式(Lazy mode) vacuum_freeze_min_age 50000000 autovacuum_freeze_min_age and toast.autovacuum_freeze_min_age
飢渴(侵略)模式(Eager mode) vacuum_freeze_table_age 150000000 autovacuum_freeze_table_age and toast.autovacuum_freeze_table_age
強制模式 (Forced mode) autovacuum_freeze_max_age 200000000 autovacuum_freeze_max_age and toast.autovacuum_freeze_max_age
安全保護模式(Failsafe mode) vacuum_failsafe_age(PG14開始支援) 1600000000 NA

我們可以看到 觸發的引數從 5千萬->1.5億->2億->16億 逐步遞增。

來源: https://www.modb.pro/db/1724329716294426624

相關文章