奇怪的MongoDB /节点解释结果

时间:2015-01-07 23:04:49

标签: javascript node.js mongodb database

我试图解决这个问题......任何帮助都会很棒。

我有相同的查询,我在RoboMongo(CLI)中运行:

db.post.find({utc:{$lte:utc}})
.sort({utc:-1}).limit(100).hint({utc:-1})

和我的Node应用程序(使用Native驱动程序):

mo.post.find({utc:{$lte:utc}},{
  fields:{geo:0, bin:0, flg:0, mod:0, edt:0},
  hint:{utc:-1}, sort:{utc:-1}, limit:100
}).toArray(function(err, result)

出于某种原因,表现与众不同。顶部运行在1ms以下,底部运行超过100ms。当我查看'解释'对于我得到的快速:

"cursor" : "BtreeCursor utc_-1",
    "isMultiKey" : false,
    "n" : 100,
    "nscannedObjects" : 100,
    "nscanned" : 100,
    "nscannedObjectsAllPlans" : 100,
    "nscannedAllPlans" : 100,
    "scanAndOrder" : false,
    "indexOnly" : false,
    "nYields" : 0,
    "nChunkSkips" : 0,
    "millis" : 0,
    "indexBounds" : {
        "utc" : [ 
            [ 
                ISODate("2015-01-07T00:47:32.786Z"), 
                true
            ]
        ]
    },

而且速度慢:

cursor: "BtreeCursor utc_-1"
isMultiKey: false
n: 1
nscannedObjects: 1
nscanned: 1
nscannedObjectsAllPlans: 1
nscannedAllPlans: 1
scanAndOrder: false
indexOnly: false
nYields: 0
nChunkSkips: 0
millis: 0
indexBounds: {
utc: [1]
0:  [2]
0:  "2015-01-07T22:50:05.000Z"
1:  true
-
-
}-

有谁知道这里会发生什么?它们使用相同的索引运行在同一个数据库中?

1 个答案:

答案 0 :(得分:0)

更新:似乎是2.0.x问题......

我刚用2.0.x和1.4.x运行完全相同的查询。当Limit = 1时,两者都执行快〜1ms。当Limit = 2时,1.4.x版本保持在1ms左右,但2.0.x版本会跳到25ms。因此,这不仅仅是解释输出的问题 - 这只是问题的症状。

2015年1月8日星期四UTC-8上午9:04:05,Joshua Abrams写道: 有趣的...使用1.4.x的完全相同的查询产生正确的解释,其中n = 2(依此类推)。这会影响性能吗?当我运行一个Limit = 1的查询时,它的速度很快(正如预期的那样),但是当Limit = 2时,速度会慢100倍......

2015年1月8日星期四UTC-8上午8:52:28,christkv写道: 并不是的。我的建议是制作一个可重复性最小的测试用例(代码和数据)并在jira.mongodb.com上打开一张票。有点难以知道会发生什么。它不太可能是驱动程序,但人们永远不会知道。尝试1.4.x分支以及至少排除它是2.0.x分支问题。

2015年1月8日星期四下午5:47:45 UTC + 1,Joshua Abrams写道: 刚刚检查过,我正在使用2.0.12的驱动程序。还有其他想法吗?

2015年1月8日星期四UTC-8上午8:23:16,christkv写道: 解释只是重新调整驱动程序中的所有结果而不是部分结果。因此你得到了计划。我想到的一件事可能是你在1.4.19之前的驱动程序上遇到错误,其中batchSize设置为1。

2015年1月8日星期四下午5:01:42 UTC + 1,Joshua Abrams写道: 我最近和驱动程序一起遇到了一系列性能问题。 Limit = 1 = 1ms, Limit > 1 = 150ms (mongo-melt-down)

不确定根源是什么 - 当我无法得到正确的解释时,无法进行调试: MongoDB Native Node Driver: Explain is Broken?

相关问题