MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

MongoDB Come otteniamo tutti i cursori aperti CORRENTI e le query che stanno eseguendo?

MongoDB ha un comando 'currentOp' che contiene le operazioni correnti (in generale, non solo i cursori aperti). Il risultato è una matrice di valori "inprog". Hai il thread id dell'operazione, non un cursore id ma è molto utile per indagare su operazioni pesanti o quelle che sono in esecuzione da molto tempo. Non è perfettamente quello che vuoi ma penso che potresti scrivere un piccolo programma che analizzare il tempo di esecuzione delle operazioni per identificare quali sono state eseguite per un certo periodo di tempo.

Guarda un esempio del mio database di un'aggregazione che eseguo solo a scopo di test, nasconderò alcuni dati perché nel nostro caso è molto sensato :)

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

Basta inserire il risultato in una variabile:

currentOps = db.currentOp()

e usalo come un normale json, oppure scrivi un piccolo programma che itera l'array currentOps.inprog e controlla secs_running> qualcosa

Spero che aiuti.