Cada aplicativo com suporte do MySQL pode se beneficiar de um servidor de banco de dados bem ajustado. A equipe do Liquid Web Heroic Support encontrou várias situações ao longo dos anos em que alguns pequenos ajustes fizeram uma grande diferença no desempenho do site e do aplicativo. Nesta série de artigos, descrevemos algumas das recomendações mais comuns que tiveram o maior impacto no desempenho.
Verificação de simulação
Este artigo se aplica à maioria dos servidores MySQL VPS baseados em Linux. Isso inclui, mas não se limita a servidores Dedicados Tradicionais e VPS em Nuvem executando uma variedade de distribuições Linux comuns. O artigo pode ser usado com os seguintes tipos de sistema Liquid Web:
- CentOS 6x/7x gerenciado por núcleo
- Ubuntu 14.04/16.04 gerenciado por núcleo
- CPanel CentOS 6/7 totalmente gerenciado
- CentOS 7 Plesk Onyx 17 totalmente gerenciado
- Servidores Linux autogerenciados
Esta série de artigos pressupõe familiaridade com os seguintes conceitos básicos de administração do sistema:
- Conexões SSH e navegação básica do ambiente shell de linha de comando padrão do Linux.
- Abrindo, editando e salvando arquivos no Vim ou em um editor de sistema escolhido.
- Modo interativo do MySQL e sintaxe geral de consulta do MySQL.
O que é a otimização do MySQL?
Não há uma definição claramente definida para o termo MySQL Optimization. Pode significar algo diferente dependendo da pessoa, administrador, grupo ou empresa. Para esta série de artigos sobre MySQL Optimization, definiremos MySQL Optimization como: A configuração de um servidor MySQL ou MariaDB que foi configurada para evitar gargalos comumente encontrados discutidos nesta série de artigos.
O que é um gargalo?
Muito semelhante ao gargalo de uma garrafa de refrigerante, um gargalo como termo técnico é um ponto em uma configuração de aplicativo ou servidor onde uma pequena quantidade de tráfego ou dados pode passar sem problemas. No entanto, um volume maior do mesmo tipo de tráfego ou dados é impedido ou bloqueado e não pode operar com sucesso como está. Veja o exemplo a seguir de um gargalo de configuração:
Neste exemplo, o servidor é capaz de lidar com 10 conexões simultaneamente. No entanto, a configuração aceita apenas 5 conexões. Esse problema não se manifestaria enquanto houvesse 5 ou menos conexões ao mesmo tempo. No entanto, quando o tráfego aumenta para 10 conexões, metade delas começa a falhar devido a recursos não utilizados na configuração do servidor. Os exemplos acima ilustram a forma do gargalo de onde deriva seu nome versus uma configuração otimizada que corrige o gargalo.
Quando devo otimizar meu banco de dados MySQL?
Idealmente, o ajuste de desempenho do banco de dados deve ocorrer regularmente e antes que a produtividade seja afetada. É uma prática recomendada realizar auditorias semanais ou mensais do desempenho do banco de dados para evitar que problemas afetem os aplicativos de maneira adversa. Os sintomas mais óbvios de problemas de desempenho são:
- As consultas se acumulam e nunca são concluídas na tabela de processos do MySQL.
- Aplicativos ou sites que usam o banco de dados ficam lentos.
- Erros de tempo limite de conexão, especialmente durante os horários de pico.
Embora seja normal que haja várias consultas simultâneas sendo executadas ao mesmo tempo em um sistema ocupado, torna-se um problema quando essas consultas demoram muito para serem concluídas regularmente. Embora o limite específico varie por sistema e por aplicativo, os tempos médios de consulta que excedem vários segundos se manifestarão como uma lentidão nos sites e aplicativos anexados. Essas lentidão às vezes podem começar pequenas e passar despercebidas até que um grande aumento de tráfego atinja um gargalo específico.
Identificando problemas de desempenho
Saber como examinar a tabela de processos do MySQL é vital para diagnosticar o gargalo específico encontrado. Há várias maneiras de visualizar a tabela de processos, dependendo de seu servidor e preferência específicos. Por questões de brevidade, esta série se concentrará nos métodos mais comuns usados via acesso Secure Shell (SSH):
Método 1. Usando a tabela de processos do MySQL
Use o 'mysqladmin ' ferramenta de linha de comando com o sinalizador 'processlist ' ou 'proc ' como diminutivo. (Adicionar o sinalizador 'estatísticas ' ou 'estatística ' para breve mostrará estatísticas de execução para consultas desde a última reinicialização do MySQL.)
Comando:
mysqladmin proc stat
Saída:
+-------+------+-----------+-----------+---------+------+-------+
| Id | User | Host | db | Command | Time | State | Info | Progress |
+-------+------+-----------+-----------+---------+------+-------+--------------------+----------+
| 77255 | root | localhost | employees | Query | 150 | | call While_Loop2() | 0.000 |
| 77285 | root | localhost | | Query | 0 | init | show processlist | 0.000 |
+-------+------+-----------+-----------+---------+------+-------+--------------------+----------+
Uptime: 861755 Threads: 2 Questions: 20961045 Slow queries: 0 Opens: 2976 Flush tables: 1 Open tables: 1011 Queries per second avg: 24.323
Observação:Pro :usado na interface do shell, isso facilita a saída de canal para outros scripts e ferramentas.Con :a coluna de informações da tabela de processos é sempre truncada, portanto, não fornece a consulta completa em consultas mais longas Método 2:usando a tabela de processos do MySQL
Execute a consulta 'show processlist;' no prompt do modo interativo do MySQL. (Aadicionando o ' completo ’ modificador do comando desativa o truncamento do Informações coluna . Isso é necessário ao visualizar consultas longas.)
Comando:
show processlist;
Saída:
MariaDB [(none)]> show full processlist;
+-------+------+-----------+-----------+---------+------+-------+-----------------------+----------+
| Id | User | Host | db | Command | Time | State | Info | Progress |
+-------+------+-----------+-----------+---------+------+-------+-----------------------+----------+
| 77006 | root | localhost | employees | Query | 151 | NULL | call While_Loop2() | 0.000 |
| 77021 | root | localhost | NULL | Query | 0 | init | show full processlist | 0.000 |
+-------+------+-----------+-----------+---------+------+-------+-----------------------+----------+
Pro :usar o modificador completo permite ver a consulta completa em consultas mais longas.Con :O modo interativo do MySQL não pode acessar scripts e ferramentas disponíveis na interface do shell. Usando o log de consultas lentas
Outra ferramenta valiosa no MySQL é o recurso de registro de consultas lentas incluído. Esse recurso é o método preferencial para localizar consultas de longa duração regularmente. Existem várias diretivas disponíveis para ajustar esse recurso. No entanto, as configurações mais comumente necessárias são:
slow_query_log | habilitar/desabilitar o log de consultas lentas |
slow_query_log_file | nome e caminho do arquivo de log de consulta lenta |
long_query_time | tempo em segundos/microssegundos definindo uma consulta lenta |
Essas diretivas são definidas na seção [mysqld] do arquivo de configuração do MySQL localizado em /etc/my.cnf e exigirão uma reinicialização do serviço MySQL antes de entrarem em vigor. Veja o exemplo abaixo para formatação:
Aviso:Há uma grande preocupação com o espaço em disco com o arquivo de log de consulta lenta, que precisa ser atendido continuamente até que o recurso de log de consulta lenta seja desabilitado. Tenha em mente que quanto menor for sua diretiva long_query_time, mais rápido o log de consulta lenta preencherá uma partição de disco
[mysqld]
log-error=/var/lib/mysql/mysql.err
innodb_file_per_table=1
default-storage-engine=innodb
innodb_buffer_pool_size=128M
innodb_log_file_size=128M
max_connections=300
key_buffer_size = 8M
slow_query_log=1
slow_query_log_file=/var/lib/mysql/slowquery.log
long_query_time=5
Assim que o log de consultas lentas estiver ativado, você precisará acompanhá-lo periodicamente para revisar as consultas indisciplinadas que precisam ser ajustadas para um melhor desempenho. Para analisar o arquivo de log de consulta lenta, você pode analisá-lo diretamente para revisar seu conteúdo. O exemplo a seguir mostra as estatísticas da consulta de amostra que durou mais do que os 5 segundos configurados:
CuidadoO desempenho foi atingido ao ativar o recurso de log de consulta lenta. Isso se deve às rotinas adicionais necessárias para analisar cada consulta, bem como à E/S necessária para gravar as consultas necessárias no arquivo de log. Por isso, é considerado uma prática recomendada em sistemas de produção desabilitar o log de consulta lenta. O log de consultas lentas deve permanecer ativado apenas por um período específico ao procurar ativamente consultas problemáticas que possam estar afetando o aplicativo ou o site.
# Time: 180717 0:23:28
# User@Host: root[root] @ localhost []
# Thread_id: 32 Schema: employees QC_hit: No
# Query_time: 627.163085 Lock_time: 0.000021 Rows_sent: 0 Rows_examined: 0
# Rows_affected: 0
use employees;
SET timestamp=1531801408;
call While_Loop2();
Opcionalmente, você pode usar a ferramenta de linha de comando mysqldumpslow, que analisa o arquivo de log de consulta lenta e agrupa como consultas, exceto valores de dados numéricos e de string:
~ $ mysqldumpslow -a /var/lib/mysql/slowquery.log
Reading mysql slow query log from /var/lib/mysql/slowquery.log
Count: 2 Time=316.67s (633s) Lock=0.00s (0s) Rows_sent=0.5 (1), Rows_examined=0.0 (0), Rows_affected=0.0 (0), root[root]@localhost
call While_Loop2()
(Para informações de uso, visite a documentação do MySQL aqui - mysqldumpslow — Resumir arquivos de log de consulta lenta)
Conclusão
Assim conclui a primeira parte de nossa série de Otimização de Banco de Dados e nos dá uma base sólida para referência para fins de benchmark. Embora os problemas de banco de dados possam ser complicados, nossa série detalhará esses conceitos para fornecer meios de otimizar seu banco de dados por meio de conversão de banco de dados, conversão de tabela e indexação.
Como podemos ajudar?
Nós nos orgulhamos de ser os humanos mais úteis em hospedagem™!
Nossas equipes de suporte estão repletas de técnicos Linux experientes e administradores de sistema talentosos que têm conhecimento profundo de várias tecnologias de hospedagem na web, especialmente aquelas discutidas neste artigo.
Se você tiver alguma dúvida sobre essas informações, estamos sempre disponíveis para responder a quaisquer perguntas relacionadas a este artigo, 24 horas por dia, 7 dias por semana, 365 dias por ano.
Se você for um servidor VPS totalmente gerenciado, Dedicado em Nuvem, Nuvem Privada VMWare, Servidor Pai Privado, Servidores em Nuvem Gerenciado ou proprietário de um servidor Dedicado e não se sentir à vontade para executar qualquer uma das etapas descritas, nós pode ser contatado pelo telefone @800.580.4985, um chat ou ticket de suporte para ajudá-lo com este processo.