• Marko Mäkelä's avatar
    MDEV-32050: Deprecate&ignore innodb_purge_rseg_truncate_frequency · 14685b10
    Marko Mäkelä authored
    The motivation of introducing the parameter
    innodb_purge_rseg_truncate_frequency in
    mysql/mysql-server@28bbd66ea5f6acf80fcb381057bb7ca5b7b188d2 and
    mysql/mysql-server@8fc2120fed11d2498ecb3635d87f414c76985fce
    seems to have been to avoid stalls due to freeing undo log pages
    or truncating undo log tablespaces. In MariaDB Server,
    innodb_undo_log_truncate=ON should be a much lighter operation
    than in MySQL, because it will not involve any log checkpoint.
    
    Another source of performance stalls should be
    trx_purge_truncate_rseg_history(), which is shrinking the history list
    by freeing the undo log pages whose undo records have been purged.
    To alleviate that, we will introduce a purge_truncation_task that will
    offload this from the purge_coordinator_task. In that way, the next
    innodb_purge_batch_size pages may be parsed and purged while the pages
    from the previous batch are being freed and the history list being shrunk.
    
    The processing of innodb_undo_log_truncate=ON will still remain the
    responsibility of the purge_coordinator_task.
    
    purge_coordinator_state::count: Remove. We will ignore
    innodb_purge_rseg_truncate_frequency, and act as if it had been
    set to 1 (the maximum shrinking frequency).
    
    purge_coordinator_state::do_purge(): Invoke an asynchronous task
    purge_truncation_callback() to free the undo log pages.
    
    purge_sys_t::iterator::free_history(): Free those undo log pages
    that have been processed. This used to be a part of
    trx_purge_truncate_history().
    
    purge_sys_t::clone_end_view(): Take a new value of purge_sys.head
    as a parameter, so that it will be updated while holding exclusive
    purge_sys.latch. This is needed for race-free access to the field
    in purge_truncation_callback().
    
    Reviewed by: Vladislav Lesin
    14685b10
rtree_purge.test 569 Bytes