When INSERTs are done to a table, often the
values of indexed columns (particularly the values of secondary
keys) are not in sorted order. This means that the inserts of such
values into secondary B-tree indexes is “random”, and
this can cause excessive i/o if the entire index does not fit in
memory. InnoDB has an insert buffer that caches changes to
secondary index entries when the relevant page is not in the
buffer pool, thus avoiding I/O operations by not reading in the
page from the disk. The buffered changes are written into a
special insert buffer tree and are subsequently merged when the
page is loaded to the buffer pool. The InnoDB main thread merges
buffered changes when the server is nearly idle.
Usually, this process will result in fewer disk reads and writes, especially during bulk inserts. However, the insert buffer tree will occupy a part of the buffer pool. If the working set almost fits in the buffer pool, it may be useful to disable insert buffering. If the working set entirely fits in the buffer pool, insert buffering will not be used anyway, because the index would exist in memory.
Beginning with InnoDB Plugin 1.0.3, you can control whether
InnoDB performs insert buffering with the system configuration
parameter innodb_change_buffering. The allowed values of
innodb_change_buffering are none (do not
buffer any operations) and inserts (buffer
insert operations, the default). You can set the value of this
parameter in the MySQL option file (my.cnf or
my.ini) or change it dynamically with the
SET GLOBAL command, which requires the
SUPER privilege. Changing the setting affects
the buffering of new operations; the merging of already buffered
entries is not affected.
This is the User’s Guide for InnoDB Plugin 1.0.8 for MySQL 5.1, generated on 2012-05-23 (revision: 30566) .
