Melhorando o desempenho do MongoDB com recomendações de índices

0

Hoje trazendo um conteúdo originalmente escrito por Jay Gordon, vou falar sobre o novo recurso de recomendação de índices agora disponível no MongoDB Atlas.

Além de uma boa modelagem de dados, existem alguns processos que as equipes responsáveis pela otimização do desempenho da consulta podem aproveitar: procurando COLLSCANS em logs, analisando explain results, ou confiando em ferramentas de terceiros.

O MongoDB Atlas, serviço de banco de dados totalmente gerenciado, ajuda você a resolver problemas de desempenho com um maior nível de facilidade, fornecendo ferramentas para garantir que seus dados sejam acessados da forma mais eficiente possível. Esse artigo mostrará uma visão geral básica sobre como acessar o MongoDB Atlas Performance Advisor, uma ferramenta que analisa suas consultas por até duas semanas e fornece recomendações de índices quando necessário.

Começando

Este pequeno tutorial utiliza os seguintes recursos:

  • Um data set de demonstração gerado com o mgodatagen
  • Um cluster no MongoDB Atlas (o Performance Advisor está disponível para M10 ou maior)
  • MongoDB shell instalado (para criar índices)

Meu banco de dados tem dois milhões de documentos em duas coleções separadas:

Se uma aplicação tentar acessar esses documentos sem os índices nos lugares certos, ocorrerá um collection scan. O banco de dados percorrerá a coleção completa para encontrar dos documentos necessários e todos os documentos que não estão na memória serão lidos do disco. Isso pode reduzir drasticamente o desempenho e fazer com que sua aplicação responda mais devagar do que o esperado.

Neste caso, quando tento executar uma consulta sem índice, o MongoDB Atlas criará automaticamente um alerta indicando que a consulta não está bem segmentada.

Revisando o Performance Advisor

O Performance Advisor monitora as consultas com execução lenta (qualquer coisa que leve mais de 100 milissegundos para executar) e sugere novos índices para melhorar o desempenho da consulta.

Para acessar esta ferramenta, vá até o painel de controle do Atlas e clique no nome do seu cluster. Você encontrará “Performance Advisor” no topo.

Clique no link e você será levado para a página onde vai ver recomendações relevantes de índice, com base no período de tempo fixado no topo da página.

Neste exemplo, vou analisar o desempenho das minhas consultas nas últimas 24 horas. O Performance Advisor me fornece algumas recomendações sobre como melhorar a velocidade das consultas lentas:

Parece que a coleção test com o campo “name” pode usar um índice. Podemos ver as mudanças específicas a serem feitas clicando no botão “More Info”.

Posso copiar o conteúdo desta recomendação e colar no meu MongoDB Shell para criar o índice recomendado. Você notará que uma opção especial, {background: true}, é passada com o comando createIndex. O uso deste comando garante que a criação do índice não bloqueie nenhuma operação. Se você estiver construindo novos índices em ambientes de produção, recomendo que você leia mais sobre as operações de construção de índice.

Agora que o índice recomendado foi criado, posso rever o desempenho da minha aplicação e ver se ele atende aos requisitos dos meus usuários. Os alertas do Atlas que recebi anteriormente foram resolvidos, o que é um bom sinal:

Perda de performance em consultas desindexadas prejudicam a experiência do usuário em sua aplicação, o que pode resultar na redução do engajamento ou atrito com clientes. O Performance Advisor no MongoDB Atlas oferece uma maneira simples de garantir que você aproveite ao máximo os recursos provisionados em seu cluster.

Para começar, entre para o MongoDB Atlas e implemente um cluster em minutos.

É isso, espero que tenham gostado! Fiquem à vontade para compartilhar e comentar, se quiser conferir o artigo original em inglês clique aqui.

Até mais!

Compartilhe.

Sobre o autor

Formado em Tecnologia da Informação, entusiasta de tecnologias open-source, bigdata e NoSQL. MongoDB Evangelist, Top 50 Certificado em Neo4j, utiliza MongoDB e SQL Server criando aplicações em NodeJS há 3 anos. CTO / Co-owner da Infinity Data uma empresa de tecnologia voltada para dados.