Um Guia para Analisar Métricas de Desempenho do MongoDB com mongotop e mongostat
Use mongotop e mongostat para identificar coleções quentes, pressão de recursos, picos de conexão e padrões lentos no MongoDB.
Um Guia para Analisar Métricas de Desempenho do MongoDB com mongotop e mongostat
Problemas de desempenho no MongoDB geralmente se manifestam como páginas lentas, gravações acumuladas ou picos repentinos de conexão. mongotop e mongostat, instalados com as Ferramentas de Banco de Dados do MongoDB, fornecem uma visão rápida no terminal do que o servidor está fazendo no momento.
Este guia mostra como interpretar essas ferramentas durante incidentes comuns e, em seguida, conectar a saída a possíveis próximas verificações, como índices, formato de consulta, pooling de conexões e pressão de disco.
Entendendo o mongotop
mongotop fornece uma visão em tempo real das operações de leitura e gravação que ocorrem em suas instâncias MongoDB. Ele exibe o tempo gasto por cada coleção em operações de leitura ou gravação durante um intervalo especificado. Isso é particularmente útil para identificar quais coleções estão experimentando mais atividade e podem ser uma fonte potencial de degradação de desempenho.
Principais Métricas Fornecidas pelo mongotop:
- ns: O namespace da coleção (banco_de_dados.coleção).
- total: Tempo gasto lendo e escrevendo no namespace durante o intervalo de amostragem.
- read: Tempo gasto em atividade de leitura durante o intervalo de amostragem.
- write: Tempo gasto em atividade de gravação durante o intervalo de amostragem.
Como Usar o mongotop:
Você pode executar mongotop diretamente do seu terminal, desde que tenha as ferramentas de banco de dados MongoDB instaladas e acessíveis no seu PATH. Por padrão, ele atualiza a cada segundo. Você também pode especificar um intervalo em segundos.
mongotop
Para especificar um intervalo de atualização (por exemplo, a cada 5 segundos):
mongotop 5
Para executar mongotop contra uma instância MongoDB em execução em um host e porta diferentes:
mongotop --host <hostname> --port <porta>
Interpretando a Saída do mongotop:
- Alto tempo de
writeem uma coleção específica: A coleção está vendo atividade intensa de gravação. Verifique o volume de gravação, crescimento de documentos, índices tocados por gravações e se a carga de trabalho deve ser fragmentada. - Alto tempo de
read: Verifique os planos de consulta para essa coleção. Índices ausentes, conjuntos de resultados grandes e varreduras de agregação geralmente aparecem aqui. - Coleções com tempo
totalconsistentemente alto: Estas são suas coleções mais quentes. Monitore de perto seus índices, conjunto de trabalho e padrões de consulta.
Entendendo o mongostat
mongostat fornece uma visão geral mais ampla e em tempo real do desempenho e utilização de recursos de uma instância MongoDB. Ele coleta e exibe uma variedade de métricas sobre o estado do servidor, incluindo operações por segundo, tráfego de rede, E/S de disco e uso de memória.
Principais Métricas Fornecidas pelo mongostat:
- insert: Operações por segundo para inserções.
- query: Operações por segundo para consultas.
- update: Operações por segundo para atualizações.
- delete: Operações por segundo para exclusões.
- getmore: Operações por segundo para operações getmore (usadas para cursores).
- command: Operações por segundo para comandos.
- dirty ou dirty %: Dados modificados no cache WiredTiger na memória, mas ainda não gravados no disco. O nome exato da coluna depende da versão do MongoDB e da ferramenta.
- used ou used %: Uso do cache WiredTiger. O nome exato da coluna depende da versão do MongoDB e da ferramenta.
- conn: Número atual de conexões.
- networkIn: Tráfego de rede recebido pelo servidor (em bytes).
- networkOut: Tráfego de rede enviado pelo servidor (em bytes).
- res: Tamanho da memória residente usada pelo processo MongoDB (em MB).
- qr|qw: Número de operações de leitura e gravação enfileiradas, quando a coluna está disponível.
- ar|aw: Número de clientes de leitura e gravação ativos, quando a coluna está disponível.
Como Usar o mongostat:
mongostat também é um utilitário de linha de comando. Semelhante ao mongotop, ele atualiza periodicamente, com um intervalo padrão de 5 segundos. Você pode especificar um intervalo diferente e detalhes de conexão.
mongostat
Para especificar um intervalo de atualização (por exemplo, a cada 2 segundos):
mongostat 2
Para conectar a uma instância MongoDB remota:
mongostat --host <hostname> --port <porta>
Interpretando a Saída do mongostat:
- Altas taxas de
insert,query,updateoudelete: Indica carga operacional pesada. Monitore essas métricas juntamente com outras para entender se o sistema está acompanhando. - Alto
conn: Um grande número de conexões pode sobrecarregar os recursos do servidor. Investigue o pooling de conexões em sua aplicação se isso estiver inesperadamente alto. - Alto
networkInounetworkOut: Sugere transferência significativa de dados. Isso pode ser devido a consultas grandes, tráfego de replicação ou conjuntos de resultados grandes sendo retornados. - Alto
res: O processo MongoDB está consumindo muita RAM. Certifique-se de que seu servidor tenha memória suficiente e verifique consultas ineficientes ou grandes conjuntos de dados que possam contribuir para o alto uso de memória. - Alto
qr|qw: Indica que leituras ou gravações estão sendo enfileiradas, o que geralmente aponta para contenção de recursos ou uma carga de trabalho que o servidor não consegue processar rápido o suficiente. - Altos valores de
dirtyou cacheused: Se a pressão do cache WiredTiger permanecer alta, seu conjunto de trabalho pode não caber confortavelmente na memória, ou as gravações em disco podem estar atrasadas. - Consultas lentas com baixas taxas de operação: Use o profiler, o log de consultas lentas ou
explain()para verificar se as consultas estão varrendo muitos documentos. A saída moderna domongostatnão expõe de forma confiável uma única porcentagem de falta de índice para implantações WiredTiger.
Casos de Uso Práticos e Cenários de Solução de Problemas
Cenário 1: Desempenho Lento da Aplicação
- Execute
mongostat: Observe as taxas deqr,aw,insert,query,update,delete. Seqrouawestiverem altos, ou se as taxas de operação estiverem altas, mas não parecerem estar processando rapidamente, sugere um acúmulo. - Execute
mongotop: Identifique quais coleções estão experimentando maisread msewrite ms. Uma coleção com alta atividade de gravação pode estar desacelerando outras operações. - Verifique os planos de consulta: Para as coleções quentes identificadas pelo
mongotop, executeexplain("executionStats")em consultas lentas representativas. - Analise
networkIn/networkOutnomongostat: Se estiverem excepcionalmente altos, procure por conjuntos de resultados grandes, agregações grandes ou tráfego de replicação.
Cenário 2: Alto Uso de CPU ou Memória
- Execute
mongostat: Monitoreres(memória residente) e uso de CPU (muitas vezes observável através de ferramentas do sistema comotopouhtop, masmongostatdá uma perspectiva específica do banco de dados). Altorespode se correlacionar com o cache do WiredTiger (used %). - Examine
mongotop: Altos ms de leitura/gravação em coleções específicas podem contribuir para alto uso de CPU. - Observe as taxas de operação do
mongostat: Se inserções/atualizações/exclusões forem extremamente altas, isso naturalmente consome CPU. - Investigue o cache WiredTiger e métricas de disco: Se o cache sujo permanecer alto enquanto as gravações da aplicação diminuem, compare a saída do MongoDB com a latência do disco do host e a saturação de E/S.
Cenário 3: Atraso de Replicação
Embora mongotop e mongostat não meçam diretamente o atraso de replicação, eles são cruciais para entender a causa do atraso.
- Execute
mongostatno primário: Procure por altoqrouaw, altas taxas de operação de gravação ou alto uso de CPU/memória. Se o primário estiver sobrecarregado, ele não consegue escrever eficientemente em seu oplog, levando a atraso nos secundários. - Execute
mongostatno secundário: Observe suas operações de leitura/gravação. Se o secundário estiver lento para aplicar entradas do oplog, pode ser devido a recursos insuficientes no secundário ou consultas/operações ineficientes sendo aplicadas.
Dicas e Melhores Práticas
- Execute Ferramentas Regularmente: Não espere que problemas de desempenho surjam. Monitore suas instâncias MongoDB proativamente.
- Estabeleça Linhas de Base: Entenda como é o "normal" para sua implantação. Isso facilita a identificação de desvios.
- Combine com Outras Ferramentas:
mongotopemongostatsão excelentes para instantâneos em tempo real. Para análise histórica, considere usar o monitoramento de desempenho integrado do MongoDB (por exemplo,db.serverStatus(),db.stats()) ou ferramentas externas como Prometheus com o MongoDB Exporter, ou serviços de monitoramento de provedores de nuvem. - Entenda Seu Conjunto de Trabalho: Saber o tamanho do seu conjunto de dados ativo é crucial para o gerenciamento de memória e para entender a eficácia do cache WiredTiger.
- Foco nos Planos de Consulta: Use
explain("executionStats")e o log de consultas lentas para confirmar se índices ausentes ou ineficientes estão causando varreduras. - Considere o Pooling de Conexões: Altas contagens de
connpodem muitas vezes ser mitigadas implementando um pooling de conexões adequado na camada de sua aplicação.
Conclusão
Use mongostat para entender a pressão no nível do servidor e mongotop para encontrar as coleções que estão recebendo mais atenção de leitura ou gravação. Quando qualquer ferramenta apontar para uma área quente, confirme a causa com planos de consulta, logs de consultas lentas, métricas do host e comportamento de conexão da aplicação antes de alterar índices ou dimensionar a implantação.