Ajuste de desempenho do RDS for MySQL – resolução de problemas de I/O alta
Esta seção descreve como solucionar problemas de I/O alta para instâncias de BD do RDS for MySQL. O desempenho de I/O de sua instância depende de três fatores: a mídia de armazenamento, a arquitetura do mecanismo de banco de dados e as instruções SQL que são executadas para verificar ou modificar uma quantidade específica de dados.
I/O alta causada pelo alta taxa de transferência
- Sintoma
Se sua aplicação frequentemente iniciar solicitações para atualizar, excluir e inserir dados nas tabelas que contêm muitos índices ou campos grandes, a I/O de sua instância aumentará significativamente devido às leituras de dados e às descargas de páginas sujas.
Para exibir o desempenho de leitura/gravação, clique em View Metrics na coluna Operation.
- Solução
Modifique parâmetros de instância para reduzir a frequência de leitura/gravação, atualizar especificações de instância ou ajustar as configurações de parâmetros de limpeza de página suja. Os parâmetros de limpeza de página suja são explicados da seguinte forma:
innodb_max_dirty_pages_pct: a porcentagem de páginas sujas permitidas no pool de buffer. Valor padrão: 75.
innodb_io_capacity: o número máximo de operações de I/O permitidas pelo InnoDB por segundo para cada tarefa em segundo plano. O valor desse parâmetro afeta a velocidade com que o RDS libera páginas sujas no disco e a velocidade com que o RDS grava dados no pool de buffer. O valor padrão varia dependendo do tipo de disco.
innodb_io_capacity_max: o número máximo de operações de I/O permitidas pelo InnoDB por segundo para cada tarefa em segundo plano quando a atividade de descarga fica atrasada. O valor deste parâmetro é maior que o valor de innodb_io_capacity. O valor padrão de innodb_io_capacity_max é 40000.
I/O alta causada por tabelas temporárias
- Sintoma
Se o tamanho do diretório temporário for muito grande, o RDS pode ter criado tabelas temporárias grandes devido a operações como a classificação e a desduplicação de instruções SQL lentas. Isso aumenta a I/O da instância. As gravações de dados em tabelas temporárias também aumentam a I/O da instância.
Para exibir a criação da tabela temporária, clique em EView Metrics na coluna Operation.
- Solução
Na página Slow Query Logs do console do RDS, baixe e visualize as instruções SQL que são executadas lentamente. Analise as informações, como a duração da execução das instruções SQL lentas, e otimize as instruções SQL com base no resultado da análise.
- Para obter detalhes sobre como baixar logs de consultas lentas, consulte Visualização e baixa de logs de consultas lentas.
- Para obter detalhes sobre como otimizar instruções SQL lentas, consulte Solução de problemas de SQL lentos para instâncias de BD do RDS for MySQL.
I/O alta causada por leituras de dados frios
- Sintoma
Se os dados que são consultados ou modificados usando instruções SQL não puderem ser atingidos no pool de buffer, o RDS precisará ler os dados dos discos. Isso pode aumentar significativamente a I/O da sua instância.
Para exibir a taxa de acertos do pool de buffers, clique em View Metrics na coluna Operation.
- Solução
Redesenhe a política de cache com base no seu cenário de serviço ou atualize as especificações da instância.
I/O alta causada por gravações de binlog de grandes transações
- Sintoma
Uma transação só grava registros de log em arquivos binlog quando é confirmada. Se o aplicativo executar uma transação grande, a transação poderá gravar algumas dezenas de GB de dados em arquivos binlog, por exemplo, se a transação contiver uma instrução DELETE usada para excluir um grande número de linhas. Quando esses arquivos binlog são descarregados no disco, a I/O da instância aumenta significativamente.
Introdução ao sistema de I/O de InnoDB
O InnoDB usa um sistema de I/O independente para ler e gravar páginas de dados. Se uma página de dados solicitada por uma instrução SQL não puder ser atingida no pool de buffers, as operações de I/O físicas serão executadas para ler e gravar dados no disco.
- Operações para ler páginas de dados
A interface de leitura subjacente é chamada com base na I/O síncrona para ler páginas de dados.
- Operações para gravar páginas de dados
Tomemos as descargas de páginas sujas, por exemplo. Os threads de I/O em segundo plano são chamados com base na I/O assíncrona para descarregar de forma assíncrona as páginas sujas no disco.
Além das operações de I/O em arquivos de dados comuns, várias outras operações também podem aumentar significativamente a I/O de sua instância. Essas operações incluem as operações para gravar redo logs, desfazer logs e binlogs, as operações para classificar tabelas temporárias e as operações para reconstruir tablespaces devido a instruções DDL.