2015-01-23 2 views
2

Согласно тузд документации по O_DSYNC (http://dev.mysql.com/doc/refman/5.5/en/innodb-parameters.html#sysvar_innodb_flush_method):Mysql O_DSYNC путаница

«O_DSYNC:. InnoDB использует O_SYNC, чтобы открыть и очистить файлы журналов и FSYNC(), чтобы очистить файлы данных InnoDB не использует O_DSYNC напрямую потому что были проблемы с ним на многих разновидностях Unix ».

Но вызов fsync() заставляет файл синхронизировать состояние завершения целостности файла ввода/вывода (данные и метаданные), а функция fdatasync() только заставляет файл в состояние завершения целостности данных с синхронизированным вводом-выводом. (без метаданных)

Поэтому в соответствии с этим mysql должен использовать fdatasync() ant not fsync() для имитации O_DSYNC (что заставляет записи выполняться в соответствии с требованиями завершения целостности данных с синхронизированным вводом-выводом, например fdatasync()), , флаг. Что мне здесь не хватает?

ответ

2

Я не думаю, что вы здесь ничего не пропустили.

Разработчики InnoDB являются консервативными. Я ожидаю, что они проверили fdatasync на различных платформах Unix и обнаружили, что это иногда приводило к повреждению некоторых систем. Подобно тому, что они нашли с O_DSYNC.

Взвешивание данных с производительностью, разработчики InnoDB играют в безопасности, используя то, что протестировано для «работы» на тестируемых платформах.