在我的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
}
這就是mongoDB的工作原理......它將數據文件預先分配給特定的大小。你可以在這裏閱讀更多關於它的信息:http://docs.mongodb.org/manual/faq/storage/ – c0deNinja 2013-04-25 07:43:19
如果這是一個小型的數據庫,你可能想使用'smallfiles',它使用一個更小的默認數據文件大小。 .. http://docs.mongodb.org/manual/reference/configuration-options/#smallfiles – c0deNinja 2013-04-25 07:47:04
嗯,但我明白它預先預先分配一個文件。最大分配的文件大小是2GB。我們的數據有5GB - 請參閱'storageSize'(只能插入,不能移除,因爲這是一個上限集合)。總共達到了18GB? – adamw 2013-04-25 07:49:32