sql >> Database >  >> NoSQL >> MongoDB

MongoDB:Hoe kan ik het loggen van de waarschuwing uitschakelen:ClientCursor::staticYield kan b/c van recursieve vergrendeling niet ontgrendelen?

Ik heb onlangs zelf naar deze fout gekeken, aangezien ik 25 GB per maand zag gegenereerd uit mongod.log met een soortgelijk bericht. Ik merkte echter dat er een vraag was opgenomen in het logbericht (ik heb het bericht zo opgemaakt dat het in dit bericht past, het stond eigenlijk allemaal op één regel):

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 } }
}

Een beetje Googlen wees uit dat dit bericht meestal wordt weergegeven wanneer de query geen indexen kan gebruiken. Ik heb geprobeerd .explain() . te gebruiken met de vraag in het logboek en het toonde inderdaad aan dat een BasicCursor werd gebruikt zonder 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"
}

Het toevoegen van een index voor de elementen in de query loste het probleem op. Het logboek werd niet langer gegenereerd en toen ik .explain() ran uitvoerde weer liet het zien dat er een index werd gebruikt:

{
    "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. 9 nieuwe MongoDB-functies - Moet leren beheersen in MongoDB

  2. DAO en afhankelijkheidsinjectie, advies?

  3. Hoe mongoDB-gerelateerd probleem efficiënt op te lossen?

  4. Nieuw bij MongoDB Kan opdracht mongo niet uitvoeren