• Monty's avatar
    Fixed performance problem with Aria in find_head() · 55bc3f1d
    Monty authored
    For some simple benchmarks, a majority of time was
    spend in find_head() which tries to find the best
    place to put the record.
    
    The result of this patch is a 2x or more speedup for
    inserts without keys for format PAGE. All changes
    are only related to how rows are stored
    
    Should fix some of the problems mentioned in:
    MDEV-8132 Temporary tables using Aria with very poor performance
    MDEV-9079 Aria very slow for internal temporary tables
    MDEV-5841 Mariadb very poor temporary performance
    
    The following changes where done:
    - For rows with a small row length that fits into
      a page (818 bytes with 8192 pages), stop as soon as we
      hit a match.
    - Added markers full_head_size and full_tail_size that tells
      us where to start searching on the bitmap page
    - Ensure that page->used_size is correctly updated when
      bitmap grows. This allows us to stop searching at used_size
    - Added code to check that the bitmap variables are correct.
    - Fixed a wrong test where we set "first_bitmap_with_space".
      This shouldn't have caused any notable problems.
    55bc3f1d
ma_bitmap.c 100 KB