Quando a utilização de operações de entrada/saída por segundo (IOPS) atinge ou se aproxima de 100% em uma instância do ApsaraDB for MongoDB, a instância pode responder lentamente ou ficar indisponível. Este tópico explica como verificar a utilização de IOPS e resolver problemas de alta utilização de IOPS.
Informações gerais
Para evitar que hosts concorram por recursos de I/O, a maioria dos provedores de banco de dados em nuvem utiliza técnicas como control groups (cgroups) para isolar recursos de I/O e limitar o IOPS. O limite máximo de IOPS varia de acordo com as especificações da instância.
Limitações de monitoramento
As métricas IOPS Usage e IOPS Usage (%) não podem ser exibidas no console do ApsaraDB for MongoDB para os seguintes tipos de instância:
Instâncias standalone
Instâncias de replica set que executam MongoDB 4.2 e usam discos em nuvem
Instâncias de sharded cluster que executam MongoDB 4.2 e usam discos em nuvem
Nessas instâncias, as duas métricas aparecem como 0 na página Monitoring Data. O valor 0 não reflete o uso real de IOPS.
Verificar a utilização de IOPS
Use um dos seguintes métodos:
Faça login no console do ApsaraDB for MongoDB. Na página Basic Information, localize a seção Specification Information para ver o IOPS máximo da sua instância. Para os limites de IOPS por tipo de instância, consulte Tipos de instância.
Faça login no console do ApsaraDB for MongoDB. Na página Monitoring Data, revise as métricas IOPS Usage e IOPS Usage (%) para verificar o consumo atual de IOPS. Para definições das métricas, consulte Itens e métricas de monitoramento.
Causas comuns
A alta utilização de IOPS geralmente é causada por um dos seguintes fatores:
Memória insuficiente: um cache maior armazena mais dados ativos (hot data), reduzindo os recursos de I/O em disco necessários e diminuindo a probabilidade de gargalos de I/O. Um cache menor armazena menos dados ativos. O sistema descarrega páginas sujas para o disco com mais frequência, aumentando a pressão de I/O e elevando a probabilidade de gargalos.
Problemas de parâmetros ou configuração: as configurações incorretas mais comuns incluem atualizações frequentes de logs de journal ou logs de runtime, um Write Concern configurado incorretamente ou operações moveChunk inválidas em uma instância de sharded cluster.
Solucionar o problema imediato
Execute as seguintes ações para reduzir o IOPS imediatamente:
Controle threads simultâneas de escrita e leitura
O MongoDB é uma aplicação multi-threaded. Volumes elevados de escritas simultâneas e consultas complexas podem causar gargalos de IOPS e introduzir lag de replicação contínua nos nós secundários. Para escalar horizontalmente o throughput de escrita, faça upgrade para uma instância de sharded cluster, que distribui os dados entre os shards.
Agende operações em lote nos horários de menor tráfego
Escritas em lote regulares ou persistência massiva de dados podem elevar o IOPS ao limite máximo da instância. Se as cargas de escrita de pico excederem a capacidade atual da instância, faça upgrade das configurações da instância para atender aos requisitos de escrita de pico. Para suavizar o padrão de escrita e evitar picos simultâneos, adicione um offset de timestamp aleatório a cada operação de escrita em lote.

Agende operações de O&M nos horários de menor tráfego
As tarefas de operações e manutenção (O&M) que afetam significativamente o desempenho de I/O incluem escritas, atualizações ou exclusões em lote, adição de índices, execução de operações compact em coleções e exportações de dados em lote. Execute essas tarefas nos horários de menor tráfego para evitar concorrência com as cargas de trabalho de produção.
Implementar uma solução de longo prazo
Aborde a causa raiz com as seguintes estratégias:
Dimensione corretamente sua instância
Dimensione sua instância de modo que a utilização de pico diário de CPU e IOPS permaneça abaixo de 50%. A proporção entre dados ativos e o tamanho do cache é difícil de prever antecipadamente.
Otimize os índices
Varreduras completas de tabela e índices mal selecionados são causas comuns de alta utilização de IOPS. As causas específicas incluem:
Consultas que varrem coleções inteiras consomem grandes volumes de I/O.
Índices superdimensionados reduzem a quantidade de dados ativos que o cache do WiredTiger consegue armazenar.
Cada operação de escrita requer mais de uma operação de I/O para atualizar os índices associados.
Crie índices adequados para reduzir o I/O desnecessário e manter no cache os dados acessados com frequência.