• Sunny Bains's avatar
    Bug #11766227: InnoDB purge lag much worse for 5.5.8 versus 5.1 · 9d6d1902
    Sunny Bains authored
    Bug #11766501: Multiple RBS break the get rseg with mininum trx_t::no code during purge
          
    Bug# 59291 changes:
          
    Main problem is that truncating the UNDO log at the completion of every
    trx_purge() call is expensive as the number of rollback segments is increased.
    We truncate after a configurable amount of pages. The innodb_purge_batch_size
    parameter is used to control when InnoDB does the actual truncate. The truncate
    is done once after 128 (or TRX_SYS_N_RSEGS iterations). In other words we
    truncate after purge 128 * innodb_purge_batch_size. The smaller the batch
    size the quicker we truncate.
          
    Introduce a new parameter that allows how many rollback segments to use for
    storing REDO information. This is really step 1 in allowing complete control
    to the user over rollback space management.
          
    New parameters:
        i) innodb_rollback_segments = number of rollback_segments to use
           (default is now 128) dynamic parameter, can be changed anytime.
           Currently there is little benefit in changing it from the default.
          
    Optimisations in the patch.
          
        i. Change the O(n) behaviour of trx_rseg_get_on_id() to O(log n)
           Backported from 5.6. Refactor some of the binary heap code.
           Create a new include/ut0bh.ic file.
          
        ii. Avoid truncating the rollback segments after every purge.
          
    Related changes that were moved to a separate patch:
          
        i. Purge should not do any flushing, only wait for space to be free so that
           it only does purging of records unless it is held up by a long running
           transaction that is preventing it from progressing.
          
       ii. Give the purge thread preference over transactions when acquiring the
           rseg->mutex during commit. This to avoid purge blocking unnecessarily
           when getting the next rollback segment to purge.
          
    Bug #11766501 changes:
          
    Add the rseg to the min binary heap under the cover of the kernel mutex and
    the binary heap mutex. This ensures the ordering of the min binary heap.
          
    The two changes have to be committed together because they share the same
    that fixes both issues.
          
    rb://567 Approved by: Inaam Rana.
    9d6d1902
ha_innodb.cc 331 KB