• Marko Mäkelä's avatar
    MDEV-28708 Increased congestion on buf_pool.flush_list_mutex · d61839c7
    Marko Mäkelä authored
    In commit f80deb95 (MDEV-27868)
    a fix for a correctness regression caused a performance regression
    by increasing the amount of work that is executed while holding
    buf_pool.flush_list_mutex.
    
    buf_page_t::set_temp_modified(): Relax an assertion, to allow an
    already dirty block to be marked as dirty.
    
    buf_page_t::flush_list_requests: Note that the variable is not
    always protected by buf_pool.flush_list_mutex. Already dirty blocks
    that are being written to will increment the counter without
    holding buf_pool.flush_list_mutex.
    
    mtr_t::process_freed_pages(): Handle pages that were freed during
    the execution of the mini-transaction.
    
    ReleaseUnlogged, mtr_t::release_unlogged(): Release modified pages when
    no log was written. This is for pages of the temporary tablespace, or for
    IMPORT TABLESPACE.
    
    ReleaseModified: Renamed from ReleaseBlocks.
    Assume that buf_pool.flush_list_mutex was acquired by the caller.
    
    ReleaseSimple: A combination of ReleaseLatches and ReleaseModified,
    for the case that for any modified pages, some earlier modifications
    are already waiting to be written.
    
    mtr_t::commit(): Invoke one of release_unlogged(), ReleaseModified,
    ReleaseSimple, ReleaseAll. Acquire and release buf_pool.flush_list_mutex
    at most once.
    
    memo_slot_release(): Simplify the code.
    
    mtr_t::sx_latch_at_savepoint(), mtr_t::x_latch_at_savepoint():
    Reduce the size of the critical section.
    
    fil_space_t::update_last_freed_lsn(), fil_space_t::clear_freed_ranges(),
    fil_space_t::add_free_range(): Assume that freed_range_mutex is held
    by the caller.
    
    buf_pool_t::prepare_insert_into_flush_list(): Determine the insert
    position for buf_pool_t::insert_into_flush_list(). Remove any clean
    blocks from buf_pool.flush_list that were encountered while searching.
    
    buf_pool_t::insert_into_flush_list(): Insert the block at the
    predetermined position.
    d61839c7
mtr0mtr.inl 4.38 KB