1
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 回のクエリが実行されるまで待機したということですか??

4

2 に答える 2

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 以降では、より適応性の高いアルゴリズムにより、予測されたディスク アクセス (つまり、ページ フォールト) に基づいて操作を実行できます。

したがって、フォルトだけでなく、生成に影響を与える場合もありますが、このクエリは何よりもフォルトしていると思います。

于 2013-09-11T10:53:58.727 に答える