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