一些用户在设置了 noTimeout 的情况下打开游标到 mongo。我想列出所有打开的游标、它们的 ID、它们的选项、它们正在运行的查询、该游标的开始时间、上次使用它的时间(获取更多)。有什么命令可以做到这一点吗?有人可以指出任何提示,以便我可以在需要时编写一个小应用程序。
最佳答案
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 > 一些东西
希望对你有帮助。
关于MongoDB 我们如何获取所有当前打开的游标和它们正在运行的查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21003571/