Гарантия свойств ACID для баз данных InnoDB
Какие шаги необходимо предпринять, чтобы убедиться, что сконфигурированный по умолчанию сервер InnoDB действительно совместим с ACID? На странице конфигурации InnoDB упоминается, что само оборудование должно быть настроено на соблюдение fsync
вызовы, т.е. отключить любые кеши обратной записи.
На этой странице упоминаются некоторые другие проблемы, но они могут быть связаны между собой двоичным журналом и журналом InnoDB и могут быть немного устаревшими в отношении настроек по умолчанию для MySQL 5.x.
При чтении страницы двоичного документа журнала может показаться, что параметр sync_binlog=1 не требуется для свойств ACID в целом, а только для свойств ACID в отношении восстановления и репликации на определенный момент времени.
Итак, достаточно ли отключить кэширование диска с обратной записью или есть другие настройки, которые необходимо настроить?
2 ответа
Вы задаете сложный вопрос. Вот настройки в MySQL:
- синхронизации FRM
- Двоичный синхронизации
- innodb-flush-log-at-trx-commit = 1 (по умолчанию)
- innodb_support_xa = 1 (по умолчанию)
- innodb_doublewrite = 1 (по умолчанию)
- sync-relay-log = 1 (если подчиненный)
- rpl_transaction_enabled = 1 (если подчиненный - только в 5.5 / Percona Server)
А из ОС / Файловой системы / и т.д:
- Отключите все кэши без батарей на дисках или контроллерах рейдов.
- Убедитесь, что ОС не в режиме ноутбука и т. Д.
Отключение обратной записи не обязательно приведет к поломке ACID. Этого не произойдет, если на вашем RAID-контроллере будет кэш-память с резервным питанием от батареи, и выгода от этого - огромное увеличение емкости записи. Однако следует помнить о том, что некоторые жесткие диски и твердотельные накопители (например, Intel X-25) имеют свои собственные кэши обратной записи, которые НЕ работают от батареи, даже если ваш RAID-контроллер установлен и им определенно требуется отключение. Установка O_DIRECT также защитит вашу ОС и файловую систему и позволит RAID-контроллеру делать свое дело более эффективно.
Я обычно использую эти настройки для разумной надежности:
innodb_flush_method = O_DIRECT innodb_support_xa = 1 innodb-flush-log-at-trx-commit = 2