PostgreSQL 推薦手動 VACUUM 的時機與目的
更新:2007-03-29
對映章節:
內容:
PostgreSQL 在 8.1 版後雖然加上了自動執行空間清理與回收機制(autovacuum).
減少 DBA 去定期手動執行 VACUUM 的過程, 但有時我們可能更想更快反映這效果, 這時就必須以手動執行的方式來達到目的.
推薦運行 VACUUM
在 pgAdmin III 提供了一個很易觀察當前是否應進行手動 VACUUM 的判斷, 在下圖右邊的黃體標示區預測值:"資料列數(已估算)"與實際值:"資料列數(已計數)", 二個值若產生嚴重偏離實際行數, 就應該在這個資料表上運行 VACUUM ANALYZE。
除了手動運行 VACUUM ANALYZE 命令(也可以利用 pgAdminIII 的「維護」選單來做)之外,還應該考慮定期有規律或者自動地運行 VACUUM ANALYZE (8.1 版後預設值是已啟用)。使用排程程序也可以做到這一點,另外 PostgreSQL 也提供了一個叫做 pg_autovacuum 的後端程序,能夠跟蹤資料庫的變化並在適當時刻自動調用 vacuum 命令。在大多數情況下,pg_autovacuum 是最好的選擇。
(點圖可放大)
pgAdmin III 工作排程代理員:
VACUUM 有什麼好處?
PostgreSQL 的查詢計劃根據預測行數做出決定,如果實際行數與預測行數有太大差異,可能會作出錯誤判斷,造成查詢計劃不是最優化的,導致執行效率過低。
PostgreSQL 資料庫需要 VACUUM 修復表中的事務交易 ID。另外,由於更新和刪除操作而產生的過時資料直到在這個表上運行 VACUUM 命令才會被清理。按下 pgAdmin III VACUUM 介面中的 [幫助/說明] 按鈕,可以從線上文檔中看到更詳細資訊。
延伸閱讀(Link):
沒有留言:
張貼留言