• Jan Lindström's avatar
    MDEV-6936: Buffer pool list scan optimization · a03dd94b
    Jan Lindström authored
    Merged Facebook commit 617aef9f911d825e9053f3d611d0389e02031225
    authored by Inaam Rana to InnoDB storage engine (not XtraDB)
    from https://github.com/facebook/mysql-5.6
    
    WL#7047 - Optimize buffer pool list scans and related batch processing
    
    Reduce excessive scanning of pages when doing flush list batches. The
    fix is to introduce the concept of "Hazard Pointer", this reduces the
    time complexity of the scan from O(n*n) to O.
    
    The concept of hazard pointer is reversed in this work. Academically
    hazard pointer is a pointer that the thread working on it will declar
    such and as long as that thread is not done no other thread is allowe
    do anything with it.
    
    In this WL we declare the pointer as a hazard pointer and then if any
    thread attempts to work on it, it is allowed to do so but it has to a
    the hazard pointer to the next valid value. We use hazard pointer sol
    reverse traversal of lists within a buffer pool instance.
    
    Add an event to control the background flush thread. The background f
    thread wait has been converted to an os event timed wait so that it c
    signalled by threads that want to kick start a background flush when
    buffer pool is running low on free/dirty pages.
    a03dd94b
buf0lru.cc 78.5 KB