MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

MongoDB Wie erhalten wir alle AKTUELL geöffneten Cursor und die Abfragen, die sie ausführen?

MongoDB hat einen Befehl „currentOp“, der aktuelle Operationen enthält (im Allgemeinen nicht nur offene Cursor). Das Ergebnis ist ein Array von "inprog"-Werten. Sie haben die Thread-ID der Operation, keine Cursor-ID, aber es ist sehr nützlich, schwere Operationen oder solche zu untersuchen, die schon lange laufen. Es ist nicht genau das, was Sie wollen, aber ich denke, Sie könnten ein kleines Programm dafür schreiben Analysieren Sie die Ausführungszeit von Operationen, um festzustellen, welche eine bestimmte Zeit lang ausgeführt wurden.

Schauen Sie sich ein Beispiel meiner Datenbank einer Aggregation an, die ich nur zu Testzwecken betreibe, ich werde einige Daten verbergen, weil es in unserem Fall sehr sinnvoll ist :)

"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
                    }
                }
            ]

Setzen Sie einfach das Ergebnis in eine Variable:

currentOps = db.currentOp()

und verwenden Sie es als reguläres JSON oder schreiben Sie ein kleines Programm, das das Array currentOps.inprog iteriert und nach secs_running> irgendetwas

sucht

Ich hoffe, es hilft.