执行.explain()时,有人可以告诉我nYields字段的用途是什么吗?

时间:2013-09-11 10:41:47

标签: mongodb

db.update_queue.find().explain();
{
        "cursor" : "BasicCursor",
        "nscanned" : 6046,
        "nscannedObjects" : 6046,
        "n" : 6046,
        "millis" : 5,
        "nYields" : 23,
        "nChunkSkips" : 0,
        "isMultiKey" : false,
        "indexOnly" : false,
        "indexBounds" : {

        }
}

From the net i found out this

nYields是查询时间切出的次数。 因此,对于此查询意味着其他查询被允许进行23次。

What does this mean actually ??

这是我对上述

的理解

这是否意味着此查询在执行当前查询之前等待23个查询?

2 个答案:

答案 0 :(得分:4)

MongoDB的并发功能在最近的版本中更为突出。有一个让步操作的功能,它有RAM中的数据,以换取那些在RAM中有数据的数据。

这意味着MongoDB永远不会空闲排队您的操作,并且通常可以加快操作速度。

nYields表示此操作有多少次成为MongoDB中的并发算法的牺牲品,因此对于其数据在RAM中的其他操作而言自行消退。

修改

作为修改,请填写文档页面:http://docs.mongodb.org/manual/faq/concurrency/#does-a-read-or-write-operation-ever-yield-the-lock

  

长时间运行的读写操作,例如查询,更新和删除,在许多条件下都会产生。在MongoDB 2.0中,操作基于时间片和等待主动锁定的操作数而产生。

然而:

  

2.2之后,更多自适应算法允许操作基于预测的磁盘访问(即页面错误)而产生。

因此,在不仅仅是错误行为会影响屈服的情况下,我相信这个问题比任何事情都更容易出错。

答案 1 :(得分:0)

文档说:

explain.nYields

nYields是一个数字,它反映了此查询产生读锁定以允许等待写入执行的次数。