Поддержка атомарных записей
Частичные операции записи
При записи данных в файловую систему InnoDB, как правило, нет гарантии, что операция записи будет завершена полностью (без частичных записей) в случае отключения питания или сбоя операционной системы в момент записи.
Без обнаружения или предотвращения частичных записей целостность базы данных может быть нарушена после восстановления.
innodb_doublewrite — несовершенное решение
С момента создания InnoDB имеет механизм для обнаружения и игнорирования частичных записей с помощью буфера InnoDB Doublewrite (InnoDB Doublewrite Buffer) (также можно использовать innodb_checksum для обнаружения частичной записи).
Двойные записи, управляемые системной переменной innodb_doublewrite, имеют собственные проблемы. Особенно на SSD, двукратная запись каждой страницы может оказать негативное влияние (уровни записи).
Атомарная запись — более быстрый альтернативный вариант innodb_doublewrite
Лучшим решением является непосредственный запрос к файловой системе о предоставлении гарантии атомарной (все или ничего) записи. В настоящее время это доступно только на некоторых картах SSD.
Включение атомарных записей с MariaDB 10.2
При запуске MariaDB 10.2 и более поздних версий автоматически обнаруживается использование поддерживаемых карт SSD.
При открытии таблицы InnoDB проверяется, находится ли файловая система таблицы на устройстве с поддержкой атомарных записей. В случае поддержки автоматически включается атомарная запись для таблицы. Если поддержка атомарных записей не обнаружена, используется буфер двойной записи.
Можно отключить поддержку атомарной записи для всех устройств, установив переменную innodb_use_atomic_writes в значение OFF в файле my.cnf. По умолчанию она равна ON.
Включение атомарных записей в MariaDB 5.5 до MariaDB 10.1
Чтобы использовать атомарные записи вместо буфера двойной записи, добавьте:
innodb_use_atomic_writes = 1
в файл конфигурации my.cnf.
Обратите внимание, что атомарные записи поддерживаются только на устройствах Fusion-io, использующих файловую систему NVMFS в этих версиях MariaDB.
О переменной innodb_use_atomic_writes (в MariaDB 5.5 до MariaDB 10.1)
При включении атомарных записей происходит следующее:
- Если innodb_flush_method не равно
O_DIRECT,ALL_O_DIRECT, илиO_DIRECT_NO_FSYNC, то она переключается наO_DIRECT
-
innodb_use_fallocate переключается
ON(файлы расширяются с использованиемposix_fallocate, а не записью нулей за концом файла)
- При открытии файла данных Innodb выполняется специальная
ioctl()для включения атомарных записей. Если вызов завершится неудачно, об ошибке будет записано сообщение в журнал, и оно будет возвращено вызывающей стороне. Это означает, что если системная файловая система не расположена на устройстве или файловой системе, поддерживающих атомарные записи, InnoDB/XtraDB откажется от запуска.
- Если innodb_doublewrite установлено в
ON,innodb_doublewriteбудет переключеноOFFи сообщение будет записано в журнал ошибок.
Вот блок-схема, показывающая, как работают атомарные записи внутри InnoDB:
Устройства, поддерживающие атомарные записи с MariaDB
В настоящее время MariaDB поддерживает атомарные записи на следующих устройствах:
- Устройства Fusion-io с файловой системой NVMFS. MariaDB 5.5 и выше.
- SSD Shannon. MariaDB 10.2 и выше.
© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/atomic-write-support/