Melhorar a performance das consultas para o RDS para MySQL com leituras otimizadas do Amazon RDS - Amazon Relational Database Service

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.

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 e ORDER 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 o binlog_format. Dependendo do tamanho das transações, definir binlog_format como ROW 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_mmap para 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âmetro binlog_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:

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 .

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.