В MySQL 5.1 (.57-1.dotdeb) у меня есть база данных ~ 2,0 ГБ и в среднем ~ 350 запросов в секунду.
Все работает нормально, если я не активирую двоичный журнал. Использование ЦП приличное (~ 15% от 1 ядра ЦП).
И если я активирую двоичный журнал, все внезапно становится ГИПЕРМедленным. Среднее количество запросов составляет ~ 90 запросов в секунду, и каждый запрос занимает +/- 4 секунды.
Вы должны знать, что:
Когда бинарный журнал активирован:
В обычное время у меня есть ~ 15 рабочих PHP-FPM, и если активирован двоичный журнал, это число может доходить до 150-200 (макс.).
Нет необходимости уточнять, что вся система на данный момент заморожена. :-)
Вот 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/
Скажите, если у вас есть какие-либо представления об этой проблеме!
Спасибо
ИЗМЕНИТЬ 1 @ Джейсон:
После установки innodb_log_file_size = 1G
, выключив сервер, переименовал ib_logfile0 и ib_logfile1, перезапустил сервер с помощью binlog.
Сервер mysql просто вообще не отвечает. Он настолько медленный, что на этот раз страница не отображается.
Обратите внимание, что проблем не возникнет, если я снова отключу бинлог.
Средняя нагрузка кажется высокой: 3,5даже если процессор не так востребован ...
РЕДАКТИРОВАТЬ 3:
@ Джейсон, @ Брайан
После всего,
Похоже, это ошибка MySQL 5.1.
После многих тестов ничего не изменилось.
Не проблема, связанная с ЦП, ОЗУ или вводом-выводом.
Я переключил один из своих серверов на Percona MySQL 5.5, и теперь он отлично работает с тем же оборудованием, базой данных и конфигурацией.
Может быть, на 20% или 30% быстрее, чем MySQL 5.1 ...
Что еще?
Каково ваше распределение чтения и записи? У вас есть приложение для интенсивной записи?
Какая у вас дисковая подсистема?
Вы не указали innodb_log_file_size. На загруженном сервере значение по умолчанию слишком низкое. Увеличение этого может помочь с вашими проблемами ввода-вывода, когда включен двоичный журнал.
Также не рекомендуется использовать sync_binlog = 0, поскольку в случае сбоя сервера ваш двоичный журнал не будет синхронизироваться с транзакциями.
Ура
Ваша аппаратная установка кажется довольно мощной для памяти и процессора. Включение bin-logs означает немного больше записи на диск. Вы пробовали разместить свои bin-logы на другом физическом диске?