Por que estou com consultas de execução lenta no meu cluster do Amazon DocumentDB?
Quero solucionar problemas de consultas de execução lenta no meu cluster do Amazon DocumentDB (compatível com MongoDB) para melhorar o desempenho.
Resolução
É possível enfrentar consultas de execução lenta em seu cluster do Amazon DocumentDB pelos seguintes motivos:
- Hardware subdimensionado
- Mudanças no workload
- Aumento do tráfego
- Problemas de memória
- Planos de consulta abaixo do ideal
Monitore seu workload
Para entender a causa raiz dos problemas de desempenho do seu banco de dados, verifique todos os recursos do servidor que sua instância usa. Monitore seu workload e investigue quando o desempenho da consulta foi ideal e quando a consulta começou a levar muito tempo para ser executada.
Use as métricas do Amazon CloudWatch
Use as métricas do CloudWatch para o Amazon DocumentDB para analisar o desempenho do seu cluster. Para identificar gargalos de desempenho causados por recursos insuficientes, use métricas como CPUUtilization e FreeableMemory. Para entender a otimização da memória, use métricas como BufferCacheHitRatio e LowMemNumOperationsThrottled.
Monitore as métricas de nível operacional para entender o workload em sua instância. Métricas úteis, como DocumentsInserted, DocumentsReturned, DocumentsDeleted e TransactionsAborted. Para obter mais informações, consulte Monitoring metrics and setting up alarms on your Amazon DocumentDB (with MongoDB compatibility) clusters (Monitoramento de métricas e configuração de alarmes em seus clusters do Amazon DocumentDB (compatível com MongoDB)).
Use o Insights de Performance
Use o Insights de Performance para avaliar seus workloads de banco de dados divididos por esperas, consultas, hosts, bancos de dados e aplicações. Capture informações do contador e informações detalhadas da consulta e avalie quais consultas contribuem mais para a carga do banco de dados. Uma carga de banco de dados maior que o valor máximo de vCPU mostra um workload limitado na classe da instância. Analise o texto da consulta para ajudar a ajustar suas consultas.
Use logs do Profiler
Use o profiler do Amazon DocumentDB para registrar em log o tempo de execução e os detalhes das operações que são executadas em seu cluster. O profiler permite que você monitore as operações mais lentas em seu cluster. Isso te ajuda a melhorar o desempenho de consultas individuais e o desempenho geral do cluster.
Use métodos de banco de dados
Execute o seguinte comando currentOp() na sua instância do Amazon DocumentDB periodicamente para monitorar o uso do sistema ao longo do tempo:
db.adminCommand({currentOp: 1, $all: 1});
Para contar o número de consultas e operações em cada namespace no sistema, execute o seguinte comando:
db.adminCommand({ aggregate: 1, pipeline: [ { $currentOp: { allUsers: true, idleConnections: true } }, { $group: { _id: { desc: "$desc", ns: "$ns", WaitState: "$WaitState" }, count: { $sum: 1 } } } ], cursor: {} });
Depois de executar o comando, analise os resultados do uso do sistema para entender a carga no sistema e tomar as ações apropriadas.
Otimize suas consultas
Depois de identificar consultas de longa duração, ajuste suas consultas para melhorar o desempenho delas.
Use o planejador de consultas correto
Para melhorar o desempenho, use planos de indexação ideal e ative o suporte à varredura de índices para seus operadores. No Amazon DocumentDB versão 5.0 e posterior, use o planejador versão 2.0 para usar um planejador avançado de consultas que otimiza operações fundamentais, como comandos de busca, atualização, exclusão e localização e modificação. Para padrões de consulta específicos em que o índice ideal não é escolhido, isso adiciona suporte ao atributo de filtro de cache do plano, que permite especificar uma lista de índices que formam uma consulta específica.
Analise as estatísticas de uma consulta
Para otimizar o desempenho da consulta, use executionStats para analisar como suas consultas são executadas. O executionStats fornece o número de documentos processados em cada estágio da consulta, a duração do tempo de execução de cada estágio e o número de tentativas feitas para gerar um plano de consulta.
Para ver as estatísticas da sua consulta, execute o seguinte comando:
query.explain("executionStats");
Exemplo de operação:
db.collection.find({}).limit(2).explain("executionStats");
O exemplo de operação anterior analisa o desempenho de uma consulta quando você tenta localizar dois documentos.
Analise as estatísticas retornadas. É possível adicionar um índice para reduzir as varreduras completas da coleção e limitar o número de documentos que a consulta deve varrer. É uma prática recomendada testar qualquer novo índice e avaliar o desempenho. Use a opção de clonagem ou de restauração de snapshots para criar um ambiente de teste.
Verifique se há índices ineficientes em sua instância
Cada índice gera latência de gravação, uso da CPU, operações de E/S e armazenamento geral utilizado extras em seu recurso. Embora os índices possam melhorar o desempenho da consulta, é uma prática recomendada analisar seus índices periodicamente e remover índices não utilizados.
Para ver um detalhamento da frequência com que cada índice é acessado, execute um comando semelhante ao exemplo a seguir:
db.collection.aggregate([{$indexStats:{}}]).pretty()
Para visualizar o número total de varreduras que foram realizadas em índices (varreduras de índice), execute o seguinte comando:
db.collection.stats()
Compare a contagem da consulta anterior com o número de varreduras realizadas sem um índice (varreduras de coleção). Em seguida, analise com que frequência as operações usam índices quando acessam uma coleção.
Feche os cursores inativos na sua instância
As instâncias do Amazon DocumentDB têm um limite de cursores ativos abertos em um determinado momento. O tipo de instância que você usa determina esse limite. Para obter mais informações, consulte Limites de instâncias. Use o CloudWatch para monitorar a métrica DatabaseCursors no CloudWatch para verificar a contagem de cursores que estão abertos.
Para ver mais detalhes sobre cursores abertos, execute um comando semelhante ao exemplo a seguir:
db.runCommand("listCursors")
É uma prática recomendada fechar os cursores depois de usá-los para evitar o controle de utilização. Os cursores inativos utilizam CPU e memória para monitorar a fila associada a eles.
Informações relacionadas
Solução de problemas de performance e utilização de recursos
- Tópicos
- Database
- Idioma
- Português

Conteúdo relevante
- feita há 8 meses
- feita há 8 meses
AWS OFICIALAtualizada há 6 meses
AWS OFICIALAtualizada há 8 meses
AWS OFICIALAtualizada há 6 meses