MongoDB"范围是否为空"表明缺少指数?

时间:2014-03-12 09:18:05

标签: mongodb

我已经看到很多关于MongoDB日志条目的问题,例如

Tue Mar 11 09:42:46.995 [conn1044] info DFM::findAll(): extent 0:2f000 was empty, skipping ahead. ns:mydb.mycoll

我知道这是因为删除以前的数据导致MongoDB数据文件中有空的空间。评论者通常会说,如果要恢复磁盘空间,可以忽略此消息或压缩数据库。

但是为什么MongoDB无论如何都要看空位?此消息是否还表明我缺少索引并且数据库正在扫描数据文件?

1 个答案:

答案 0 :(得分:2)

删除大量数据后,您收到的消息可能会发生。范围只是一个数据文件,或者#34;桶"可以存储数据的位置。如果删除大量数据,则范围可能最终为空。这不是问题,因为在插入数据时,范围将再次填满。

  

此消息是否也表明我缺少索引并且数据库正在扫描数据文件?

不,这只是MongoDB找到空范围时定期记录的信息性消息。 如您所述,可以忽略该消息,也可以通过运行修复来释放已分配的空间来解决该问题。 如果您的收藏集经常删除或文档增长,您还应考虑启用usePowerOf2Sizes收集分配选项。这种分配策略将允许MongoDB通过舍入到最接近的2的幂来更有效地重用已分配记录的已删除空间(而不是使用动态Padding Factor .FYI,PowerOf2Sizes现在是MongoDB中新集合的默认分配策略。 2.6。 请注意,一旦启用标志,usePowerOf2Sizes仅影响新记录分配。我建议您在启用此标志后运行repairDatabase,以便更新历史分配。