2009-05-29 108 views
1

我有一個奇怪的問題。我的postgresql(8.3)的大小正在增加。所以我做了一個轉儲,然後清理了數據庫,然後重新導入了轉儲。數據庫大小減少了大約50%。PostgreSQL數據庫大小增加

一些信息: (1)AUTOVACUUM和REINDEX定期在後臺運行。 (2)數據庫編碼是ASCII。 (3)數據庫位置:/ database/pgsql/data (4)系統:Suse-Ent。 10.

任何提示讚賞

+1

我建議在serverfault.com上詢問這個 – Elijah 2009-05-29 09:07:39

回答

4

如果死元組的堆積量超過max_fsm_pages的範圍,那麼常規VACUUM將無法釋放所有內容。最終的結果是,隨着死亡空間的不斷積累,數據庫將隨着時間的推移而越來越大。運行VACUUM FULL應該可以解決這個問題。不幸的是,在大型數據庫上可能需要很長時間。

如果您經常遇到此問題,您需要更頻繁地抽真空(autovacuum可以幫助此處)或增加max_fsm_pages設置。當運行VACUUM VERBOSE時,它會告訴你有多少頁面被釋放,如果max_fsm_pages被超過,會給你一個警告,這可以幫助你確定這個值應該是多少。有關更多信息,請參閱手冊。 http://www.postgresql.org/docs/8.3/static/runtime-config-resource.html#RUNTIME-CONFIG-RESOURCE-FSM

幸運的是,8.4的可見性圖解決了這個問題。 Despesz與往常一樣有一個關於這個主題的精彩故事:http://www.depesz.com/index.php/2008/12/08/waiting-for-84-visibility-maps/

+0

VACUUM FULL確實有幫助 – stanleyxu2005 2009-06-02 07:43:16

1

,無需瞭解特定的設置更多的細節,幾件事情浮現在腦海中。當AUTOVACUUM運行時,它是否試圖回收磁盤空間,並且可以驗證它是否通過服務器日誌?

其次,特別是如果以前的答案是否定的,您的AUTOVACUUM值可能不正確。我強烈建議閱讀以下主題:http://www.postgresql.org/docs/8.3/interactive/routine-vacuuming.html#AUTOVACUUM

1

運行reindex應該沒有必要。

運行數據庫寬真空與詳細,並檢查最後一行fsm設置提示 - 也許這是什麼錯誤。

1

你也試過VACUUM FULL嗎? (警告,它會長時間鎖定您的數據庫。)我不確定AUTOVACUUM是如此渴望...

1

如果您還沒有,請檢查您的系統是否存在長時間閒置的事務。他們將阻止VACUUM(手動和自動)清除空間。