Настройка журнала транзакций в MySQL

innodb_log_buffer_size

Буфер log используется для записи транзакций в файл журнала транзакций. Значение по умолчанию - 8 или 16 мегабайт. Если транзакции часто и много обновляют данные, имеет смысл увеличить размер буфера записи, чтобы снизить частоту блокирования сервера в ожидании записи в журнал транзакций и снизить нагрузку на дисковую подсистему:

innodb_log_buffer_size = 8M

innodb_log_file_size и innodb_log_files_in_group

Опции позволяют настроить размер одного файла журнала транзакций и их количество. По умолчанию используется два файла. Рекомендуется, чтобы размер каждого из них (по другим источникам - общий размер) составлял 1/4 от размера innodb_buffer_pool_size. Однако размер файла журнала должен быть меньше 2 гигабайт - это внутреннее ограничение MySQL. При необходимости можно настроить большее количество файлов журналов при помощи опции innodb_log_files_in_group. Если транзакции часто и много обновляют данные, имеет смысл увеличить как размер самого журнала, так и их количество.

innodb_log_file_size = 256M
innodb_log_files_in_group = 2

innodb_flush_log_at_trx_commit

У журнала транзакций имеется опция, аналогичная опции буферного пула innodb_flush_method, допустимыми значениями для которой могут быть следующие значения:

  • 1 - каждая транзакция после фиксации записывается на диск (наибольшая надёжность),
  • 2 - транзакция после фиксации записывается в кэш операционной системы (компромисс между надёжностью и производительностью),
  • 0 - нет требования специально сохранять данные транзакции после её фиксации, данные сохраняются по мере заполнения буфера транзакций (наибольшая производительность, но высокий риск потери данных).

По умолчанию настроено значение 1, рекомендуется настроить значение 2:

innodb_flush_log_at_trx_commit = 2

Использованные материалы