Melhores práticas para criar um aplicativo com o Banco de Dados do Azure para MySQL

APLICA-SE A:Banco de Dados do Azure para MySQL – Servidor Único Banco de Dados do Azure para MySQL – Servidor Flexível

Importante

O Banco de Dados do Azure para servidor único MySQL está no caminho de desativação. É altamente recomendável que você atualize para o Banco de Dados do Azure para o servidor flexível MySQL. Para obter mais informações sobre como migrar para o Banco de Dados do Azure para o servidor flexível MySQL, consulte O que está acontecendo com o Banco de Dados do Azure para Servidor Único MySQL?

Aqui estão algumas práticas recomendadas para ajudar você a criar um aplicativo pronto para a nuvem usando o Banco de Dados do Azure para MySQL. Essas práticas recomendadas podem reduzir o tempo de desenvolvimento do aplicativo.

Configuração de recursos de aplicativo e banco de dados

Mantenha o aplicativo e o banco de dados na mesma região

Verifique se todas as suas dependências estão na mesma região ao implantar seu aplicativo no Azure. A difusão de instâncias entre regiões ou zonas de disponibilidade cria a latência de rede, o que pode afetar o desempenho geral do seu aplicativo.

Mantenha seu servidor MySQL seguro

Configure seu servidor MySQL para ser seguro e não acessível publicamente. Use uma destas opções para proteger seu servidor:

Para segurança, você deve sempre se conectar ao servidor MySQL por SSL e configurar seu servidor MySQL e seu aplicativo para usar o TLS 1.2. Confira Como configurar o SSL/TLS.

Usar a rede avançada com o AKS

Quando a rede acelerada está habilitada em uma VM, há uma menor latência, tremulação reduzida e menor utilização da CPU na VM. Para saber mais, confira Práticas recomendadas para o Serviço de Kubernetes do Azure e o Banco de Dados do Azure para MySQL.

Ajustar os parâmetros do servidor

Para cargas de trabalho de leitura pesadas que ajustam parâmetros de servidor, tmp_table_size e max_heap_table_size podem ajudar a otimizar para melhor desempenho. Para calcular os valores necessários para essas variáveis, observe o total por conexão e os valores da memória base. A soma dos parâmetros de memória por conexão, exceto tmp_table_size, combinada com as contas de memória base para a memória total do servidor.

Para calcular o maior tamanho possível de tmp_table_size e max_heap_table_size, use a seguinte fórmula:

(total memory - (base memory + (sum of per-connection memory * # of connections)) / # of connections

Observação

Memória total indica a quantidade total de memória que o servidor tem em todos os vCores provisionados. Por exemplo, em um servidor do Banco de Dados do Azure para MySQL de Uso Geral com dois vCores, a memória total será de 5 GB * 2. Veja mais detalhes sobre a memória em cada camada de serviço na documentação do tipo de preço.

A memória base indica as variáveis de memória, como query_cache_size e innodb_buffer_pool_size, que o MySQL inicializará e alocará na inicialização do servidor. Memória por conexão, como sort_buffer_size e join_buffer_size, é a memória é alocada somente quando uma consulta precisa dela.

Criar usuários não administradores

Criar usuários não administradores para cada banco de dados. Normalmente, os nomes de usuário são identificados como os nomes de banco de dados.

Redefinir sua senha

Você pode redefinir sua senha para seu servidor MySQL usando o portal do Azure.

Redefinir a senha do servidor para um banco de dados de produção pode desativar seu aplicativo. É uma boa prática redefinir a senha de qualquer carga de trabalho de produção fora do horário de pico para minimizar o impacto nos usuários do aplicativo.

Desempenho e resiliência

Aqui estão algumas ferramentas e práticas para ajudar a depurar os problemas de desempenho do seu aplicativo.

Habilitar logs de consulta lentos para identificar problemas de desempenho

É possível habilitar logs de consulta lentos e logs de auditoria no servidor. O log de consultas lentas pode ser usado para identificar gargalos de desempenho para solução de problemas.

Os logs de auditoria também estão disponíveis por meio de logs de Diagnóstico do Azure nos logs do Azure Monitor, nos Hubs de Eventos do Azure e nas contas de armazenamento. Confira Como solucionar problemas com o desempenho da consulta.

Usar o pool de conexões

O gerenciamento de conexões de banco de dados pode ter um impacto significativo no desempenho do aplicativo como um todo. Para otimizar o desempenho, você deve reduzir o número de vezes que as conexões são estabelecidas e o tempo para estabelecer as conexões em caminhos de código-chave. Use o pool de conexões para se conectar ao Banco de Dados do Azure para MySQL e melhorar a resiliência e o desempenho.

Você pode usar o pool de conexões ProxySQL para gerenciar as conexões de forma eficiente. O uso de um pool de conexões pode diminuir as conexões ociosas e reutilizar as conexões existentes, o que ajuda a evitar problemas. Confira Como configurar o ProxySQL para saber mais.

Lógica de repetição para manipular erros transitórios

Seu aplicativo pode apresentar erros transitórios nos quais as conexões com o banco de dados são descartadas ou perdidas de forma intermitente. Nessas situações, o servidor está em execução após uma ou duas repetições em 5 a 10 segundos.

Uma boa prática é aguardar 5 segundos antes de sua primeira tentativa. Em seguida, siga cada nova tentativa aumentando a espera gradualmente, até 60 segundos. Limite o número máximo de tentativas, momento em que seu aplicativo considera que a operação falhou, para que você possa investigar melhor. Confira Como solucionar problemas de erros de conexão para saber mais.

Habilitar a replicação de leitura para reduzir failovers

Para cenários de failover, você pode utilizar a Replicação de Dados. Nenhum failover automatizado entre os servidores de origem e de réplica ao usar réplicas de leitura.

Você percebe um atraso entre a origem e a réplica porque a replicação é assíncrona. O atraso da rede pode ser influenciado por muitos fatores, como o tamanho da carga de trabalho em execução no servidor de origem e a latência entre os data centers. Na maioria dos casos, o atraso da réplica varia de alguns segundos a alguns minutos.

Implantação de banco de dados

Configurar uma tarefa do Banco de Dados do Azure para MySQL em seu pipeline de implantação de CI/CD

Ocasionalmente, você precisa implantar alterações em seu banco de dados. Nesses casos, é possível usar CI (integração contínua) e CD (entrega contínua) por meio do Azure Pipelines e usar uma tarefa do seu servidor MySQL para atualizar o banco de dados executando um script personalizado nele.

Usar um processo eficiente para implantação manual de banco de dados

Durante a implantação manual do banco de dados, siga estas etapas para minimizar o tempo de inatividade ou reduzir o risco de falha na implantação:

  1. Crie uma cópia de um banco de dados de produção em um novo banco de dados usando o mysqldump ou o MySQL Workbench.
  2. Atualize o novo banco de dados com suas novas alterações de esquema ou as atualizações necessárias.
  3. Coloque o banco de dados de produção em um estado somente leitura. Seria melhor se você não tivesse operações de gravação no banco de dados de produção até que a implantação estivesse concluída.
  4. Teste seu aplicativo com o banco de dados recentemente atualizado da etapa 1.
  5. Implante as alterações do seu aplicativo e verifique se o aplicativo está usando o novo banco de dados com as atualizações mais recentes.
  6. Mantenha o banco de dados de produção antigo para reverter as alterações. Em seguida, você pode avaliar a exclusão do banco de dados de produção antigo ou exportá-lo para o Armazenamento do Microsoft Azure, se necessário.

Observação

Se o aplicativo for como um aplicativo de comércio eletrônico e você não puder colocá-lo em um estado somente leitura, implante as alterações diretamente no banco de dados de produção depois de fazer um backup. Essas alterações devem ocorrer fora do horário de pico, com pouco tráfego para o aplicativo, para minimizar o impacto, pois alguns usuários podem ter solicitações com falha.

Verifique se o código do aplicativo também trata das solicitações com falha.

Usar métricas nativas do MySQL para ver se a carga de trabalho está excedendo tamanhos de tabela temporária na memória

Com uma carga de trabalho de leitura intensa, as consultas em seu servidor MySQL podem exceder os tamanhos das tabelas temporárias na memória. Uma carga de trabalho de leitura intensa pode fazer com que seu servidor alterne para a gravação de tabelas temporárias no disco, afetando o desempenho do aplicativo. Para determinar se o servidor está gravando no disco como resultado do tamanho superior da tabela temporária, examine as seguintes métricas:

show global status like 'created_tmp_disk_tables';
show global status like 'created_tmp_tables';

A métrica created_tmp_disk_tables indica quantas tabelas foram criadas no disco. Dada sua carga de trabalho, a métrica created_tmp_table informa quantas tabelas temporárias devem ser formadas na memória. Para determinar se uma consulta específica utiliza tabelas temporárias, execute a instrução EXPLAIN na consulta. O detalhe na coluna extra indica Using temporary se a consulta estiver sendo executada usando tabelas temporárias.

Para calcular o percentual de sua carga de trabalho com consultas despejadas em discos, use os valores de métrica nesta fórmula:

(created_tmp_disk_tables / (created_tmp_disk_tables + created_tmp_tables)) * 100

Idealmente, essa porcentagem deve ser inferior a 25%. Se o percentual for 25% ou mais, sugerimos modificar dois parâmetros do servidor, tmp_table_size e max_heap_table_size.

Esquema e consultas do banco de dados

Aqui estão algumas dicas que você deve lembrar ao criar o esquema e as consultas do banco de dados.

Utilize o tipo de dados correto para suas colunas de tabela

Usar o tipo de dados correto com base no tipo de dados que você deseja armazenar pode otimizar o armazenamento e reduzir os erros causados por tipos de dados incorretos.

Usar índices

Para evitar consultas lentas, use índices. Os índices podem ajudar a localizar linhas com colunas específicas rapidamente. Confira Como usar índices no MySQL.

Usar EXPLAIN para consultas SELECT

Use a instrução EXPLAIN para obter insights sobre o que o MySQL está fazendo para executar sua consulta. Ela pode ajudar a detectar gargalos ou problemas com sua consulta. Confira Como usar a EXPLAIN para analisar o desempenho de consultas.