在我的mongo数据库中,我有一个集合上限为5GB,一个10MB,很少没有上限.没有封顶的文件不包含超过20个小文件.
经过长时间(4h)压力测试,只写入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
}
Run Code Online (Sandbox Code Playgroud)
这是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
}
Run Code Online (Sandbox Code Playgroud)
那么为什么fileSize比storageSize大得多呢?我现在甚至无法运行repairDatabase(),但我在每个非上限集合上尝试了compact(),但没有结果.实际上,这是预期的,因为在压力测试之前db是干净的.我的意思是删除了文件,不仅删除了集合.
从日志中我可以看到在压力测试期间创建了额外的数据文件,间隔为~1h.
一些日志:http://pastie.org/private/t8u9caxstafbjdybgwtsfw
更新:经过另一个晚上,另一个4h压力测试通过,它是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
}
Run Code Online (Sandbox Code Playgroud)
发生这种情况是因为 MongoDB 在重新使用分配给上限集合的空间时出现错误。它已被归档为SERVER-9489,并将进行分类并希望很快得到修复。
在不耗尽磁盘空间的情况下继续运行压力测试的方法是,在测试完成后删除测试数据库目录,然后在运行新测试时创建一个新目录(这假设您不需要重用相同的数据)。如果您确实需要相同的数据,您可以使用 mongodump 在每次运行时保留它,尽管可能还有其他更简单的选项,具体取决于您的具体使用情况。
| 归档时间: |
|
| 查看次数: |
3152 次 |
| 最近记录: |