2013-06-23 53 views
0

我有一個大約8G的分貝。 我沒有複製數據庫來生成副本。 然後我使用js控制檯修剪了該副本。 然後我跑了一個reapir數據庫,副本仍然是原來的確切大小。db.repairDatabase()沒有減少數據庫的大小

+0

你是什麼意思修剪?我們需要更多的信息,可能是'stats()'? – Sammaye

+0

我的意思是我刪除了大量的數據。根據統計數據庫是隻有2G(dataSize = 2G) –

+0

你能告訴我們這個輸出,直接從控制檯?這很奇怪,因爲即使使用預分配,數據庫應該更像磁盤大小的4GB。同時向我們展示'show dbs'輸出。嘗試'mongod'重新啓動,並告訴我們是否有任何變化,我認爲這些數字可能會保存在RAM – Sammaye

回答

2

很可能這意味着您沒有釋放足夠的空間將整個範圍或文件返回到操作系統。想象一下,你有5個2GB文件(MongoDB在前幾個小文件後以2GB的增量預先分配文件),現在想象你在這個數據庫中有8GB的數據。最後一個文件將一直爲空,因爲MongoDB在需要它之前預先分配一個文件。所以8GB的文件佔用4個2GB的文件,一個2GB的文件是空的。

現在你做一些修剪 - 甚至1.8GB的刪除東西。您可以在一組新的數據庫文件中儘可能緊湊地運行修復每個記錄的repairDB。除了它仍然需要相同的5個2GB文件,因爲第四個文件有100MB的數據,最後一個文件必須是空的。

您可以查看db.stats()的輸出以查看將數據大小與存儲大小進行比較,但事實是,與分配的文件大小相比,這些數字相對較小,這可能是爲什麼你正在看到你所看到的。

+0

謝謝!我正在使用show dbs來給我大小。我認爲這將是數據的大小而不是保留文件的大小。有沒有辦法確定數據的確切大小? –

+0

@DouglasFerguson正如她所說,'stats()'會告訴你 – Sammaye

+0

顯示dbs的大小已增加appstore \t 7.9501953125GB –