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

Como otimizar o desempenho do MySQL usando MySQLTuner


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.

  1. Baixe o script MySQLTuner:
     wget https://raw.githubusercontent.com/major/MySQLTuner-perl/master/mysqltuner.pl
    

  2. Altere as permissões dos scripts para serem executáveis:
     chmod +x mysqltuner.pl
    

  3. Execute o mysqltuner.pl roteiro. Você será solicitado a inserir seu login e senha administrativos do MySQL:
     ./mysqltuner.pl
    

  4. O script retornará resultados semelhantes à saída abaixo:

    >>  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)
    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.

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 do my.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 no my.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:
1
SHOW STATUS LIKE 'open%';

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