Ajustando um servidor MySQL

2

Eu herdei um servidor mysql, e então comecei a executar o script MySQLTuner.pl. Eu não sou um especialista em MySQL, mas posso ver que definitivamente há uma bagunça aqui. Eu não estou olhando para ir atrás de cada coisa que precisa ser consertada e afinada, mas eu quero pegar o maior e mais fraco dos frutos.

A memória total no sistema é: 512MB. Sim, eu sei que é baixo, mas é o que temos por enquanto.

Veja o que o script tinha a dizer:

General recommendations:
    Run OPTIMIZE TABLE to defragment tables for better performance
    MySQL started within last 24 hours - recommendations may be inaccurate
    Enable the slow query log to troubleshoot bad queries
    When making adjustments, make tmp_table_size/max_heap_table_size equal
    Reduce your SELECT DISTINCT queries without LIMIT clauses
    Increase table_cache gradually to avoid file descriptor limits
    Your applications are not closing MySQL connections properly
Variables to adjust:
    query_cache_limit (> 1M, or use smaller result sets)
    tmp_table_size (> 16M)
    max_heap_table_size (> 16M)
    table_cache (> 64)
    innodb_buffer_pool_size (>= 326M)

Para as variáveis que ele recomenda que eu ajuste, nem vejo a maioria delas no arquivo mysql.cnf.

[client]
port            = 3306
socket          = /var/run/mysqld/mysqld.sock

[mysqld_safe]
socket          = /var/run/mysqld/mysqld.sock
nice            = 0

[mysqld]
innodb_buffer_pool_size         = 220M
innodb_flush_log_at_trx_commit  = 2
innodb_file_per_table           = 1
innodb_thread_concurrency       = 32
skip-locking
big-tables
max_connections             = 50
innodb_lock_wait_timeout    = 600
slave_transaction_retries   = 10
innodb_table_locks      = 0
innodb_additional_mem_pool_size = 20M
user                = mysql
socket          = /var/run/mysqld/mysqld.sock
port            = 3306
basedir             = /usr
datadir         = /var/lib/mysql
tmpdir              = /tmp
skip-external-locking
bind-address        = localhost
key_buffer              = 16M
max_allowed_packet      = 16M
thread_stack            = 192K
thread_cache_size       = 4
myisam-recover          = BACKUP
query_cache_limit       = 1M
query_cache_size        = 16M
log_error               = /var/log/mysql/error.log
expire_logs_days    = 10
max_binlog_size         = 100M
skip-locking
innodb_file_per_table   = 1
big-tables

[mysqldump]
quick
quote-names
max_allowed_packet      = 16M

[mysql]

[isamchk]
key_buffer              = 16M

!includedir /etc/mysql/conf.d/
    
por NinjaCat 06.02.2011 / 17:35

2 respostas

4

Uma citação direta de um artigo técnico recente da Percona:

"As duas configurações mais importantes para o InnoDB são as tamanho do buffer pool e o tamanho do arquivo de log. Quase todos os outra configuração no servidor pode ser deixada em seu padrão sem causar muito dano - ou pelo menos, os padrões são aceitáveis em muitos casos - mas esses dois configurações não podem ser deixadas em seus padrões, e nunca são aceitável para servidores de produção. "

Felicidades

    
por 09.02.2011 / 16:52
0

Primeiro, a maneira como o arquivo my.cnf funciona é que, se uma diretiva de configuração não estiver no arquivo, ela será considerada o valor padrão. (Ou seja, se o arquivo my.cnf estiver completamente vazio, todas as opções de configuração serão definidas como padrão.) Portanto, se, por exemplo, você quisesse agir com base nessa sugestão:

tmp_table_size (> 16M)

... basta adicionar esta linha ao seu arquivo my.cnf :

tmp_table_size 32M

(sugiro verificar a documentação do MySQL antes de divergir demais das sugestões do roteiro, mas você parece cauteloso o bastante para estar planejando fazer isso já.)

Parece que algumas das coisas que você precisa implementar estarão em seu aplicativo (por exemplo, garantir que as conexões sejam fechadas corretamente, otimizar as consultas etc.). Como você faz isso vai depender de como esse aplicativo é construído e quais ligações de idioma você está usando.

    
por 09.02.2011 / 16:00

Tags