Gần đây tôi đã tự mình xem xét lỗi này vì tôi thấy 25Gb một tháng được tạo từ mongod.log
với một thông điệp tương tự. Tuy nhiên, tôi nhận thấy rằng một truy vấn đã được bao gồm trong thông báo nhật ký (Tôi đã định dạng thông báo để phù hợp với bài đăng này, nó thực sự nằm trên một dòng):
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 } }
}
Một chút của Googling tiết lộ rằng thông báo này thường xuất hiện nhất khi truy vấn không thể sử dụng bất kỳ chỉ mục nào. Tôi đã thử sử dụng .explain()
với truy vấn trong nhật ký và đủ chắc chắn nó cho thấy rằng một BasicCursor
đang được sử dụng mà không có chỉ mục:
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"
}
Thêm chỉ mục cho các phần tử trong truy vấn đã khắc phục sự cố. Nhật ký không được tạo nữa và khi tôi chạy .explain()
một lần nữa nó cho thấy một chỉ mục đang được sử dụng:
{
"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"
}