• Marko Mäkelä's avatar
    MDEV-25948 Remove log_flush_task · 762bcb81
    Marko Mäkelä authored
    Vladislav Vaintroub suggested that invoking log_flush_up_to()
    for every page could perform better than invoking a log write
    between buf_pool.flush_list batches, like we started doing in
    commit 3a9a3be1 (MDEV-23855).
    This could depend on the sequence in which pages are being
    modified. The buf_pool.flush_list is ordered by
    oldest_modification, while the FIL_PAGE_LSN of the pages is
    theoretically independent of that. In the pathological case,
    we will wait for a log write before writing each individual page.
    
    It turns out that we can defer the call to log_flush_up_to()
    until just before submitting the page write. If the doublewrite
    buffer is being used, we can submit a write batch of "future" pages
    to the doublewrite buffer, and only wait for the log write right
    before we are writing an already doublewritten page.
    The next doublewrite batch will not be initiated before the last
    page write from the current batch has completed.
    
    When a future version introduces asynchronous writes if the log,
    we could initiate a write at the start of a flushing batch, to
    reduce waiting further.
    762bcb81
buf0dblwr.cc 25.7 KB