• Marko Mäkelä's avatar
    MDEV-32068 Some calls to buf_read_ahead_linear() seem to be useless · f074223a
    Marko Mäkelä authored
    The linear read-ahead (enabled by nonzero innodb_read_ahead_threshold)
    works best if index leaf pages or undo log pages have been allocated
    on adjacent page numbers. The read-ahead is assumed not to be helpful
    in other types of page accesses, such as non-leaf index pages.
    
    buf_page_get_low(): Do not invoke buf_page_t::set_accessed(),
    buf_page_make_young_if_needed(), or buf_read_ahead_linear().
    We will invoke them in those callers of buf_page_get_gen() or
    buf_page_get() where it makes sense: the access is not
    one-time-on-startup and the page and not going to be freed soon.
    
    btr_copy_blob_prefix(), btr_pcur_move_to_next_page(),
    trx_undo_get_prev_rec_from_prev_page(),
    trx_undo_get_first_rec(), btr_cur_t::search_leaf(),
    btr_cur_t::open_leaf(): Invoke buf_read_ahead_linear().
    
    We will not invoke linear read-ahead in functions that would
    essentially allocate or free pages, because pages that are
    freshly allocated are expected to be initialized by buf_page_create()
    and not read from the data file. Likewise, freeing pages should
    not involve accessing any sibling pages, except for freeing
    singly-linked lists of BLOB pages.
    
    We will not invoke read-ahead in btr_cur_t::pessimistic_search_leaf()
    or in a pessimistic operation of btr_cur_t::open_leaf(), because
    it is assumed that pessimistic operations should be preceded by
    optimistic operations, which should already have invoked read-ahead.
    
    buf_page_make_young_if_needed(): Invoke also buf_page_t::set_accessed()
    and return the result.
    
    btr_cur_nonleaf_make_young(): Like buf_page_make_young_if_needed(),
    but do not invoke buf_page_t::set_accessed().
    
    Reviewed by: Vladislav Lesin
    Tested by: Matthias Leich
    f074223a
buf0buf.cc 118 KB