Ir para o conteúdo

Como solucionar problemas e resolver a alta utilização da CPU em minhas instâncias do Amazon DocumentDB?

8 minuto de leitura
0

Quero solucionar problemas de alta utilização da CPU em minhas instâncias do Amazon DocumentDB (compatível com MongoDB).

Breve descrição

A utilização da CPU das suas instâncias do Amazon DocumentDB te ajuda a entender o desempenho dos recursos atualmente alocados no workload em cursp.

É possível ver um aumento na utilização da CPU pelos seguintes motivos:

  • Workloads pesados iniciados pelo usuário
  • Consultas não eficientes
  • O gravador no cluster está sobrecarregado porque a carga de leitura não está balanceada no cluster
  • O leitor tem uma configuração de hardware inferior à do gravador e não consegue sincronizar com o alto workload de gravação
  • Tarefas internas, como coleta de resíduos no cluster do Amazon DocumentDB
  • Muitas conexões de banco de dados (ociosas)
  • Intermitências curtas de conexões

Resolução

Use as métricas do Amazon CloudWatch

Use o CloudWatch para reunir e analisar métricas operacionais em seus clusters. Use as métricas do CloudWatch para identificar a CPU e seus padrões métricos proporcionais durante longos períodos.

Analise e monitore as seguintes métricas no console do CloudWatch:

  • Use DatabaseConnections e DatabaseConnectionsMax para identificar o número de conexões abertas em uma linha de tempo relevante.
  • Use WriteIOPs, ReadIOPs, ReadThroughput e WriteThroughput para entender o workload geral em sua instância do Amazon DocumentDB.
  • Use DocumentsDeleted, DocumentsInserted, DocumentsReturned e DocumentsUpdated para entender o workload do usuário em sua instância do Amazon DocumentDB.
  • Se você usa as classes de instância T3 ou T4, analise CPUCreditBalance e CPUSurplusCreditBalance para verificar o controle de utilização computacional.

Use métricas do Insights de Performance

Use o Insights de Performance do Amazon DocumentDB para identificar consultas que contribuem para a carga do banco de dados e o estado de espera. Na opção Gerenciar métricas, use a média de sessões ativas para analisar a carga e a distribuição da CPU (sistema, usuário ou total).

Uma carga pesada ocorre quando a média de carga excede o número de vCPUs na instância. No entanto, se a média de carga for menor que a contagem de vCPUs na classe de instância de banco de dados, o controle de utilização da CPU pode não ser a causa da latência da sua aplicação. Para identificar a causa do aumento do uso da CPU, analise a média de carga e analise os estados de espera relacionados a E/S, bloqueios e travas.

Use consultas nativas de banco de dados

Use consultas nativas para te ajudar a analisar o workload e verificar o uso da CPU. Para listar todas as operações atualmente executadas em uma instância do Amazon DocumentDB, use o shell do MongoDB para executar a seguinte consulta:

db.adminCommand({currentOp: 1, $all: });

Para listar todas as consultas bloqueadas ou executadas por mais de 10 segundos, execute a seguinte consulta que usa o comando currentOp:

db.adminCommand({
    aggregate: 1,
    pipeline: [
        {$currentOp: {}},
        {$match: {
            $or: [
                {secs_running: {$gt: 10}},
                {WaitState: {$exists: true}}
            ]
        }},
        {$project: {
            _id:0,
            opid: 1,
            secs_running: 1,
            WaitState: 1,
            blockedOn: 1,
            command: 1
        }}
    ],
    cursor: {}
});

Para analisar os resultados de uso do sistema, execute a seguinte consulta na instância em que você observa uso elevado da CPU:

db.adminCommand({
    aggregate: 1,
    pipeline: [
        {
            $currentOp: {
                allUsers: true,
                idleConnections: true
            }
        },
        {
            $group: {
                _id: {
                    desc: "$desc",
                    ns: "$ns",
                    WaitState: "$WaitState"
                },
                count: {
                    $sum: 1
                }
            }
        }
    ],
    cursor: {}
});

Essa consulta retorna um agregado de todas as consultas executadas em cada namespace. Ela também lista todas as tarefas internas do sistema e o número exclusivo de estados de espera por namespace.

Observação: a métrica GARBAGE_COLLECTION nas tarefas internas é a implementação do controle de concorrência multiversão (multi-version concurrency control, MVCC) no cluster do Amazon DocumentDB. Essa é uma varredura em segundo plano que remove versões inativas de documentos e está relacionada ao número de atualizações ou exclusões de seu banco de dados. O Amazon DocumentDB inicia o processo de varredura com base nos limites internos em um nível de coleção e resulta em IOPs de leitura ou gravação e uso da CPU.

Verifique a eficiência das consultas

Verifique a sobrecarga do índice em consultas de gravação

Índices excessivos ou não utilizados podem retardar as operações de gravação. Para melhorar o desempenho, verifique as estatísticas de uso do seu índice para identificar e remover índices desnecessários.

Verifique o plano de explicação da consulta

Quando uma consulta precisa pesquisar todos os documentos em uma coleção, ela se torna lenta. Crie índices apropriados para melhorar a velocidade da consulta.

Use o comando explain para identificar os campos nos quais você deseja criar índices. Também é possível usar os logs do profiler para capturar consultas de longa execução e os detalhes de suas operações.

Verifique as estatísticas das coleções

Verifique as estatísticas a seguir nas coleções que você usa:

  • Examine a seção Principais consultas no Insights de Performance para identificar as coleções que mais contribuem para a carga.
  • Analise as estatísticas da coleção para entender quantas operações de inserção, atualização e exclusão o DocumentDB executa. Também é possível verificar quantas varreduras de índice e varreduras completas de coleção ocorrem.
  • Divida suas coleções para reduzir o tamanho do documento a ser processado, especialmente se você tiver um grande número de operações de atualização.

Verifique as configurações de registro em log agressivo

O Amazon DocumentDB prioriza a auditoria de eventos em relação ao tráfego do banco de dados. Se você não precisar de auditoria, pode desativá-la. Se você precisar de auditoria, defina o parâmetro audit_logs para registrar em log somente os eventos necessários. Planeje o aumento da carga e mude para uma classe de instância maior, se necessário.

Para evitar o registro em log agressivo dos logs do profiler, certifique-se de que você definiu o valor correto do parâmetro profiler_threshold_ms. Analise o workload da sua aplicação para identificar o limite correto necessário para categorizar uma consulta como de longa execução.

Confirme se você ativou a opção exportação de logs nos logs que você deseja exportar para o CloudWatch.

Use práticas recomendadas

Descarregue o workload de leitura para o leitor

Se você tiver várias instâncias de banco de dados em um cluster do Amazon DocumentDB, descarregue o workload de leitura para sua instância de leitura. Ao se conectar como um conjunto de réplicas, especifique readPreference para a conexão. Se você especificar uma preferência de leitura de secondaryPreferred, o cliente tenta rotear as consultas de leitura para suas réplicas. O cliente tenta rotear consultas de gravação para sua instância de banco de dados primária.

Observação: leitores têm uma consistência eventual. Se um workload exigir uma consistência mais forte de leitura após gravação, use a preferência de leitura dinâmica e substitua-a no nível da consulta. Por exemplo, é possível usar secondaryPreferred como padrão no nível da conexão para que as consultas sejam enviadas para secundário. Se você tiver consultas que exijam maior consistência de leitura após gravação, pode substituir o padrão e ler a partir do nó primário.

Exemplo:

db.collection.find().readPref("primary")

Adicione uma ou mais instâncias de leitor ao cluster

Se você tiver um cluster do Amazon DocumentDB com uma única instância de banco de dados (somente gravador), adicione uma ou várias instâncias de banco de dados do leitor ao cluster. Em seguida, use readPreference=secondaryPreferred para lidar com a carga de maneira eficaz.

Use o Amazon DocumentDB Profiler para identificar consultas lentas

Use o Amazon DocumentDB Profiler para registrar em log as consultas lentas. Se uma consulta aparecer repetidamente nos logs de consulta lenta, talvez você precise de um índice extra para aprimorar o desempenho.

Verifique se há consultas de longa duração que incluam estágios COLLSCAN em seu plano de execução. Um estágio COLLSCAN significa que a consulta deve ler todos os documentos da coleção para fornecer uma resposta à consulta.

Para obter mais informações, consulte Profiling slow-running queries in Amazon DocumentDB (with MongoDB compatibility) (Criação de perfis de consultas de execução lenta no Amazon DocumentDB (compatível com MongoDB)).

Crie uma notificação de alarme com o CloudWatch

Crie um alarme do CloudWatch que te notifique quando a métrica de utilização da CPU exceder um limite específico.

Aumente a escala verticalmente da classe de instância das suas instâncias de banco de dados

Se não houver mais escopo de ajuste de consulta, aumente a escala verticalmente da classe de instância de instâncias no cluster para lidar com o workload.

Observação: se você aumentar a escala verticalmente de uma classe de instância, isso aumentará o custo. Para obter mais informações, consulte Preços do Amazon DocumentDB (compatível com MongoDB).

Informações relacionadas

Escalar clusters do Amazon DocumentDB

Solução de problemas de performance e utilização de recursos

How to index on Amazon DocumentDB (with MongoDB compatibility) (Como indexar no Amazon DocumentDB (compatível com MongoDB))

AWS OFICIALAtualizada há 8 meses