MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

MongoDB Como obtemos todos os cursores abertos CURRENT e as consultas que eles estão executando?


O MongoDB possui um comando 'currentOp' que contém operações atuais (em geral, não apenas cursores abertos). O resultado é uma matriz de valores "inprog". Você tem o id de thread da operação, não um id de cursor, mas é muito útil para investigar operações pesadas ou aquelas que estão em execução há muito tempo. Não é perfeitamente o que você deseja, mas acho que você poderia escrever um pequeno programa que analisar o tempo de execução das operações para identificar qual delas está em execução por um determinado período de tempo.

Veja um exemplo do meu banco de dados de uma agregação que executo apenas para fins de teste, vou ocultar alguns dados porque é muito sensato no nosso caso :)
"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 colocar o resultado em uma variável:
currentOps = db.currentOp()

e use-o como um json regular, ou escreva um pequeno programa que itere o array currentOps.inprog e verifique se há secs_running> algo

Espero que ajude.