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~
回覆刪除…我還差很遠…
刪除