Como encontrar / matar scripts mongo de longa duração

2

Eu acho que tenho um script mongo de longa duração, mas não tenho certeza. Eu estava conectado ao servidor linux via SSH e eu corri o script assim:

mongo my_database my_script.js

Começou a se arrastar, mas estava demorando muito, então eu acertei Ctrl-C e voltei para o shell. Presumi que o script foi eliminado, mas agora estou vendo consultas que continham ainda em execução no banco de dados.

Como obtenho uma lista de scripts que o banco de dados está executando atualmente e os mato? Eu sei sobre db.currentOp e db.killOp , mas as próprias consultas reais são rápidas, eu preciso matar o script que está executando-os em um loop.

    
por LoveMeSomeCode 28.03.2014 / 15:30

1 resposta

0

A partir disso: link

Isso pode ser um pouco complicado, mas o fato de o shell do MongoDB ser basicamente um interpretador de Javascript nos fornece opções decentes em termos de filtragem. Aqui está a função que uso para realizar isso:

// kills long running ops in MongoDB (taking seconds as an arg to define "long")
// attempts to be a bit safer than killing all by excluding replication related operations
    // and only targeting queries as opposed to commands etc.
    killLongRunningOps = function(maxSecsRunning) {
        currOp = db.currentOp();
        for (oper in currOp.inprog) {
            op = currOp.inprog[oper-0];
            if (op.secs_running > maxSecsRunning && op.op == "query" && !op.ns.startsWith("local")) {
                print("Killing opId: " + op.opid
                + " running over for secs: "
                + op.secs_running);
                db.killOp(op.opid);
            }
        }
    };

Isso só matará as consultas acima do limite maxSecsRunning e não tocará em nada que esteja sendo executado no banco de dados local, que é onde o oplog mora (e, portanto, é o banco de dados envolvido nas operações de replicação de longa duração. É relativamente fácil adicione critérios ao interno se condicional a operações de destino mais precisamente conforme necessário com base em necessidades específicas.

O código também está disponível como uma essência (onde eu me lembrarei de atualizá-lo continuamente).

Isso ajudará você a segmentar operações específicas e encerrá-las.

    
por 17.06.2016 / 15:04

Tags