Os bancos de dados desempenham um papel essencial no desempenho de qualquer aplicativo. O banco de dados MySQL não é exceção. Portanto, é importante entender as diversas maneiras como o ajuste, o design e a configuração do banco de dados podem ajudar a melhorar o desempenho do seu aplicativo. Veja abaixo algumas maneiras de otimizar o MySQL para alcançar o desempenho ideal.
Ajuste de consultas
O ajuste de desempenho do banco de dados começa no aplicativo. A maneira como o aplicativo converte os requisitos de negócios em consultas no banco de dados faz uma grande diferença na complexidade e na eficiência do aplicativo. A medida real de desempenho é a eficiência com que cada instância de banco de dados contribui para as necessidades comerciais.
Design do esquema
A forma como as entidades e os relacionamentos são definidos em um banco de dados relacional determina o quanto uma resposta será simples ou complexa para uma consulta de banco de dados. Além disso, a forma como a chave primária e os índices secundários são definidos desempenha um papel importante.
Configuração do servidor
A configuração do servidor é responsável por otimizar e maximizar a utilização dos recursos do sistema. Os recursos do sistema são os núcleos da unidade de processamento principal (CPU), a memória na máquina física ou na máquina virtual (VM), o sistema de armazenamento subjacente e a rede.
Ajuste dinâmico do servidor
Monitoramento contínuo, otimização e ajuste de desempenho para adaptar cargas de trabalho de bancos de dados para dinâmicas do mundo real.
Este artigo se concentra no ajuste de consultas. Os outros tópicos serão abordados em artigos subsequentes.
Normalmente, iniciamos o processo de ajuste de consulta analisando a consulta do banco de dados. Uma maneira melhor seria começar a avaliar se o requisito de negócios foi convertido em uma consulta de banco de dados com eficácia. A interpretação e o processamento de uma empresa precisam de uma consulta para determinar se o custo será pequeno ou grande.
A primeira etapa é priorizar as consultas a serem otimizadas:
Essas duas categorias precisam ser otimizadas durante a criação do esquema do banco de dados.
Uma transação é uma unidade lógica em que todas as instruções contidas seriam confirmadas totalmente ou revertidas. A transação é o recurso que fornece atomicidade, consistência, isolamento e durabilidade (ACID) para MySQL.
No InnoDB, o mecanismo de armazenamento do MySQL, todas as atividades do usuário ocorrem dentro de uma transação. Por padrão, o modo de confirmação automática é ativado, o que significa que cada instrução SQL forma uma única transação. Para executar uma transação de várias instruções quando a confirmação automática estiver ativada, inicie a transação explicitamente com START_TRANSACTION ou START_TRANSACTION e encerre-a com START_TRANSACTION ou START_TRANSACTION. Se o modo de confirmação automática estiver desativado, a sessão sempre terá uma transação aberta até que um COMMIT ou COMMIT a encerre e inicie uma nova.
A prática recomendada é realizar transações com o menor tempo possível. Isso ocorre porque as transações longas têm várias desvantagens, conforme descrito mais adiante neste artigo.
1. Contenções prolongadas de bloqueio, que causam consultas mais lentas e possíveis falhas de consulta
2. Desempenho do servidor prejudicado devido à grande quantidade de registros undo
3. Aumento do uso de disco
4. Tempo de encerramento prolongado
5. Tempo de recuperação de falha prolongado
As consultas podem ser capturadas no lado do aplicativo ou do banco de dados.
É uma prática recomendada de desenvolvimento registrar consultas do banco de dados e o tempo de execução da consulta. A geração de registros do aplicativo facilita a avaliação da eficácia das consultas no contexto empresarial. Por exemplo, os usuários podem registrar o tempo de resposta de cada consulta ou tempo de resposta de determinadas funcionalidades. Essa também é uma maneira fácil de ver o tempo total de execução para transações de várias instruções.
Além disso, o tempo de resposta da consulta medido com base na geração de registros no aplicativo é uma avaliação completa, incluindo o tempo de rede. Ele complementa o tempo de execução da consulta registrado no banco de dados e facilita identificar se o problema é com a rede ou com o banco de dados.
Query Insights do MySQL do Cloud SQL
A ferramenta Query Insights do Cloud SQL permite captura, monitoramento e diagnóstico de consultas.
O Query Insights facilita a localização das principais consultas com base no tempo e na frequência de execução.
A ferramenta tem opções de filtragem como período, banco de dados, conta de usuário e endereço do cliente. Ela tem gráficos para mostrar o uso da CPU e detalhamento sobre E/S e esperas de bloqueio. A tabela "Principais consultas e tags" lista as principais consultas por tempo de execução, com as consultas sendo normalizadas. Além do tempo de execução, ela inclui estatísticas sobre "linhas médias verificadas" e "linhas médias retornadas", que fornecem insights para consultar a eficiência.
Consulte a documentação para ver tudo o que ela oferece e como ativá-la.
Usar performance_schema
No Cloud SQL para MySQL, o recurso performance_schema é ativado por padrão no MySQL 8.0.26 e versões mais recentes com mais de 15 GB de memória. Para ativá-lo ou desativá-lo, é necessário reiniciar a instância.
Quando performance_schema=ON, os instrumentos de instrução de consulta são ativados por padrão. A tabela sys.statement_analysis oferece estatísticas agregadas para consultas normalizadas. Ela responde a perguntas como:
Se você usa MySQL Workbench, ele tem relatórios de esquema de desempenho com base na visualização do sistema. O relatório tem uma seção sobre "Instruções SQL de alto custo", que fornece insights sobre o desempenho da consulta.
Usar registro lento + ferramentas
O registro lento captura todas as consultas em execução por mais tempo do que o long_query_time. Ele também registra o tempo de execução da consulta, o tempo de bloqueio, as linhas de dados examinadas e as linhas de dados enviadas. As outras estatísticas de execução fazem com que ele seja um candidato preferencial para analisar as consultas do banco de dados do que usar o registro geral.
É uma boa prática ativar o registro lento. Normalmente, o long_query_time precisa ser mantido em um limite razoável para capturar consultas que você pretende analisar e otimizar.
log_output=FILE
slow_query_log=ON
long_query_time=2
Periodicamente, é recomendável definir long_query_time=0 para capturar todas as consultas por um breve período e ter uma visão geral do volume e do desempenho da consulta.
Existem ferramentas, como mysqldumpslow e pt-query-digest, que extraem assinaturas de consulta e geram um relatório para mostrar estatísticas de consulta.
Há outras ferramentas de monitoramento de terceiros que geram relatórios sobre estatísticas de consulta, como o Monitoramento e Gerenciamento Percona, o SolarWinds Database Performance Monitor (antigo VividCortex) e muito mais.
Depois de capturar as consultas nas transações, a próxima etapa é otimizá-las.
O comando EXPLAIN fornece o plano de execução da consulta e, a partir da versão 8.0.18, o comando EXPLAIN ANALYZE executa uma instrução e produz uma saída EXPLAIN com o tempo da execução.
O Query Insights do MySQL fornece acesso prático ao plano EXPLAIN.
O que se deve procurar na saída?
As variáveis de status da sessão podem ser usadas para acessar os detalhes da execução da consulta.
Primeiro, limpe as variáveis de sessão, execute a consulta e examine os contadores. Por exemplo, o status Handler_* mostra o padrão de acesso a dados e o valor da linha. Created_* mostraria se uma tabela temporária e/ou uma tabela temporária no disco foi criada. O Sort_* mostraria o número de passes de mesclagem de classificação e a quantidade de linhas classificadas. Mais variáveis de sessão são explicadas na documentação.
A instrução SHOW PROFILE informa o tempo de execução de consulta por estágio de execução, o que também pode ser útil.
Depois que o plano de execução da consulta é compreendido, há várias maneiras de influenciá-lo e otimizá-lo.
Para otimizar a configuração do servidor para determinadas consultas, é altamente recomendável usar as variáveis no nível da sessão em vez de alterar o valor global que afeta todas as sessões.
Os valores da sessão usados com frequência são:
Resumindo, para o ajuste de consultas, falamos sobre três aspectos:
Comece a criar no Google Cloud com US$ 300 em créditos e mais de 20 produtos do programa Sempre gratuito.