2014-01-08 3 views
6

Einige Benutzer öffnen Cursor zu Mongo mit noTimeout-Set. Ich möchte alle offenen Cursor auflisten, ihre IDs, ihre Optionen, die Abfrage, unter der sie ausgeführt werden, die Startzeit für diesen Cursor, die letzte Zeit, zu der er verwendet wurde (getmore). Gibt es einen Befehl, das zu tun? Kann mir jemand Hinweise geben, damit ich bei Bedarf eine kleine App schreiben kann.MongoDB Wie erhalten wir alle aktuellen Cursor und die Abfragen, die sie ausführen?

+0

Können Sie meine Antwort markieren als angenommen? Ich denke, es löst das, wonach Sie gesucht haben. Danke im Voraus! –

Antwort

7

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 sie ist sehr nützlich, um schwere Operationen oder solche, die schon lange laufen, zu untersuchen. Es ist nicht perfekt, was Sie wollen, aber ich denke, Sie könnten ein kleines Programm schreiben, das die Laufzeit von Operationen analysiert, um festzustellen, welche eine bestimmte Zeit lang ausgeführt wurde.

Blick auf ein Beispiel für meine Datenbank einer Aggregation ich nur zu Testzwecken laufen, werde ich einige Daten verstecken, 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 
        } 
       } 
      ] 

einfach das Ergebnis legte in einer Variablen:

currentOps = db.currentOp() 

und es als reguläres json verwenden, oder ein kleines Programm schreiben, das currentOps.inprog Array und prüfen secs_running> etwas

I iterieren hop e es hilft.

+1

Es lohnt sich, die Dokumente auf db.currentOp() zu lesen. Sie können auch mit "true" als Argument arbeiten, das eine ausführlichere Ausgabe und Leerlaufoperationen bietet: http://docs.mongodb.org/manual/reference/method/db.currentOp/ –

+0

Einverstanden. Im Allgemeinen funktioniert das Laufen ohne Argumente für mich in Bezug auf die Analyse, aber es liefert mehr Informationen für den Fall, dass eine tiefere Analyse erforderlich ist. –

Verwandte Themen