Mongodb

如何在 MongoDB 中查找超時的查詢?

  • August 3, 2015

是否可以在system.profileMongoDB 數據庫的 -Collection 中找到由於超時而未完成的查詢?

我發現一些查詢的執行時間超過了$maxTimeMS.

db.coll.find(
 { millis: {$gt: 1300}, "command.maxTimeMS": NumberLong(1300) },
 {millis: 1}
).sort(
 {millis: -1}
)

但是它們只執行了幾毫秒,並且沒有欄位errortimeout. 是否有指示超時的欄位?

在一個相當大的數據集上,我測試了一個 10 秒後超時的查詢:

db.collection.find({"foo": "bar"}).maxTimeMS(10000)

(在我的情況下,該集合具有> 100 GB數據且欄位上沒有索引foo)。我使用以下方法搜尋查詢:

db.system.profile.find({"query.query" : { "foo" : "bar" }}).limit(5).sort({ts: -1}).pretty()

並發現欄位exceptionexceptionCode被填充:

"exception" : "operation exceeded time limit",
"exceptionCode" : 50,

所以搜尋該欄位exception應該會給你想要的結果:

db.system.profile.find({ "exception" : { "$exists" : 1 } }).limit(5).sort({ts: -1}).pretty()

如果您明確查找超時的查詢,請嘗試:

db.system.profile.find( {"exceptionCode": 50} ).sort( {ts: -1} ).pretty()

引用自:https://dba.stackexchange.com/questions/108659