No MySQL 5.1 (.57-1.dotdeb), tenho um banco de dados de ~ 2.0Gb e uma média de ~ 350 solicitações por segundo.
Tudo está funcionando bem se eu não ativar o log binário. O uso da CPU é decente (~ 15% do núcleo de 1 CPU).
E se eu ativar o log binário, tudo é repentinamente HYPER lento. A média das solicitações cai para ~ 90 solicitações / seg. E cada solicitação leva +/- 4 segundos para ser concluída.
Você precisa saber:
- O MySQL está devidamente ajustado, tuning-primer.sh fornece bons resultados em tempo "normal"
- O hardware é um E5620 Bi-Xeon (geração Westmere) com 24 GO RAM
- 12 GB de RAM são permitidos para o InnoDB
- Executando o Debian 6 64bits
Quando o log binário é ativado:
- O uso da CPU do MySQL é muito baixo. Cerca de 1 ou 2% de 1 núcleo. Não muito% wa para I / O em "top", cerca de 5-7%.
- O uso da memória parece bem. Eu testei com 1 GO para InnoDB em vez de 12 GO, sem alteração.
- As consultas são tão longas para serem executadas que o php5-fpm cria muitos novos processos para lidar com o tráfego.
No tempo normal, tenho ~ 15 trabalhadores do PHP-FPM, e se o log binário estiver ativado, esse número pode chegar a 150-200 (max).
Não é preciso precisar que todo o sistema está congelado neste momento. :-)
Aqui está my.cnf:
[client]
port = 3306
socket = /var/run/mysqld/mysqld.sock
[mysqld_safe]
socket = /var/run/mysqld/mysqld.sock
nice = 0
[mysqld]
user = mysql
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
port = 3306
basedir = /usr
datadir = /var/lib/mysql
tmpdir = /tmp
language = /usr/share/mysql/english
skip-external-locking
bind-address = 127.0.0.1
key_buffer = 16M
max_allowed_packet = 16M
thread_stack = 192K
thread_cache_size = 32
myisam-recover = BACKUP
max_connections = 200
table_cache = 512
#thread_concurrency = 10
query_cache_limit = 1M
query_cache_size = 16M
max_heap_table_size = 64M
tmp_table_size = 64M
innodb_buffer_pool_size = 12G
#general_log_file = /var/log/mysql/mysql.log
#general_log = 1
long_query_time = 4
#log_slow_queries = /var/log/mysql/mysql-slow.log
#log-queries-not-using-indexes
#server-id = 1
#report-host=host
# NOTE : All the values here are uncommented when i activate binlog
#log-bin = /var/log/mysql/mysql-bin.log
#log-error = /var/log/mysql/mysql-err.log
#sync_binlog = 0
#binlog_cache_size = 128M
#expire_logs_days = 2
#max_binlog_size = 100M
#max_binlog_cache_size = 1G
[mysqldump]
quick
quote-names
max_allowed_packet = 16M
[mysql]
#no-auto-rehash # faster start of mysql but no tab completition
[isamchk]
key_buffer = 16M
!includedir /etc/mysql/conf.d/
Diga-me se você tem alguma idéia sobre esse problema!
Obrigado
EDIT 1 @Jason:
Depois de definir innodb_log_file_size = 1G
, encerrando o servidor, renomeou o ib_logfile0 e ib_logfile1, reiniciou o servidor com o log binário.
O servidor mysql simplesmente não responde. É tão lento que nenhuma página é exibida desta vez.
Note que não há problema se eu desativar o log binário novamente.
As médias de carga parecem ser altas: 3,5 , mesmo que a CPU não seja tão solicitada ...
EDIT 3:
@Jason, @Bryan
Afinal,
Parece ser um bug do MySQL 5.1.
Após muitos testes, nada mudou.
Não é um problema relacionado com CPU, RAM ou IO.
Eu troquei um dos meus servidores para o Percona MySQL 5.5 e ele simplesmente funciona bem agora, com o mesmo hardware, banco de dados e configuração.
Talvez 20% ou 30% mais rápido que o MySQL 5.1 ...
O que mais?