有些用户使用noTimeout设置打开mongo游标.我想列出所有打开的游标,它们的ID,它们的选项,它们运行的查询,该游标的开始时间,最后一次使用它(getmore).有没有命令要这样做?有人能指出我任何提示,以便我可以根据需要编写一个小应用程序.
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
}
}
]
Run Code Online (Sandbox Code Playgroud)
只需将结果放在变量中:
currentOps = db.currentOp()
Run Code Online (Sandbox Code Playgroud)
并将其用作常规json,或者编写一个迭代currentOps.inprog数组并检查secs_running>某事的小程序
我希望它有所帮助.