MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

MongoDB Comment obtenir tous les curseurs ouverts ACTUELS et les requêtes qu'ils exécutent ?

MongoDB a une commande 'currentOp' qui contient les opérations en cours (en général, pas seulement les curseurs ouverts). Le résultat est un tableau de valeurs "inprog". Vous avez l'identifiant de thread de l'opération, pas un identifiant de curseur, mais c'est très utile pour enquêter sur les opérations lourdes ou celles qui s'exécutent depuis longtemps. Ce n'est pas parfaitement ce que vous voulez, mais je pense que vous pourriez écrire un petit programme qui analyser le temps d'exécution des opérations pour identifier celles qui ont été exécutées pendant une certaine période de temps.

Regardez un exemple de ma base de données d'une agrégation que je lance juste à des fins de test, je vais cacher certaines données car c'est très sensible dans notre cas :)

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

Mettez simplement le résultat dans une variable :

currentOps = db.currentOp()

et utilisez-le comme un json normal, ou écrivez un petit programme qui itère le tableau currentOps.inprog et vérifie secs_running> quelque chose

J'espère que ça aide.