Mongodb
如何在 MongoDB 中查找超時的查詢?
是否可以在
system.profile
MongoDB 數據庫的 -Collection 中找到由於超時而未完成的查詢?我發現一些查詢的執行時間超過了
$maxTimeMS
.db.coll.find( { millis: {$gt: 1300}, "command.maxTimeMS": NumberLong(1300) }, {millis: 1} ).sort( {millis: -1} )
但是它們只執行了幾毫秒,並且沒有欄位
error
或timeout
. 是否有指示超時的欄位?
在一個相當大的數據集上,我測試了一個 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()
並發現欄位
exception
和exceptionCode
被填充:"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()