Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Dicas de ajuste de desempenho do MySQL para otimizar o banco de dados


Structured Query Language (SQL) é uma linguagem de programação de propósito especial usada para armazenar, manipular e recuperar dados do banco de dados. Ele encontrou aplicativos em muitos sistemas de banco de dados relacionais, incluindo MySQL, Postgres, Oracle, SQL Server e outros.

Usando instruções SQL, os desenvolvedores executam facilmente várias operações funcionais de banco de dados, como criar, atualizar e excluir dados.

À medida que os volumes de dados crescem e a tecnologia se torna cada vez mais complexa, torna-se mais importante otimizar os bancos de dados MySQL adequadamente para oferecer experiência ao usuário final e reduzir os custos de infraestrutura. As ferramentas de ajuste de desempenho do MySQL podem ajudar os profissionais de banco de dados a identificar rapidamente gargalos, direcionar operações insuficientes por meio de uma revisão dos planos de execução de consultas e eliminar quaisquer jogos de adivinhação.

Com a complexidade adicional de volumes de dados crescentes e cargas de trabalho em constante mudança, o ajuste de desempenho do banco de dados e a otimização de consultas MySQL agora são necessários para maximizar a utilização de recursos e o desempenho do sistema.

Existem várias razões que tornam o ajuste do SQL um pouco complexo para os desenvolvedores. Em primeiro lugar, requer amplo conhecimento técnico para escrever e entender diferentes planos de execução. Enquanto escrever instruções SQL limpas e completas é responsabilidade de quem acumula conhecimento completo sobre isso.

Além de sua complexidade, o ajuste é muito demorado. Porque quando você tem um grande número de instruções SQL para classificar, traz um pouco de incerteza para descobrir quais instruções você deve ajustar e qual você deve deixar. E embora cada instrução seja diferente, sua abordagem de ajuste também varia de acordo com suas respectivas funcionalidades.

Prepare-se para a atualização do Core Web Vitals


Ebook para acelerar seu site antes de começar a perder tráfego.

Obrigado


Sua lista está no caminho para sua caixa de entrada.


Neste tutorial, discutirei como melhorar o desempenho do MySQL usando algumas dicas úteis de ajuste de desempenho. Então, vamos vê-los em detalhes abaixo:

Os benefícios do ajuste de desempenho do MySQL


A principal vantagem de identificar o fator determinante do desempenho para o banco de dados permite que você evite o provisionamento excessivo e reduza custos ao dimensionar corretamente seus servidores. Ele também fornece informações sobre se a movimentação do armazenamento de dados ou a adição de capacidade do servidor trará melhoria no desempenho ou não e, em caso afirmativo, quanto será.

O banco de dados de ajuste para otimização de desempenho de consulta MySQL não apresenta desafios pálidos. No entanto, uma vez ajustado corretamente, o banco de dados oferece resultados de desempenho que valem a pena com ótimas funcionalidades. Ele não apenas reduz a carga de tarefas indesejadas, mas também otimiza o banco de dados MySQL para uma recuperação de dados mais rápida.

Você também pode gostar de: Dicas de desempenho do PHP para otimizar seus sites

Otimize consultas com as diretrizes de otimização de consultas do MySQL


Siga estas práticas recomendadas para ajustar o desempenho do MySQL e otimizar a velocidade do banco de dados.

Em primeiro lugar, garanta a indexação de todos os predicados nas cláusulas WHERE, JOIN, ORDER BY e GROUP BY. O WebSphere Commerce enfatiza fortemente a indexação de predicados para aumentar o desempenho do SQL. Porque a indexação imprópria de consultas SQL pode causar varreduras de tabela, que eventualmente levam a problemas de bloqueio e outros problemas.

Portanto, recomendo indexar todas as colunas de predicado para que o banco de dados possa experimentar a otimização de consulta do MySQL.

Você também pode gostar de: Guia de Otimização de Desempenho do Laravel

Evite usar funções em predicados


O banco de dados não usa um índice se tiver alguma função predefinida na coluna.

Por exemplo:
SELECT * FROM TABLE1 WHERE UPPER(COL1)='ABC'Copy

Por causa da função UPPER(), o banco de dados não utiliza o índice em COL1. Se não houver como evitar essa função no SQL, você terá que criar um novo índice baseado em função ou gerar colunas personalizadas no banco de dados para melhorar o desempenho.

Evite usar um curinga (%) no início de um predicado


O predicado LIKE '%abc' causa uma varredura completa da tabela. Por exemplo:
SELECT * FROM TABLE1 WHERE COL1 LIKE '%ABC'Copy

Na maioria dos casos, esse uso de curinga traz grandes limitações de desempenho.

Evite colunas desnecessárias na cláusula SELECT


Em vez de usar ‘SELECT *’, sempre especifique colunas na cláusula SELECT para melhorar o desempenho do MySQL. Porque colunas desnecessárias causam carga adicional no banco de dados, diminuindo seu desempenho, bem como todo o processo sistemático.

Use a junção interna, em vez da junção externa, se possível


Use a junção externa somente quando for necessário. Usá-lo desnecessariamente não apenas limita o desempenho do banco de dados, mas também limita as opções de otimização de consulta do MySQL, resultando em uma execução mais lenta de instruções SQL.

Use DISTINCT e UNION somente se for necessário


O uso de operadores UNION e DISTINCT sem nenhum objetivo principal causa classificação indesejada e lentidão na execução do SQL. Em vez de UNION, usar UNION ALL traz mais eficiência no processo e melhora o desempenho do MySQL com mais precisão.

A cláusula ORDER BY é obrigatória no SQL se você espera obter um resultado classificado


A palavra-chave ORDER BY classifica o conjunto de resultados em colunas de instrução predefinidas. Embora a instrução traga vantagem para os administradores de banco de dados para obter os dados classificados, ela também produz um pouco de impacto no desempenho na execução do SQL. Porque a consulta primeiro precisa classificar os dados para produzir o conjunto de resultados final, causando uma operação um pouco complexa na execução do SQL.

Você também pode gostar de: Como juntar duas tabelas no MySQL

Não use MySQL como fila


As filas podem afetar o desempenho do banco de dados diretamente do núcleo e podem entrar nos bancos de dados do aplicativo sem o seu conhecimento. Por exemplo, se você estiver configurando um status para um item específico para que um "processo relevante" possa acessá-lo, você está criando uma fila sem querer. O que ele faz é acumular tempo de carregamento extra para acessar o recurso sem nenhum motivo importante.

As filas causam problemas por dois motivos principais. Eles serializam sua carga de trabalho, impedindo a conclusão de tarefas em paralelo e geralmente resultam em uma tabela que contém o trabalho em andamento, bem como dados históricos de trabalhos já concluídos. Ele não apenas adiciona latência ao aplicativo, mas também dificulta o ajuste de desempenho do MySQL.

Você também pode gostar de: Como usar o Redis para enfileiramento

Entenda os quatro recursos fundamentais


Você precisa de quatro recursos fundamentais para fazer funções de banco de dados. CPU, disco, memória e rede. Se algum deles não funcionar corretamente, isso afetará o servidor de banco de dados e resultará em um desempenho ruim.

Para entender os recursos fundamentais corretamente, você precisa se concentrar em duas áreas específicas, ou seja, escolher o hardware certo e solucionar problemas com ele.

Sempre certifique-se de usar componentes de desempenho completos ao escolher o hardware para o banco de dados MySQL. Não apenas opte pelo melhor entre a pilha, mas também certifique-se de que deve haver o equilíbrio certo entre eles. Muitas vezes vimos que as organizações tendem a selecionar servidores com CPUs rápidas e discos grandes, mas se confundem com memória faminta, o que acaba acabando com o desempenho.

Em alguns cenários, adicionar memória torna-se altamente substancial para melhorar o desempenho quando se trata da magnitude. Parece um pouco contra-intuitivo, mas na maioria dos casos, a superutilização de discos afeta diretamente o desempenho do banco de dados. Como a deficiência de memória suficiente para armazenar os dados do servidor se torna onerosa para prejudicar o desempenho do banco de dados.

Quando se trata de solução de problemas, sempre verifique o desempenho de todos os quatro recursos fundamentais. Validar qualitativamente se estão atuando de acordo com as necessidades de melhoria nas normas. Levar essa auditoria em consideração regularmente resolverá rapidamente os principais problemas que ocorrem.

Consultas de paginação


Aplicativos que paginam tendem a derrubar o servidor. Ao mostrar uma página de resultados, com um link para ir para a próxima página, esses aplicativos geralmente agrupam e classificam de maneiras que não podem usar índices e empregam uma função LIMIT e offset que faz com que o servidor faça muito trabalho gerando e, em seguida, descartando linhas.

Você pode encontrar otimizações na própria interface do usuário. Em vez de mostrar o número exato de páginas nos resultados e links para uma página individual, você pode simplesmente mostrar um link para a próxima página. Você também pode impedir que as pessoas acessem páginas irrelevantes.

No lado da consulta, em vez de usar LIMIT com deslocamento, você pode selecionar uma linha a mais do que precisa e, quando o usuário clicar no link “próxima página”, pode designar essa linha final como ponto de partida para o próximo conjunto de resultados . Por exemplo, se o usuário visualizou uma página com as linhas 101 a 120, você também terá que selecionar a linha 121; para renderizar a próxima página, você consultaria o servidor para linhas maiores ou iguais a 121, limite 21.

Otimizando subconsultas do MySQL


O conselho mais importante que posso dar sobre subconsultas é que você deve preferir uma junção sempre que possível, pelo menos nas versões atuais do MySQL.

As subconsultas são objeto de intenso trabalho da equipe do otimizador, e as próximas versões do MySQL podem ter mais otimizações de subconsultas. Verifique quais das otimizações acabarão no código lançado e quanta diferença elas farão. Meu ponto aqui é que “preferir uma junção” não é um conselho à prova de futuro. O servidor está ficando cada vez mais inteligente e os casos em que você precisa dizer a ele como fazer algo em vez de quais resultados retornar estão se tornando cada vez menos.

Cache de consulta do MySQL


Um dos aspectos mais importantes da medição de desempenho é o armazenamento em cache do conteúdo. MySQL fornece cache de consulta de banco de dados que armazena em cache o texto da instrução SELECT e o resultado recuperado. Portanto, sempre que você fizer um banco de dados duplicado, você chamará o cache de consulta do MySQL, ele responderá a você e mostrará o resultado do cache, e nenhuma chamada será analisada repetidamente. Dessa forma, você pode maximizar o processo de otimização de cache do MySQL.

Para configurar o cache de consulta MySQL, você deve adicionar algumas configurações ao MySQL. Antes de tudo, você deve verificar se o cache de consulta está disponível ou não com o seguinte comando:
mysql> SHOW VARIABLES LIKE 'have_query_cache';

Isso mostrará o resultado, SIM. Isso significa que o cache do MySQL está funcionando bem.
+------------------+-------+

| Variable_name    | Value |

+------------------+-------+

| have_query_cache | YES   |

+------------------+-------+

Agora, você pode configurar o tamanho e o tipo do cache de consulta do MySQL. Lembre-se que o tamanho mínimo padrão é 40 KB. O tamanho máximo pode ser de 32 MB. Você pode configurar o MySQL query_cache_size usando o seguinte comando:
mysql> SET GLOBAL query_cache_size = 40000;

O tipo de cache de consulta pode determinar o comportamento de todas as conexões. Você também pode desabilitar o cache de consultas para consultas como:
mysql> SET SESSION query_cache_type = OFF;

Você também pode definir valores como 0,1 e 2 para configurar o status da conexão.

Usar Memcached para cache do MySQL


O Memcached é um sistema de cache de memória distribuído. Ele acelera sites com grandes bancos de dados dinâmicos armazenando objetos de banco de dados em memória dinâmica para reduzir a pressão em um servidor, sempre que uma fonte de dados externa solicita uma leitura. Uma camada Memcached reduz o número de vezes que o banco de dados faz uma solicitação.

O Memcached armazena os valores (v) com a chave (k) e recupera os valores (v) com a chave (k) sem sequer analisar as consultas do banco de dados e fica longe de todos esses aborrecimentos.

Para ler mais sobre o Memcached, você pode ler o guia sobre como configurar o Memcache no php.


Encerrando!


Este artigo fornece em detalhes, a conta das melhores práticas para otimização de banco de dados e dicas úteis de ajuste de desempenho do MySQL que todo desenvolvedor deve conhecer. É um guia completo para os desenvolvedores de back-end, que não têm certeza sobre o desempenho ruim do banco de dados e precisam de algumas técnicas úteis para otimizar o banco de dados MySQL a partir do núcleo.

Se você quiser adicionar seus pensamentos sobre o tópico ou quiser fazer algumas perguntas sobre ele, sinta-se à vontade para escrever seus comentários na seção de comentários.