• Marko Mäkelä's avatar
    MDEV-27734 Set innodb_change_buffering=none by default · 5c46751f
    Marko Mäkelä authored
    The aim of the InnoDB change buffer is to avoid delays when a leaf page
    of a secondary index is not present in the buffer pool, and a record needs
    to be inserted, delete-marked, or purged. Instead of reading the page into
    the buffer pool for making such a modification, we may insert a record to
    the change buffer (a special index tree in the InnoDB system tablespace).
    The buffered changes are guaranteed to be merged if the index page
    actually needs to be read later.
    
    The change buffer could be useful when the database is stored on a
    rotational medium (hard disk) where random seeks are slower than
    sequential reads or writes.
    
    Obviously, the change buffer will cause write amplification, due to
    potentially large amount of metadata that is being written to the
    change buffer. We will have to write redo log records for modifying
    the change buffer tree as well as the user tablespace. Furthermore,
    in the user tablespace, we must maintain a change buffer bitmap page
    that uses 2 bits for estimating the amount of free space in pages,
    and 1 bit to specify whether buffered changes exist. This bitmap needs
    to be updated on every operation, which could reduce performance.
    
    Even if the change buffer were free of bugs such as MDEV-24449
    (potentially causing the corruption of any page in the system tablespace)
    or MDEV-26977 (corruption of secondary indexes due to a currently
    unknown reason), it will make diagnosis of other data corruption harder.
    
    Because of all this, it is best to disable the change buffer by default.
    5c46751f
ha_innodb.cc 617 KB