MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

MongoDB:Bagaimana cara menonaktifkan logging peringatan:ClientCursor::staticYield can't unlock b/c of ​​recursive lock?

Saya baru-baru ini melihat sendiri kesalahan ini karena saya melihat 25Gb sebulan dihasilkan dari mongod.log dengan pesan serupa. Namun, saya perhatikan bahwa kueri disertakan dalam pesan log (saya telah memformat pesan agar sesuai dengan posting ini, sebenarnya semuanya dalam satu baris):

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

Sedikit Googling mengungkapkan bahwa pesan ini paling sering muncul ketika kueri tidak dapat menggunakan indeks apa pun. Saya mencoba menggunakan .explain() dengan kueri di log dan tentu saja itu menunjukkan bahwa BasicCursor sedang digunakan tanpa indeks:

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

Menambahkan indeks untuk elemen dalam kueri memperbaiki masalah. Log tidak lagi dibuat dan ketika saya menjalankan .explain() lagi itu menunjukkan indeks yang digunakan:

{
    "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. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Bagaimana cara mengekstrak nilai yang berbeda dari database mongo menggunakan Waterline dan Sails.js (versi 0.10)?

  2. Luwak menyimpan semua parameter dari badan permintaan

  3. Cara mendapatkan daftar pengguna yang ulang tahun hari ini di MongoDB

  4. mongodb - melepas subdokumen bersarang

  5. MongoServer.State setara dalam driver 2.0