2013-04-25 41 views
8

在我的mongo數據庫上,我有一個容量限制在5GB,一個在10MB,並且沒有非限制的。沒有限制的文件不能包含超過20個小文件。Mongo數據庫佔用的磁盤空間比它應該多得多

經過長時間(4小時)的壓力測試,其中只寫入5GB上限集合,我的數據庫使用18GB。

這是我db.stats說的話(以MB爲單位的值):

data-db:PRIMARY> db.stats(1024*1024) 
{ 
    "db" : "data", 
    "collections" : 9, 
    "objects" : 8723395, 
    "avgObjSize" : 208.8405255064112, 
    "dataSize" : 1737, 
    "storageSize" : 5130, 
    "numExtents" : 12, 
    "indexes" : 19, 
    "indexSize" : 2534, 
    "fileSize" : 18423, 
    "nsSizeMB" : 16, 
    "ok" : 1 
} 

這是5GB收集統計數據(以MB爲單位的值):

data-db:PRIMARY> db.sms_message_event.stats(1024*1024) 
{ 
    "ns" : "data.sms_message_event", 
    "count" : 8723300, 
    "size" : 1737, 
    "avgObjSize" : 0.00019912189194456226, 
    "storageSize" : 5120, 
    "numExtents" : 3, 
    "nindexes" : 6, 
    "lastExtentSize" : 1026, 
    "paddingFactor" : 1, 
    "systemFlags" : 1, 
    "userFlags" : 0, 
    "totalIndexSize" : 2534, 
    "indexSizes" : { 
     "_id_" : 395, 
     "t_1_when_-1" : 475, 
     "smsc_message_id_1" : 185, 
     "user_id_1_t_1_when_1" : 481, 
     "message_id_1" : 318, 
     "virtual_number_recipient_when_index" : 678 
    }, 
    "capped" : true, 
    "max" : 2147483647, 
    "ok" : 1 
} 

那麼,爲什麼檔案大小這麼多大於storageSize?我現在甚至無法運行repairDatabase(),但是我在每個非上限集合上嘗試了compact(),結果沒有。實際上,這是預期的,因爲在壓力測試之前db是乾淨的。我的意思是文件被刪除,不僅收集丟失。

從日誌我可以看到額外的數據文件是在壓力測試過程中創建的,間隔約1小時。

一些日誌:http://pastie.org/private/t8u9caxstafbjdybgwtsfw

UPDATE:一個晚上,和4小時壓力測試的另一次傳遞後,它的28GBs :(

data-db:PRIMARY> db.stats(1024*1024) 
{ 
    "db" : "data", 
    "collections" : 9, 
    "objects" : 8724995, 
    "avgObjSize" : 208.840894006243, 
    "dataSize" : 1737, 
    "storageSize" : 5130, 
    "numExtents" : 12, 
    "indexes" : 19, 
    "indexSize" : 2590, 
    "fileSize" : 28658, 
    "nsSizeMB" : 16, 
    "ok" : 1 
} 
+0

這就是mongoDB的工作原理......它將數據文件預先分配給特定的大小。你可以在這裏閱讀更多關於它的信息:http://docs.mongodb.org/manual/faq/storage/ – c0deNinja 2013-04-25 07:43:19

+0

如果這是一個小型的數據庫,你可能想使用'smallfiles',它使用一個更小的默認數據文件大小。 .. http://docs.mongodb.org/manual/reference/configuration-options/#smallfiles – c0deNinja 2013-04-25 07:47:04

+0

嗯,但我明白它預先預先分配一個文件。最大分配的文件大小是2GB。我們的數據有5GB - 請參閱'storageSize'(只能插入,不能移除,因爲這是一個上限集合)。總共達到了18GB? – adamw 2013-04-25 07:49:32

回答

2

這是因爲MongoDB中的一個錯誤的發生再次使用時,分配給加蓋的收藏的空間已經被提交爲SERVER-9489,並且將被分類並希望儘快修復

您可以繼續運行壓力測試而不會耗盡磁盤空間的方式是刪除測試完成後測試DB目錄,然後在運行新測試時創建一個新目錄(假設您不需要重複使用相同的數據)。如果你確實需要相同的數據,你可以使用mongodump來保存它從運行到運行,儘管可能有其他更簡單的選項取決於你的確切用法。

+0

或者,您可以將封頂的集合放在單獨的數據庫中,並使用dropDatabase並在運行之間重新創建它 - 這將釋放所有空間。 – 2013-04-27 18:17:52

+0

謝謝。另一種選擇是在輔助節點上停止mongod,刪除這些文件,然後重新啓動它。它在replSet中,所以當它在製作中遇到我們時,它是一種方式。不過,我希望能早點解決。 – amorfis 2013-04-28 16:36:57

相關問題