MySQL 5.5 changes to the
InnoDB
I/O subsystem enable more
effective use of available I/O capacity. The changes also
provide more control over configuration of the I/O subsystem.
Background I/O Threads
InnoDB
uses background threads to
perform I/O for several kinds of activities, two of which are
prefetching disk blocks and flushing dirty pages. Previously,
InnoDB
used only one thread each to
perform these activities, but that can underutilize server
capacity. MySQL 5.5 enables use of multiple
background read and write threads, making it possible to read
and write pages faster.
The patch makes the number of background I/O threads
configurable using system variables:
innodb_read_io_threads
controls
the number of threads to use for read prefetch requests.
innodb_write_io_threads
controls the number of threads to use for writing dirty pages
from the buffer cache to disk. The default for both variables is
4.
The ability to increase the number of I/O threads can benefit
systems that use multiple disks for
InnoDB
. However, the type of I/O
being done should be considered. On systems that use buffered
writes rather than direct writes, increasing the write thread
count higher than 1 might yield little benefit because writes
will be quick already.
Adjustable I/O Rate
Previously, the number of input/output operations per second
(IOPS) that InnoDB
will perform was
a compile-time parameter. The rate was chosen to prevent
background I/O from exhausting server capacity and the
compiled-in value of 100 reflected an assumption that the server
can perform 100 IOPS. However, many modern systems can exceed
this, so the value is low and unnecessarily restricts I/O
utilization.
MySQL 5.5 exposes this I/O rate parameter as a
system variable,
innodb_io_capacity
. This
variable can be set at server startup, which enables higher
values to be selected for systems capable of higher I/O rates.
Having a higher I/O rate can help the server handle a higher
rate of row changes because it may be able to increase
dirty-page flushing, deleted-row removal, and application of
changes to the insert buffer. The default value of
innodb_io_capacity
is 200. In
general, you can increase the value as a function of the number
of drives used for InnoDB
I/O.
The ability to raise the I/O limit should be especially
beneficial on platforms that support many IOPS. For example,
systems that use multiple disks or solid-state disks for
InnoDB
are likely to benefit from
the ability to control this parameter.