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
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
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
n is the number of
InnoDB background threads. The number of
InnoDB background threads is controlled by
Section 17.8.5, “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.
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
InnoDB from starting, you can start
the server with
option may also be disabled automatically during startup if
InnoDB detects a potential problem such as a
tmpfs file system, and Linux kernel that does
not support asynchronous I/O on