我已经看到很多关于MongoDB日志条目的问题,例如
Tue Mar 11 09:42:46.995 [conn1044] info DFM::findAll(): extent 0:2f000 was empty, skipping ahead. ns:mydb.mycoll
我知道这是因为删除以前的数据导致MongoDB数据文件中有空的空间。评论者通常会说,如果要恢复磁盘空间,可以忽略此消息或压缩数据库。
但是为什么MongoDB无论如何都要看空位?此消息是否还表明我缺少索引并且数据库正在扫描数据文件?
答案 0 :(得分:2)
删除大量数据后,您收到的消息可能会发生。范围只是一个数据文件,或者#34;桶"可以存储数据的位置。如果删除大量数据,则范围可能最终为空。这不是问题,因为在插入数据时,范围将再次填满。
此消息是否也表明我缺少索引并且数据库正在扫描数据文件?
不,这只是MongoDB找到空范围时定期记录的信息性消息。 如您所述,可以忽略该消息,也可以通过运行修复来释放已分配的空间来解决该问题。 如果您的收藏集经常删除或文档增长,您还应考虑启用usePowerOf2Sizes收集分配选项。这种分配策略将允许MongoDB通过舍入到最接近的2的幂来更有效地重用已分配记录的已删除空间(而不是使用动态Padding Factor .FYI,PowerOf2Sizes现在是MongoDB中新集合的默认分配策略。 2.6。 请注意,一旦启用标志,usePowerOf2Sizes仅影响新记录分配。我建议您在启用此标志后运行repairDatabase,以便更新历史分配。