Identificação do motivo pelo qual o uso da CPU de instâncias de BD do RDS for MySQL é alto e fornecimento de soluções
Se o uso da CPU da instância do RDS for MySQL for alto ou próximo de 100%, o desempenho do banco de dados se deteriorará. Por exemplo, a leitura/gravação de dados fica lenta, a conexão com a instância leva mais tempo ou erros são relatados quando você tenta excluir dados.
As seguintes funções do Data Admin Service (DAS) estão disponíveis apenas para as contas que as usam, a partir de 25 de novembro de 2021, 00:00 GMT+08:00: ajuste SQL, comparação e sincronização de estrutura de tabela, rastreamento e reversão de dados, gerador de dados e O&M inteligente do DBA na Ferramenta de desenvolvimento, bem como espaço, recomendação de parâmetros inteligentes, transações históricas e funções de análise de binlog na O&M Inteligente.
- Para instâncias de BD criadas após 25 de novembro de 2021, 00:00 GMT+08:00, Solução 1 é recomendada.
- Para instâncias de BD criadas antes de 25 de novembro de 2021, 00:00 GMT+08:00, Solução 2 é recomendada.
É aconselhável ativar a auditoria de SQL com antecedência para que você possa exibir os registros de execução SQL nos logs de auditoria para localizar a falha quando o uso da CPU for alto.
Solução 1
Analise logs de SQL lentos e o uso da CPU para localizar consultas lentas e, em seguida, otimizá-las.
- Exiba os logs de SQL lentos para verificar consultas SQL executadas lentamente e exiba suas características de desempenho (se houver) para localizar a causa.
Para obter detalhes sobre como visualizar logs do RDS for MySQL, consulte Log de consulta lenta.
- Visualize a métrica de uso da CPU da sua instância de BD.
Para obter detalhes, consulte Desempenho.
- Crie réplicas de leitura para reduzir a pressão de leitura das instâncias de BD primárias.
- Adicione índices para campos associados em consultas de associação de várias tabelas.
- Não use a instrução SELECT para fazer a varredura de todas as tabelas. Você pode especificar campos ou adicionar a condição WHERE.
Solução 2
Você pode identificar instruções de consulta lenta e otimizá-las de acordo com as sugestões fornecidas pelo DAS para reduzir o uso da CPU.
- Conecte-se à instância de BD do RDS for MySQL.
Você pode se conectar a uma instância por meio de uma rede privada ou pública. Para obter detalhes, consulte Primeiros passos do Relational Database Service.
- Execute o seguinte comando para mostrar os threads em execução e localizar as consultas que são executadas lentamente:
show full processlist
Verifique os valores nas colunas Time e State. Conforme mostrado na figura anterior, o ID de transação de longa duração é 4038566.
- Use o diagnóstico SQL do DAS para identificar instruções SQL que são executadas com frequência, consomem uma grande quantidade de recursos ou levam muito tempo para serem executadas. Você pode otimizar as instruções de acordo com as sugestões de diagnóstico para garantir a estabilidade do desempenho do banco de dados.
- Efetue logon no console do DAS.
- No painel de navegação, escolha Intelligent O&M > Instance List.
- Clique em Details na instância.
Figura 1 Lista de instâncias
- Escolha SQL > SQL Diagnosis.
- Selecione um banco de dados, digite uma instrução SQL e clique em Diagnose.
Figura 2 Diagnóstico de SQL
- Visualize os detalhes do diagnóstico e obtenha sugestões de otimização de instruções.
Figura 3 Detalhes do ajuste
- Somente o diagnóstico das instruções SELECT, INSERT, UPDATE e DELETE é suportado. Uma instrução INSERT deve conter uma cláusula SELECT.
- Instruções SQL para consultar bancos de dados do sistema como information_schema, test e mysql não são suportadas.
- As instruções SQL que usam exibições não são suportadas.
- Usar o diagnóstico SQL pode obter a estrutura da tabela e informações de distribuição de dados (não original). As informações obtidas são usadas apenas para diagnóstico lógico, mas não são armazenadas no servidor do DAS.
- A obtenção de informações sobre a estrutura da tabela e a distribuição de dados pode causar carga adicional na instância de BD, mas tem pouco impacto em seu desempenho.
- Somente o histórico de diagnóstico de SQL é armazenado no servidor do DAS. Você pode excluí-lo do servidor permanentemente.