sql >> Databasteknik >  >> NoSQL >> MongoDB

MongoDB:Hur inaktiverar man loggning av varningen:ClientCursor::staticYield kan inte låsa upp b/c av rekursivt lås?

Jag har nyligen tittat på det här felet själv eftersom jag såg 25 Gb per månad genererat från mongod.log med ett liknande budskap. Jag märkte dock att en fråga inkluderades i loggmeddelandet (jag har formaterat meddelandet för att passa i det här inlägget, det var faktiskt allt på en rad):

warning: ClientCursor::yield can't unlock b/c of recursive lock ns: my-database.users top:
{
    opid: 1627436260,
    active: true,
    secs_running: 0,
    op: "query",
    ns: "my-database",
    query:
    {
        findAndModify: "users",
        query: { Registered: false, Completed: 0 },
        sort: { Created: 1 },
        update: { $set: { NextRefresh: "2014-12-07" } },
        new: true
    },
    client: "10.1.34.175:53582",
    desc: "conn10906412",
    threadId: "0x7f824f0f9700",
    connectionId: 10906412,
    locks: { ^: "w", ^my-database: "W" },
    waitingForLock: false,
    numYields: 0,
    lockStats: { timeLockedMicros: {}, timeAcquiringMicros: { r: 0, w: 3 } }
}

Lite googling avslöjade att det här meddelandet oftast visas när frågan inte kan använda några index. Jag försökte använda .explain() med frågan i loggen och visst visade den att en BasicCursor användes utan index:

db.users.find( { Registered: false, Completed: 0 } ).sort( { Created: 1 } ).explain()
{
    "cursor" : "BasicCursor",
    "isMultiKey" : false,
    "n" : 0,
    "nscannedObjects" : 10453,
    "nscanned" : 10453,
    "nscannedObjectsAllPlans" : 10453,
    "nscannedAllPlans" : 10453,
    "scanAndOrder" : true,
    "indexOnly" : false,
    "nYields" : 1,
    "nChunkSkips" : 0,
    "millis" : 7,
    "indexBounds" : {

    },
    "server" : "mongodb-live.eu-west-1a.10_1_2_213:27017"
}

Att lägga till ett index för elementen i frågan löste problemet. Loggen genererades inte längre och när jag körde .explain() återigen visade det att ett index används:

{
    "cursor" : "BtreeCursor Registered_1_Completed_1",
    "isMultiKey" : false,
    "n" : 0,
    "nscannedObjects" : 0,
    "nscanned" : 0,
    "nscannedObjectsAllPlans" : 0,
    "nscannedAllPlans" : 1,
    "scanAndOrder" : true,
    "indexOnly" : false,
    "nYields" : 0,
    "nChunkSkips" : 0,
    "millis" : 0,
    "indexBounds" : {
        "Registered" : [
            [
                false,
                false
            ]
        ],
        "Completed" : [
            [
                0,
                0
            ]
        ]
    },
    "server" : "mongodb-live.eu-west-1a.10_1_2_213:27017"
}



  1. Hur man ersätter delsträng i mongodb-dokument

  2. Mocking databas i node.js?

  3. C# Mongodb. Hitta objekt i array och välj endast detta objekt

  4. Hur man sorterar mongodb-frågeresultat baserat på underdokument