• Daniel Black's avatar
    MDEV-25342: autosize innodb_buffer_pool_chunk_size · d434250e
    Daniel Black authored
    The previous default innodb_buffer_pool_chunk_size of 128M
    made sense when the innodb buffer pool size was a few GB.
    
    When the pool size is 128GB this means the chunk size is 0.1%
    of this. Fine tuning the buffer pool size on such a fine
    increment doesn't make practical sense. Also on extremely
    large buffer pool systems, initializing on the default 128M can
    also take a considerable amount of time.
    
    When large pages are enabled, the chunk size has to be a multiple
    of an available large page size or memory allocation without
    use can occur.
    
    Previously the default 0 was documented as disabling resizing.
    With srv_buf_pool_chunk_unit > 0 assertions in the code and the
    minimium value set, I doubt this was ever the case.
    
    As such the autosizing (based on default 0) takes place as follows:
    * a 64th of the innodb_buffer_pool_size
    * if large pages, this is rounded down the the nearest multiple
      of the large page size.
    * If less than 1MB, set to 1MB.
    
    This does mean the new default innodb_buffer_pool_chunk size is
    2MB, derived form the above formular with 128MB as the buffer pool
    size.
    
    The innodb_buffer_pool_chunk_size is changed to a size_t for
    better compatiblity with the memory allocations which use size_t.
    The previous upper limit is changed to the maxium of a size_t. The
    maximium value used is the buffer pool size anyway.
    
    Getting this default value of the chunk size to a more practical
    size facilitates further development of more automated resizing
    without significant overhead or memory fragmentation.
    
    innodb_buffer_pool_resize test adjusted based on 1M default
    chunk size thanks Wlad.
    d434250e
xtrabackup.cc 195 KB