【问题标题】:MongoDB's runCommand is much slower than direct callMongoDB run 命令比直接调用慢很多
【发布时间】:2013-12-21 02:57:56
【问题描述】:

我有这两个 mongo 命令,在我看来应该会导致相同的结果:

for(var i=0;i<1000;i++){db.test.insert({a:1}); db.getLastError({j:1, w:1});};

for(var i=0;i<1000;i++){db.test.insert({a:1}); db.runCommand({getLastError:1, j:1, w:1});};

两个命令都正确执行插入,但是,第二个命令慢 100 倍(500 毫秒对 45 秒)。有谁知道,为什么会这样?仅当设置 {j:1} 时才存在差异,因此它可能与某些日志问题有关?

【问题讨论】:

  • 只是好奇 - 当 fsync 设置为 true 时会发生什么?是否启用了日记功能?
  • fsync 不会改变任何东西(至少对我而言)。我有 2.4.8 版本的 MongoDB,我没有更改日志的默认选项,所以应该启用它。

标签: performance mongodb getlasterror runcommand


【解决方案1】:

第二个命令实际上是在等待日志提交,而第一个不是,因此有所不同。使用 getLastError shell 帮助程序时,您不能传入 j 选项。它应该是对应于 getlasterror 数据库命令的 w 参数的数字或字符串,如文档 here 所述。

【讨论】:

  • 感谢您的回答,对我帮助很大。您知道,这些信息是否在文档中的某处可用? (getLastError 部分还可以,但没有说明使用 getLastError 作为 shell 助手)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-15
  • 1970-01-01
  • 2016-10-23
  • 1970-01-01
  • 2021-11-01
相关资源
最近更新 更多