14.8.7 Использование асинхронного ввода-вывода на Linux
InnoDB использует подсистему асинхронного ввода-вывода (родной AIO) на Linux для выполнения запросов предварительной чтения и записи для страниц файлов данных. Это поведение контролируется параметром конфигурации innodb_use_native_aio, который применяется только к системам Linux и по умолчанию включен. В других системах Unix-подобного типа InnoDB использует только синхронный ввод-вывод. Исторически InnoDB использовал асинхронный ввод-вывод только в системах Windows. Использование подсистемы асинхронного ввода-вывода на Linux требует библиотеку libaio.
При синхронном вводе-выводе потоки запросов помещают запросы ввода-вывода в очередь, а InnoDB фоновые потоки извлекают запросы из очереди по одному, выполняя вызов синхронного ввода-вывода для каждого. Когда запрос ввода-вывода завершается и вызов ввода-вывода возвращает значение, InnoDB фоновый поток, обрабатывающий запрос, вызывает обработчик завершения ввода-вывода и возвращается для обработки следующего запроса. Количество запросов, которые могут обрабатываться параллельно, равно n, где n — это количество InnoDB фоновых потоков. Количество InnoDB фоновых потоков контролируется innodb_read_io_threads и innodb_write_io_threads. См. Раздел 14.8.6, «Настройка количества фоновых потоков ввода-вывода InnoDB».
При использовании родного AIO потоки запросов отправляют запросы ввода-вывода непосредственно в операционную систему, тем самым устраняя ограничение, накладываемое количеством фоновых потоков. InnoDB фоновых потоков ожидают событий ввода-вывода для сигнализации о завершении запросов. Когда запрос завершается, фоновый поток вызывает обработчик завершения ввода-вывода и возобновляет ожидание событий ввода-вывода.
Преимущество родного AIO — масштабируемость для систем с интенсивной работой с вводом-выводом, которые обычно демонстрируют много ожидающих операций чтения/записи в выводе SHOW ENGINE INNODB STATUS\G. Увеличение параллельной обработки при использовании родного AIO означает, что тип планировщика ввода-вывода или свойства контроллера массива дисков оказывают большее влияние на производительность ввода-вывода.
Потенциальный недостаток родного AIO для систем с интенсивной работой с вводом-выводом заключается в отсутствии контроля над количеством запросов записи ввода-вывода, отправляемых в операционную систему одновременно. Слишком много запросов записи ввода-вывода, отправленных в операционную систему для параллельной обработки, в некоторых случаях может привести к голоданию операций чтения ввода-вывода, в зависимости от уровня активности ввода-вывода и возможностей системы.
Если проблема с подсистемой асинхронного ввода-вывода в ОС препятствует запуску InnoDB, можно запустить сервер с innodb_use_native_aio=0. Этот параметр также может быть автоматически отключен во время запуска, если InnoDB обнаружит потенциальную проблему, такую как сочетание местоположения tmpdir, файловой системы tmpfs и ядра Linux, которое не поддерживает асинхронный ввод-вывод на tmpfs.
© 2025 Oracle
Licensed under the GPLv2 License.