2009-09-04 43 views
0

我有一個「小」的問題。一個星期前,我的數據庫達到了全盤的容量。我在不同的表中刪除了很多行,試圖釋放磁盤空間。之後,我試圖運行一個完整的真空,但沒有完成。postgreSQL真空臨時文件?

我想知道的是。當我停止從完全compliting真空它會留下磁盤上的任何臨時文件,我必須刪除manualy? 我現在有一個數據庫,這是一個100%的磁盤容量,不必要地說是一個大問題。

任何提示釋放磁盤空間?

我使用postgres 8.1.4數據庫運行SUSE。

回答

4

首先:

升級

即使你不能到8.2,8.3或8.4 - 至少升級至最新的8.1(這是8.1.17的那一刻,但將8.1 .18在1-2天內)。

第二:診斷是什麼問題。使用du工具來診斷空間的確切位置。什麼目錄佔用太多空間?

df檢查什麼是總共使用的空間,然後檢查它是多少是PostgreSQL目錄。

最好的選擇是:

cd YOUR_PGDATA_DIR 
du -sk * 
cd base 
du -sk * 
cd LARGEST DIR FROM PREVIOUS COMMAND 
du -sk * | sort -nr | head 

現在,你知道哪些目錄PGDATA使用空間,你可以做一些事情。

如果它是日誌或pg_temp - 重新啓動pg或刪除日誌(pg_clog和pg_xlog不是日誌的通用含義,不會刪除任何內容!)。

如果它的東西,在你的根目錄,然後:在基本目錄

數值目錄涉及到數據庫。你可以用一下:

select oid, datname from pg_database; 

當你知道正在使用的大部分空間數據庫,連接到它,並選中該文件正在使用的大部分空間。

文件名稱將是數值,並可選擇「.digits」後綴 - 這個後綴是(現在)不相關的,並且可以檢查正是該文件所代表發出:

select relname from pg_class where relfilenode = <NUMBER_FROM_FILE_NAME>; 

一旦你知道哪些表/ indexes使用大部分空間 - 你可以使用VACUUM FULL或者(更好)在它們上面發出CLUSTER命令。

+0

感謝您的回覆!我的問題是磁盤已滿100%。真空和羣集需要可用磁盤空間來運行。如果不運行vacuum/cluster,是否可以完全刪除數據庫? – jorgen 2009-09-04 12:49:13

+0

找到一張你可以犧牲的表格,並對其進行截斷。它會立即釋放空間。 – 2009-09-04 13:16:32

+0

謝謝你的幫助! – jorgen 2009-09-04 13:50:44

1

在您的問題的新切線上,您可以使用query找出數據庫中正在使用大量空間的內容。這可以幫助您找到候選人,以便TRUNCATE收回足夠的工作空間來清理已刪除信息的工作空間。

請注意,刪除大量行但不是VACUUMing足夠頻繁地檢查磁盤空間,通常會導致稱爲索引膨脹的情況,而VACUUM FULL根本沒有任何幫助。當我建議的查詢顯示大部分空間被索引而非常規表佔用時,您就會知道您在那裏。您需要CLUSTER,它需要與表本身一樣多的可用磁盤空間來重建所有內容,以從該問題中恢復。