O $currentOp
estágio de agregação fornece informações sobre todas as operações atualmente em execução no MongoDB. Se seu aplicação estiver com problemas de desempenho, você poderá criar um pipeline de agregação em torno desse estágio para monitorar consultas lentas e problemas semelhantes.
Sobre esta tarefa
Analisadores de banco de dados
Esta tarefa utiliza o para identificar queries lentas atualmente em execução em seu aplicação. Para encontrar todas as queries lentas dentro de um período especificado, considere usar um $currentOp
profiler.
Profiler | Descrição |
---|---|
Fornece um gráfico de dispersão para os clientes do Atlas , facilitando a identificação de queries lentas e outliers de desempenho. | |
Armazena informações de desempenho de query em uma collection, permitindo que você consulte o MongoDB para queries com problemas específicos de desempenho. |
Tanto o Atlas Query Profiler quanto o profiler de banco de dados podem afetar o desempenho do servidor , usar espaço em disco e expor metadados de query em torno de campos criptografados. Considere as implicações de desempenho e segurança antes de habilitá-las.
Explicar queries
Esta tarefa identifica queries com problemas de desempenho. Se você já souber quais queries têm problemas de desempenho, consulte Explicar queries lentas para resolvê-los.
Passos
Recuperar operações atuais.
Use o $currentOp
estágio de agregação para recuperar as operações atuais do MongoDB:
db.getSiblingDB("admin").aggregate( [ { $currentOp: { allUsers: true } }, { $match: { secs_running: { $gt: 2 } } }, { $sort: { secs_running: 1 } } ] )
[ { "opid": "12345", "secs_running": 5, "active": true, "ns": "sample_mflix.movies", "command": { "find": "movies", "filter": { "title": { "$regex": "The" } } }, "planSummary": "COLLSCAN", "locks": { ... }, "client": "203.0.113.25:43210" } ]
Este pipeline de agregação recupera todas as operações atuais no cluster. O $match
estágio de agregação filtra as operações para aquelas que estão sendo executadas há mais de dois segundos. Isso permite a você filtrar as queries executadas dentro de um período especificado. Ajuste o valor para atender às necessidades do seu aplicação e banco de dados .
O estágio classifica os resultados em ordem crescente de tempo de $sort
operação.
Verifique se há atividade.
Visualize o campocurrentOp.active
. Se currentOp.active
for true
, MongoDB indica que a operação está atualmente em execução.
Para interromper uma operação de longa duração, use o método para interromper db.killOp()
o opid
fornecido.
Verifique se há travas.
Visualize o campocurrentOp.waitingForLock
. Se currentOp.waitingForLock
estiver true
, outra operação em execução no servidor ou cluster estará bloqueando a query.
Para interromper uma operação bloqueada, use o método para interromper db.killOp()
o opid
fornecido.
Confira o resumo do plano.
Verifique o valor no currentOp.planSummary
campo.
IXSCAN
- Indica que a query executou uma verificação de índice.
COLLSCAN
- Indica que a query executou uma verificação de collection. Para corrigir isso, crie um índice.
Explique a query.
Se o $currentOp
estágio de agregação retornar uma query que exija pesquisa adicional, use o método para analisar o plano de query e a estatística de explain()
execução.
Para obter detalhes, consulte Explicar queries lentas.