MongoDB我们如何获得所有CURRENT打开游标以及它们运行的​​查询?

时间:2014-01-08 18:21:51

标签: mongodb

有些用户使用noTimeout设置打开mongo游标。我想列出所有打开的游标,它们的ID,它们的选项,它们运行的​​查询,该游标的开始时间,最后一次使用它(getmore)。有没有命令要这样做?有人可以指出我的任何提示,以便我可以根据需要编写一个小应用程序。

2 个答案:

答案 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