Spec-Zone.ru › MariaDB

Поддержка атомарных записей

Частичные операции записи

При записи данных в файловую систему 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:

Atomic write support flow inside InnoDB

Устройства, поддерживающие атомарные записи с MariaDB

В настоящее время MariaDB поддерживает атомарные записи на следующих устройствах:

  • Устройства Fusion-io с файловой системой NVMFS. MariaDB 5.5 и выше.
  • SSD Shannon. MariaDB 10.2 и выше.
Содержимое, воспроизведенное на этом сайте, является собственностью соответствующих владельцев, и это содержимое не предварительно проверяется MariaDB. Мнения, информация и мнения, выраженные в данном контенте, не обязательно отражают позицию MariaDB или любой другой стороны.

© 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/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API