Melhorar a performance das consultas para o RDS para MySQL com leituras otimizadas do Amazon RDS
É possível acelerar o processamento de consultas para o RDS para MySQL com leituras otimizadas do Amazon RDS. Uma instância de banco de dados ou um cluster de banco de dados multi-AZ do RDS para MySQL que utiliza o recurso Leituras otimizadas pelo RDS pode obter um processamento de consultas até duas vezes mais rápido em comparação com uma instância ou um cluster de banco de dados que não utiliza o recurso.
Tópicos
Visão geral das leituras otimizadas do RDS
Quando você usa uma instância de banco de dados ou um cluster de banco de dados multi-AZ do RDS para MySQL com o recurso Leituras otimizadas pelo RDS ativado, essa instância ou cluster de banco de dados obtém uma performance de consulta mais rápida por meio do uso de um armazenamento de instância. Um armazenamento de instância fornece armazenamento temporário em nível de bloco para a instância de banco de dados ou o cluster de banco de dados multi-AZ. O armazenamento está localizado em unidades de estado sólido (SSDs) Non-Volatile Memory Express (NVMe) anexadas fisicamente ao servidor host. Esse armazenamento é otimizado para baixa latência, performance de E/S aleatória muito alta e alto throughput de leitura de sequencial.
O recurso Leituras otimizadas pelo RDS é ativado por padrão quando uma instância de banco de dados ou um cluster de banco de dados multi-AZ utiliza uma classe de instância de banco de dados com um armazenamento de instância, como db.m5d ou db.m6gd. Com leituras otimizadas do RDS, alguns objetos temporários são armazenados no armazenamento de instâncias. Esses objetos temporários incluem arquivos temporários internos, tabelas temporárias internas em disco, arquivos de mapa de memória e arquivos de cache de log binário. Para ter mais informações sobre o armazenamento de instância, consulte Armazenamento de instância do Amazon EC2 no Amazon Elastic Compute Cloud Manual do usuário para instâncias do Linux.
As workloads que geram objetos temporários no MySQL para processamento de consultas podem aproveitar o armazenamento de instâncias para acelerar o processamento das consultas. Esse tipo de workload inclui consultas que envolvem classificações, agregações de hash, uniões de alta carga, expressões de tabela comuns (CTEs) e consultas em colunas não indexadas. Esses volumes de armazenamento de instâncias oferecem um nível superior de IOPS e performance, independentemente das configurações de armazenamento utilizadas para armazenamento persistente do Amazon EBS. Como as leituras otimizadas do RDS transferem operações em objetos temporários para o armazenamento de instâncias, as operações de entrada e saída por segundo (IOPS) ou o throughput do armazenamento persistente (Amazon EBS) agora podem ser utilizadas para operações em objetos persistentes. Essas operações incluem leituras e gravações regulares de arquivos de dados e operações do mecanismo em segundo plano, como limpar e inserir mesclagens de buffer.
nota
Os snapshots manuais e automatizados do RDS contêm apenas arquivos de mecanismo para objetos persistentes. Os objetos temporários criados no armazenamento de instâncias não estão incluídos nos snapshots do RDS.
Casos de uso para leituras otimizadas do RDS
Se você tem workloads que dependem muito de objetos temporários, como tabelas ou arquivos internos, para a execução de consultas, você pode se beneficiar da ativação de leituras otimizadas do RDS. Os seguintes casos de uso são candidatos para leituras otimizadas do RDS:
-
Aplicações que executam consultas analíticas com expressões de tabela comuns (CTEs) complexas, tabelas derivadas e operações de agrupamento
-
Réplicas de leitura que oferecem tráfego de leitura intenso com consultas não otimizadas
-
Aplicações que executam consultas de relatórios dinâmicos ou sob demanda que envolvem operações complexas, como consultas com as cláusulas
GROUP BY
eORDER BY
-
Workloads que utilizam tabelas temporárias internas para processamento de consultas
Você pode monitorar a variável de status do mecanismo
created_tmp_disk_tables
para determinar o número de tabelas temporárias baseadas em disco criadas em sua instância de banco de dados. -
Aplicações que criam grandes tabelas temporárias, diretamente ou em procedimentos, para armazenar resultados intermediários
-
Consultas de banco de dados que realizam agrupamento ou classificação em colunas não indexadas
Práticas recomendadas para leituras otimizadas do RDS
Use as práticas recomendadas a seguir para leituras otimizadas do RDS:
-
Adicione uma lógica de repetição para consultas somente leitura caso elas falhem devido ao armazenamento de instância estar cheio durante a execução.
-
Monitore o espaço de armazenamento disponível no armazenamento de instâncias com a métrica do CloudWatch
FreeLocalStorage
. Se o armazenamento de instâncias estiver atingindo seu limite devido à workload na instância de banco de dados, modifique a instância de banco de dados para utilizar uma classe de instância de banco de dados maior. -
Quando sua instância de banco de dados ou cluster de banco de dados multi-AZ tiver memória suficiente, mas ainda estiver atingindo o limite de armazenamento no armazenamento de instância, aumente o valor de
binlog_cache_size
para manter as entradas de log binário específicas da sessão na memória. Essa configuração impede a gravação das entradas de log binário em arquivos temporários de cache de log binário no disco.O parâmetro
binlog_cache_size
é específico da sessão. É possível alterar o valor de cada nova sessão. A configuração desse parâmetro pode aumentar a utilização da memória na instância de banco de dados durante a workload de pico. Portanto, considere aumentar o valor do parâmetro com base no padrão de workload de sua aplicação e na memória disponível na instância de banco de dados. -
Utilize o valor padrão de
MIXED
para obinlog_format
. Dependendo do tamanho das transações, definirbinlog_format
comoROW
pode ocasionar arquivos de cache de log binário grandes no armazenamento de instâncias. -
Defina o parâmetro internal_tmp_mem_storage_engine
como TempTable
e defina o parâmetro temptable_max_mmappara corresponder ao tamanho do armazenamento disponível no armazenamento de instâncias. -
Evite realizar alterações em massa em uma única transação. Esses tipos de transações podem gerar arquivos de cache de log binário grandes no armazenamento de instâncias e causar problemas quando o armazenamento de instâncias está cheio. Considere dividir as gravações em várias transações pequenas para minimizar o uso de armazenamento para arquivos de cache de log binário.
-
Utilize o valor padrão de
ABORT_SERVER
para o parâmetrobinlog_error_action
. Isso evita problemas com o registro em log binário em instâncias de banco de dados com backups ativados.
Utilizar leituras otimizadas do RDS
Quando você provisiona uma instância de banco de dados do RDS para MySQL com uma das classes de instância de banco de dados a seguir em uma implantação de instância de banco de dados single-AZ, uma implantação de instância de banco de dados multi-AZ ou uma implantação de cluster de banco de dados multi-AZ, a instância de banco de dados utiliza automaticamente o recurso Leituras otimizadas pelo RDS.
Para ativar as leituras otimizadas do RDS, execute um destes procedimentos:
-
Crie uma instância de banco de dados ou um cluster de banco de dados multi-AZ do RDS para MySQL utilizando uma dessas classes de instância de banco de dados. Para obter mais informações, consulte Criar uma instância de banco de dados do Amazon RDS.
-
Modifique uma instância de banco de dados ou um cluster de banco de dados multi-AZ existente do RDS para MySQL para utilizar uma dessas classes de instância de banco de dados. Para obter mais informações, consulte Modificar uma instância de banco de dados do Amazon RDS.
O recurso Leituras otimizadas pelo RDS está disponível em todas as Regiões da AWS onde há suporte para uma ou mais dessas classes de instância de banco de dados com SSD de NVMe local. Para obter informações sobre classes de instância de banco de dados, consulte Classes de instância de banco de dados do .
A disponibilidade da classe de instância de banco de dados difere em Regiões da AWS. Para determinar se uma classe de instância de banco de dados é compatível com uma Região da AWS específica, consulte Determinar o suporte para classes de instância de bancos de dados nas Regiões da AWS.
Se você não quiser utilizar o recurso Leituras otimizadas pelo RDS, modifique sua instância de banco de dados ou cluster de banco de dados multi-AZ para que não use uma classe de instância de banco de dados compatível com o atributo.
Monitorar instâncias de banco de dados que utilizam leituras otimizadas do RDS
Você pode monitorar instâncias de banco de dados que utilizam leituras otimizadas do RDS com as seguintes métricas do CloudWatch:
-
FreeLocalStorage
-
ReadIOPSLocalStorage
-
ReadLatencyLocalStorage
-
ReadThroughputLocalStorage
-
WriteIOPSLocalStorage
-
WriteLatencyLocalStorage
-
WriteThroughputLocalStorage
Essas métricas fornecem dados sobre armazenamento de instâncias, IOPS e throughput. Para ter mais informações sobre essas métricas, consulte Métricas específicas da instância do Amazon CloudWatch para Amazon RDS.
Limitações das leituras otimizadas do RDS
As seguintes limitações se aplicam às leituras otimizadas do RDS:
-
As leituras otimizadas do RDS são compatíveis com a versão 8.0.28 e posteriores do RDS para MySQL. Para obter informações sobre as versões do RDS para MySQL, consulte MySQL em versões do Amazon RDS.
-
Você não pode alterar a localização de objetos temporários para armazenamento persistente (Amazon EBS) nas classes de instância de banco de dados compatíveis com leituras otimizadas do RDS.
-
Quando o registro em log binário está ativado em uma instância de banco de dados, o tamanho máximo da transação é limitado pelo tamanho do armazenamento de instância. No MySQL, qualquer sessão que exija mais armazenamento do que o valor de
binlog_cache_size
grava alterações de transações em arquivos temporários de cache de log binário, que são criados no armazenamento de instância. -
As transações podem falhar quando o armazenamento de instância está cheio.