有些用户使用noTimeout设置打开mongo游标。我想列出所有打开的游标,它们的ID,它们的选项,它们运行的查询,该游标的开始时间,最后一次使用它(getmore)。有没有命令要这样做?有人可以指出我的任何提示,以便我可以根据需要编写一个小应用程序。
答案 0 :(得分:7)
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>东西
我希望它有所帮助。
答案 1 :(得分:1)
根据2017年1月对其JIRA的评论,计划在此功能中执行此功能,但目前尚无任何路线图: https://jira.mongodb.org/browse/SERVER-3090