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

sam*_*sam 7 mongodb

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

Max*_*ios 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
                    }
                }
            ]
Run Code Online (Sandbox Code Playgroud)

只需将结果放在变量中:

currentOps = db.currentOp()
Run Code Online (Sandbox Code Playgroud)

并将其用作常规json,或者编写一个迭代currentOps.inprog数组并检查secs_running>某事的小程序

我希望它有所帮助.