2012-06-05

【系統】PostgreSQL : VACUUM

Finder.png
Google 了一下日常管理 PostgreSQL 的資料。
發現 Vacuum 還蠻重要的。
它可以釋放己刪除資料的空間。
詳細內容請見:PostgreSQL : VACUUM


結果發現我都沒有做。
而且 AutoVacuum 也沒有 Enable....
所以就改了一下PG 的 Config,將 Auto Vacuum 啟用。
#------------------------------------------------------------------------------
# AUTOVACUUM PARAMETERS
#------------------------------------------------------------------------------

autovacuum = on
                                        # Enable autovacuum subprocess?  'on' 
                                        # requires track_counts to also be on.
log_autovacuum_min_duration = 0
                                        # -1 disables, 0 logs all actions and
                                        # their durations, > 0 logs only
                                        # actions running at least this number
                                        # of milliseconds.
autovacuum_max_workers = 3
                                        # max number of autovacuum subprocesses
                                        # (change requires restart)
autovacuum_naptime = 60min
                                        # time between autovacuum runs
autovacuum_vacuum_threshold = 100
                                        # min number of row updates before
                                        # vacuum
autovacuum_analyze_threshold = 100
                                        # min number of row updates before 
                                        # analyze
autovacuum_vacuum_scale_factor = 0.2
                                        # fraction of table size before vacuum
autovacuum_analyze_scale_factor = 0.1
                                        # fraction of table size before analyze
autovacuum_freeze_max_age = 600000000 
                                        # maximum XID age before forced vacuum
                                        # (change requires restart)
autovacuum_vacuum_cost_delay = 20ms 
                                        # default vacuum cost delay for
                                        # autovacuum, in milliseconds;
                                        # -1 means use vacuum_cost_delay
autovacuum_vacuum_cost_limit = -1  
                                        # default vacuum cost limit for
                                        # autovacuum, -1 means use
                                        # vacuum_cost_limit
不知道怎麼設定才最好,就隨著自己的想法亂設了一下。
PS. 要啟用 autovacuum ,track_counts 也要 enable
因為有動到要 Restart 的部份,所以就要重開 PG。

接著
# ps -ef | grep autovacuum
就會看到 autovacuum launcher process。
這樣就表示有在執行了。
但跑了一天,我去看,他一直 Vacuum 同樣的幾個 Table,
我想要他跑的,卻一直沒出現…
實在讓人很不放心,所以我就又寫了一隻程式,手動去 Vacuum 全部的 Table

首先查出所有要 Vacuum 的 Table
SELECT * FROM PG_TABLES WHERE SCHEMANAME='public'
然後用 For Loop 去 組合 Vacuum  的指令來執行。
"VACUUM ANALYZE ". $tables['TABLENAME'];

寫好後,再去 Cron 設定一下,就搞定啦。




PS. Vacuum Full 會 lock Table,所以盡量別用吧。


2 comments: