Spec-Zone.ru › MySQL 5.7

14.12.1 Ввод/вывод InnoDB на диск

InnoDB использует асинхронный ввод/вывод на диск, где это возможно, создавая несколько потоков для обработки операций ввода/вывода, позволяя при этом другим операциям базы данных продолжаться, пока операция ввода/вывода еще выполняется. В операционных системах Linux и Windows InnoDB использует доступные функции ОС и библиотек для выполнения “родного” асинхронного ввода/вывода. В других платформах InnoDB по-прежнему использует потоки ввода/вывода, но потоки могут фактически ожидать завершения запросов ввода/вывода; этот метод известен как “симулированный” асинхронный ввод/вывод.

Предварительная загрузка данных

Если InnoDB может определить, что существует высокая вероятность того, что данные могут потребоваться в ближайшее время, оно выполняет операции предварительной загрузки данных, чтобы загрузить эти данные в пул буферов, чтобы они были доступны в памяти. Выполнение нескольких больших запросов чтения для непрерывных данных может быть эффективнее, чем выполнение нескольких маленьких разрозненных запросов. В InnoDB есть две эвристики предварительной загрузки данных:

  • При последовательной предварительной загрузке, если InnoDB замечает, что шаблон доступа к сегменту в табличном пространстве последовательный, оно предварительно отправляет пакет чтений страниц базы данных в систему ввода/вывода.

  • При случайной предварительной загрузке, если InnoDB замечает, что какая-то область в табличном пространстве, похоже, полностью загружается в пул буферов, оно отправляет оставшиеся чтения в систему ввода/вывода.

Сведения о настройке эвристик предварительной загрузки данных см. в разделе 14.8.3.4 «Настройка предварительной загрузки буфера пула InnoDB (Предварительная загрузка)».

Буфер двойного записывания

InnoDB использует новый метод записи в файл, включающий структуру, называемую буфером двойного записывания, который по умолчанию включен в большинстве случаев (innodb_doublewrite=ON). Он добавляет безопасность к восстановлению после непредвиденного выхода или отключения питания и повышает производительность на большинстве Unix-систем, уменьшая необходимость в fsync() операциях.

Перед записью страниц в файл данных, InnoDB сначала записывает их в непрерывную область табличного пространства, называемую буфером двойного записывания. Только после завершения записи и записи в буфер двойного записывания InnoDB записывает страницы в их надлежащие позиции в файле данных. Если в операционной системе, подсистеме хранения или непредвиденный выход mysqld процесс происходит в середине записи страницы (что вызывает условие), InnoDB позже сможет найти хорошую копию страницы из буфера двойного записывания во время восстановления.

Если файлы табличного пространства системы (“файлы ibdata”) находятся на устройствах Fusion-io, которые поддерживают атомарные записи, буферизация двойного записывания автоматически отключается, и атомарные записи Fusion-io используются для всех файлов данных. Поскольку настройка буфера двойного записывания является глобальной, буферизация двойного записывания также отключается для файлов данных, находящихся на оборудовании, не являющемся Fusion-io. Эта функция поддерживается только на оборудовании Fusion-io и активируется только для Fusion-io NVMFS в Linux. Для максимальной пользы от этой функции рекомендуется настройка innodb_flush_method со значением O_DIRECT.

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-5.7-en/innodb-disk-io.html

Spec-Zone.ru

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