Spec-Zone .ru
спецификации, руководства, описания, API

5.3.1. InnoDB Дисковый ввод-вывод

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

Чтение вперед

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

Буфер Doublewrite

InnoDB использует новый метод сброса файла, включающий структуру, названную буфером doublewrite. Это добавляет безопасность к восстановлению после катастрофического отказа операционной системы или отключения электричества питания, и улучшает производительность относительно большинства вариантов Unix, уменьшая потребность в fsync() операции.

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