我偶尔会在更新查询中获得非常高的’nscanned’数字,而’nscannedObjects’相对较低.
我从
mongodb日志中获取这些数字,作为慢速查询的自动记录的一部分(这些更新需要100ms到500ms之间的任何时间).
更新的系列有198K项,大小超过100MB.
它有许多不同的领域(超过30个),以及这些领域及其组合的31个索引.
这是MongoDB.log的完整条目 – 包括查询和结果:
2014-09-22T11:55:22.507+0000 [conn45755] update mydatabase.mycollection query: { _id: ObjectId(’53d1365dad547f12b0f31afe’) } update: { ….} nscanned:1702130278 nscannedObjects:121 nMatched:1 nModified:1 keyUpdates:4 numYields:0 locks(micros) w:310293 310ms
当我使用{_id:ObjectId(’53d1365dad547f12b0f31afe’)}进行输入时,我希望MongoDB直接命中’_id’索引,因此nscanned = 1
我无法提供确切的查询和收集细节,但这里是我正在做的一个例子:
示例文档:
{"_id" : ObjectId("53d1365dad547f12b0f31afe"),
"field1" : "val1",
"field2" : "val2",
"field3" : "val3",
...
"field45" : "val45",
}
更新查询:
mycollection.update({"_id" : ObjectId("53d1365dad547f12b0f31afe")},
{"$set" : {"field1" : "new_val1",
"field2" : "new_val2",
"field3" : "new_val3",
...
"field45" : "new_val45"}})
mycollection上的指数存在于“field1”,“field2”……“field31”上.
如果我进行计算,那么即使这个查询会扫描31个索引中的每一个中的每个条目,我预计只会在6,138,000左右得到’nscanned’,所以上面没有意义!
我正在使用MongoDB 2.6.4 – 这是一个已知的错误与索引的更新?
最佳答案 这是MongoDB 2.6.4中的一个错误,并在2.6.5(尚未发布)中修复. nscanned和nscannedObjects变量在某些情况下未初始化,从而导致这些随机值.有关详细信息,请参阅
SERVER-15106和
commit to fix it.