innodb_flush_method определяет метод сохранения данных из оперативной памяти на диск.
Приведу пример просмотра текущего значения:
show variables like 'innodb_flush_method';
У меня отобразилось пустое значение, что по умолчанию означает fsync (для Linux):
+---------------------+-------+
| Variable_name | Value |
+---------------------+-------+
| innodb_flush_method | |
+---------------------+-------+
1 row in set (0.01 sec)
Возможные значения для Windows: unbuffered (по умолчанию) и normal.
Возможные значения для Linux: fsync или 0 (по умолчанию), O_DSYNC, littlesync (тестовый), nosync, O_DIRECT, O_DIRECT_NO_FSYNC.
Для изменения значения, укажем в файле конфигурации MySQL сервера:
[mysqld]
innodb_flush_method=O_DIRECT
Перезапустим MySQL сервер чтобы применить изменения:
service mysql restart
Проверим текущее значение:
show variables like 'innodb_flush_method';
+---------------------+----------+
| Variable_name | Value |
+---------------------+----------+
| innodb_flush_method | O_DIRECT |
+---------------------+----------+
Метод O_DIRECT является надежным и в тоже время может снизить производительность, так как система будет пытаться избежать кэширования чтения/записи. Он полезен когда рейд адаптер, не имеет батарейки или когда часто пропадает электричество и сервер внезапно отключается, также необходимо учесть что должно быть достаточно производительности IOPS дисковой системы, если не достаточно, то можно выбрать например менее надежный метод O_DSYNC.
Смотрите другие мои статьи на тему MySQL