14.8.7 Using Asynchronous I/O on Linux
InnoDB uses the asynchronous I/O subsystem (native AIO) on Linux to perform read-ahead and write requests for data file pages. This behavior is controlled by the
innodb_use_native_aio configuration option, which applies to Linux systems only and is enabled by default. On other Unix-like systems,
InnoDB uses synchronous I/O only. Historically,
InnoDB only used asynchronous I/O on Windows systems. Using the asynchronous I/O subsystem on Linux requires the
With synchronous I/O, query threads queue I/O requests, and
InnoDB background threads retrieve the queued requests one at a time, issuing a synchronous I/O call for each. When an I/O request is completed and the I/O call returns, the
InnoDB background thread that is handling the request calls an I/O completion routine and returns to process the next request. The number of requests that can be processed in parallel is
n is the number of
InnoDB background threads. The number of
InnoDB background threads is controlled by
innodb_write_io_threads. See Section 14.8.6, “Configuring the Number of Background InnoDB I/O Threads”.
With native AIO, query threads dispatch I/O requests directly to the operating system, thereby removing the limit imposed by the number of background threads.
InnoDB background threads wait for I/O events to signal completed requests. When a request is completed, a background thread calls an I/O completion routine and resumes waiting for I/O events.
The advantage of native AIO is scalability for heavily I/O-bound systems that typically show many pending reads/writes in
SHOW ENGINE INNODB STATUS\G output. The increase in parallel processing when using native AIO means that the type of I/O scheduler or properties of the disk array controller have a greater influence on I/O performance.
A potential disadvantage of native AIO for heavily I/O-bound systems is lack of control over the number of I/O write requests dispatched to the operating system at once. Too many I/O write requests dispatched to the operating system for parallel processing could, in some cases, result in I/O read starvation, depending on the amount of I/O activity and system capabilities.
If a problem with the asynchronous I/O subsystem in the OS prevents
InnoDB from starting, you can start the server with
innodb_use_native_aio=0. This option may also be disabled automatically during startup if
InnoDB detects a potential problem such as a combination of
tmpfs file system, and Linux kernel that does not support asynchronous I/O on