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,所以盡量別用吧。
(Y) DBA~
回覆刪除…我還差很遠…
刪除