MongoDB日志:范围0:550000并且找不到插件[desc]

时间:2013-03-04 19:37:20

标签: mongodb meteor

我正在使用Meteor和在Windows上运行的单独MongoDB。我将MongoDB作为一项服务运行。

我的MongoDB日志中包含以下内容:

Mon Mar 04 14:15:36 [conn19] info DFM::findAll(): extent 0:55000 was empty, skipping ahead. ns:webfm.graphdata
Mon Mar 04 14:15:38 [conn17] info DFM::findAll(): extent 0:55000 was empty, skipping ahead. ns:webfm.graphdata
Mon Mar 04 14:15:40 [conn16] info DFM::findAll(): extent 0:55000 was empty, skipping ahead. ns:webfm.graphdata
Mon Mar 04 14:15:43 [conn18] warning: can't find plugin [desc]
Mon Mar 04 14:15:43 [conn19] info DFM::findAll(): extent 0:55000 was empty, skipping ahead. ns:webfm.graphdata
Mon Mar 04 14:15:49 [conn18] info DFM::findAll(): extent 0:55000 was empty, skipping ahead. ns:webfm.graphdata
Mon Mar 04 14:16:14 [conn16] warning: can't find plugin [desc]
Mon Mar 04 14:16:20 [conn17] info DFM::findAll(): extent 0:55000 was empty, skipping ahead. ns:webfm.graphdata
Mon Mar 04 14:16:24 [conn16] warning: can't find plugin [desc]

Mon Mar 04 14:16:32 [conn20] info DFM::findAll(): extent 0:60000 was empty, skipping ahead. ns:webfm.history
Mon Mar 04 14:16:34 [conn16] warning: can't find plugin [desc]

从我能找到的“findAll():extent 0:55000 ......”似乎与我的应用程序经常删除数据有关。这是对的吗?

无法找到插件[desc]怎么样?什么是插件?我该如何解决?

3 个答案:

答案 0 :(得分:1)

该消息实际上是信息性的,无害的。它告诉你整个范围是空的。如果你最近删除了大量数据,就会发生这种情况。

您可以使用compact命令对集合进行碎片整理和压缩(基本上将其重新写入磁盘并在集合上重新创建索引),这将消除日志消息。请注意,压缩是一项资源密集型操作。

答案 1 :(得分:1)

  

从我能找到的“findAll():extent 0:55000 ......”似乎与我的应用程序经常删除数据有关。这是对的吗?

根据尼克的回答,消息extent 0:55000 was empty, skipping ahead与您的频繁删除有关。这是跳过空数据范围时发出的警告,0:55000是范围位置。当您向该集合添加更多数据时,通常会重用该空间。

如果您经常添加和删除此集合并且需要考虑磁盘空间,您还可以考虑:

  • 为此集合启用usePowerof2Sizes标志(MongoDB 2.2或更高版本),以便更有效地重用已删除的空间
  • 将临时集合保存在单独的数据库中,并在完成后删除数据库(而不是运行频繁的压缩或修复)
  

无法找到插件[desc]怎么样?什么是插件?我该如何解决?

这通常意味着您具有无效的索引定义,并且无法找到索引“插件”来处理该索引。在这个例子中,我希望你有一个索引字段,其属性为desc,而不是-1

您可以使用db.collection.getIndexes()检查索引定义:

use webfm
db.graphdata.getIndexes()

答案 2 :(得分:0)

我不能确定这是一个问题。您可能正在运行具有太多冗长的mongodb,因此出于调试原因,它在其警告和进程中显示过多细节。这是一件好事,因为如果问题或错误可以确定问题。

但是如果你想删除它:

减少'v'的数量或在启动命令中删除它们。

如果您使用配置文件,请更改以下任何一项错误:

vvvvv = false
vvvv = false
vvv = false
vv = false
v = false