MongoDBには、現在の操作(通常、カーソルを開くだけでなく)を含むコマンド「currentOp」があります。結果は「inprog」値の配列です。カーソルIDではなく操作のスレッドIDがありますが、重い操作や長時間実行されている操作を調査するのに非常に便利です。完全に希望するものではありませんが、小さなプログラムを作成できると思います。操作の実行時間を解析して、特定の期間実行されている操作を特定します。
テスト目的で実行している集計のデータベースの例を見てください。この場合は非常に賢明なので、一部のデータを非表示にします:)
"inprog" : [
{
"opid" : 74074645,
"active" : true,
"secs_running" : 2,
"op" : "query",
"ns" : "mydb.Terms.ByHour",
"query" : {
"aggregate" : "Terms.ByHour",
"pipeline" : [
{
"$match" : {
"cluster" : "my_key",
"start" : {
"$gte" : ISODate("2013-11-10T00:00:00Z"),
"$lte" : ISODate("2013-11-11T00:00:00Z")
}
}
},
{
"$group" : {
"_id" : "$start",
"count" : {
"$sum" : "$count"
}
}
},
{
"$sort" : {
"_id" : 1
}
}
]
結果を変数に入れるだけです:
currentOps = db.currentOp()
通常のjsonとして使用するか、currentOps.inprog配列を反復処理してsecs_running>何か
をチェックする小さなプログラムを作成します。お役に立てば幸いです。