Как рассчитать innodb log buffer size

Материал из poiuty wiki
Перейти к: навигация, поиск

Лог файл должен быть достаточно большим чтоб InnoDB мог оптимизировать свои I/O операции.
Но при этом не настолько большим, что восстановление после ошибки займет уйму времени.


Получим необходимые для расчета данные.

mysql> pager grep sequence
PAGER set to 'grep sequence'

mysql> show engine innodb status\G select sleep(60); show engine innodb status\G
Log sequence number 14734185718809
1 row in set (0.00 sec)
1 row in set (1 min 0.00 sec)
Log sequence number 14734189583344
1 row in set (0.00 sec)

Посчитаем сколько данных за минуту записывает MySQL.

mysql> pager
Default pager wasn't set, using stdout.

mysql> select (14734189583344 - 14734185718809) / 1024 / 1024 as MB_per_min;
+------------+
| MB_per_min |
+------------+
| 3.68550777 |
+------------+
1 row in set (0.00 sec)

Посчитаем сколько данных за 60 минут записывает MySQL.

3.68*60 = 220.8Mb

Так как у нас два бинарных лога (по дефолту), то разделим это значение на два.

220.8/2 = 110.4Mb

"Округлим" найденное значение до 128Mb и отредактируем /etc/mysql/my.cnf

innodb_log_file_size = 128M

Остановим MySQL, переместим старые бинарные логи, запустим.

/etc/init.d/mysql stop
mv /var/lib/mysql/ib_logfile0 /var/lib/mysql/ib_logfile0_old
mv /var/lib/mysql/ib_logfile1 /var/lib/mysql/ib_logfile1_old
/etc/init.d/mysql start

Если MySQL запустился, удалим старые бинарные логи.

rm /var/lib/mysql/ib_logfile0_old
rm /var/lib/mysql/ib_logfile1_old