A execução do MySQL nas configurações ideais para recursos específicos ajuda a lidar com cargas de servidor maiores e evita a lentidão do servidor. Geralmente, depois de ajustar o Apache para lidar com cargas maiores, é benéfico ajustar o MySQL para conexões adicionais.
O ajuste de banco de dados é um tópico extenso, e este guia cobre apenas o básico da edição de sua configuração do MySQL. Grandes bancos de dados MySQL podem exigir uma quantidade considerável de memória. Por esta razão, recomendamos o uso de um High Memory Linode para tais configurações.
Observação As etapas neste guia requerem privilégios de root. Certifique-se de executar as etapas abaixo como raiz ou com o sudo
prefixo. Para obter mais informações sobre privilégios, consulte nosso guia de usuários e grupos.
Ferramentas que podem ajudar a otimizar o MySQL
Para determinar se seu banco de dados MySQL precisa ser reconfigurado, é melhor verificar o desempenho dos recursos agora. Isso pode ser feito com o comando top ou com o serviço LinodeLongview. No mínimo, você deve se familiarizar com o uso de RAM e CPU do seu servidor, que pode ser descoberto com estes comandos:
echo [PID] [MEM] [PATH] && ps aux | awk '{print $2, $4, $11}' | sort -k2rn | head -n 20
ps -eo pcpu,pid,user,args | sort -k 1 -r | head -20
MySQLTuner
O script MySQLTuner avalia sua instalação do MySQL e, em seguida, gera sugestões para aumentar o desempenho e a estabilidade do seu servidor.
-
Baixe o script MySQLTuner:
wget https://raw.githubusercontent.com/major/MySQLTuner-perl/master/mysqltuner.pl
-
Altere as permissões dos scripts para serem executáveis:
chmod +x mysqltuner.pl
-
Execute omysqltuner.pl
roteiro. Você será solicitado a inserir seu login e senha administrativos do MySQL:
./mysqltuner.pl
-
O script retornará resultados semelhantes à saída abaixo:
MySQLTuner oferece sugestões sobre como melhorar o desempenho do banco de dados. Se você está preocupado em atualizar seu banco de dados por conta própria, seguir as sugestões do MySQLTuner é uma das maneiras mais seguras de melhorar o desempenho do seu banco de dados.>> MySQLTuner 1.4.0 - Major Hayden <[email protected]> >> Bug reports, feature requests, and downloads at http://mysqltuner.com/ >> Run with '--help' for additional options and output filtering Please enter your MySQL administrative login: root Please enter your MySQL administrative password: [OK] Currently running supported MySQL version 5.5.41-0+wheezy1 [OK] Operating on 64-bit architecture -------- Storage Engine Statistics ------------------------------------------- [--] Status: +ARCHIVE +BLACKHOLE +CSV -FEDERATED +InnoDB +MRG_MYISAM [--] Data in InnoDB tables: 1M (Tables: 11) [--] Data in PERFORMANCE_SCHEMA tables: 0B (Tables: 17) [!!] Total fragmented tables: 11 -------- Security Recommendations ------------------------------------------- [OK] All database users have passwords assigned -------- Performance Metrics ------------------------------------------------- [--] Up for: 47s (113 q [2.404 qps], 42 conn, TX: 19K, RX: 7K) [--] Reads / Writes: 100% / 0% [--] Total buffers: 192.0M global + 2.7M per thread (151 max threads) [OK] Maximum possible memory usage: 597.8M (60% of installed RAM) [OK] Slow queries: 0% (0/113) [OK] Highest usage of available connections: 0% (1/151) [OK] Key buffer size / total MyISAM indexes: 16.0M/99.0K [!!] Query cache efficiency: 0.0% (0 cached / 71 selects) [OK] Query cache prunes per day: 0 [OK] Temporary tables created on disk: 25% (54 on disk / 213 total) [OK] Thread cache hit rate: 97% (1 created / 42 connections) [OK] Table cache hit rate: 24% (52 open / 215 opened) [OK] Open file limit used: 4% (48/1K) [OK] Table locks acquired immediately: 100% (62 immediate / 62 locks) [OK] InnoDB buffer pool / data size: 128.0M/1.2M [OK] InnoDB log waits: 0 -------- Recommendations ----------------------------------------------------- General recommendations: Run OPTIMIZE TABLE to defragment tables for better performance Enable the slow query log to troubleshoot bad queries Variables to adjust: query_cache_limit (> 1M, or use smaller result sets)
Ajustando o MySQL
Ao alterar a configuração do MySQL, fique atento às mudanças e como elas afetam seu banco de dados. Mesmo seguindo as instruções de programas como o MySQLTuner, é melhor ter alguma compreensão do processo.
O arquivo de configuração do MySQL armazenado no seguinte local:
/etc/mysql/my.cnf
. Observação
Antes de atualizar sua configuração do MySQL, crie um backup domy.cnf
Arquivo:
cp /etc/mysql/my.cnf ~/my.cnf.backup
A prática recomendada sugere que você faça pequenas alterações, uma de cada vez, e monitore o servidor após cada alteração. Você deve reiniciar o MySQL após cada alteração:
Para distribuições usando systemd:
systemctl restart mysqld
Para distribuições com diferentes sistemas de inicialização:
service mysql restart
Ao alterar valores nomy.cnf
arquivo, certifique-se de que a linha que você está alterando não foi comentada com a libra (#
) prefixo.
key_buffer
Alterando o
key_buffer
aloca mais memória para o MySQL, o que pode acelerar substancialmente seus bancos de dados, supondo que você tenha memória livre. O key_buffer
size geralmente não deve ocupar mais de 25% da memória do sistema ao usar o mecanismo de tabela MyISAM e até 70% para InnoDB. Se o valor for definido muito alto, os recursos serão desperdiçados. De acordo com a documentação do MySQL, para servidores com 256 MB (ou mais) de RAM com muitas tabelas, recomenda-se uma configuração de 64M. Servidores com 128 MB de RAM e menos tabelas podem ser configurados para 16M, o valor padrão. Sites com ainda menos recursos e tabelas podem ter esse valor definido mais baixo.
max_allowed_packet
Este parâmetro permite definir o tamanho máximo de um pacote enviável. Um pacote é um único estado SQL, uma única linha sendo enviada para um cliente ou um log sendo enviado de um banco de dados de origem para uma réplica. Se você sabe que seu servidor MySQL irá processar pacotes grandes, é melhor aumentar isso para o tamanho do seu maior pacote. Se esse valor for definido muito pequeno, você receberá um erro em seu log de erros.
thread_stack
Este valor contém o tamanho da pilha para cada thread. MySQL considera o valor padrão do
thread_stack
variável suficiente para uso normal; no entanto, um erro relacionado ao thread_stack
ser registrado, isso pode ser aumentado. thread_cache_size
Se
thread_cache_size
está “desligado” (definido como 0), então qualquer nova conexão que está sendo feita precisa de um novo thread criado para ela. Quando as conexões se soltam, a rosca é destruída. Caso contrário, esse valor define o número de encadeamentos não utilizados a serem armazenados em um cache até que precisem ser usados para uma conexão. Geralmente, essa configuração tem pouco efeito sobre o desempenho, a menos que você esteja recebendo centenas de conexões por minuto, momento em que esse valor deve ser aumentado para que a maioria das conexões possa ser feita em encadeamentos em cache. max_connections
Este parâmetro define a quantidade máxima de simultâneos conexões. É melhor considerar a quantidade máxima de conexões que você teve no passado antes de definir esse número, para que você tenha um buffer entre esse número superior e o
max_connections
valor. Observe que isso não indica a quantidade máxima de usuários em seu site de uma só vez; em vez disso, mostra a quantidade máxima de usuários fazendo solicitações simultaneamente. table_cache
Este valor deve ser mantido mais alto que seu
open_tables
valor. Para determinar esse valor, use: | |
Mais informações
Você pode querer consultar os seguintes recursos para obter informações adicionais sobre este tópico. Embora estes sejam fornecidos na esperança de que sejam úteis, observe que não podemos garantir a precisão ou pontualidade dos materiais hospedados externamente.
- Biblioteca de documentação do MySQL
- Parâmetros do servidor de ajuste do MySQL
- MySQLTuner