backport from WebScaleSQL
This patch includes:
--- backport of upstream work around buffer pool list scan.
WL#7047 - Optimize buffer pool list scans and related batch processing code
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(n).
The concept of hazard pointer is reversed in this work. Academically a
hazard pointer is a pointer that the thread working on it will declare as
such and as long as that thread is not done no other thread is allowed to
do anything with it.
In this WL we declare the pointer as a hazard pointer and then if any other
thread attempts to work on it, it is allowed to do so but it has to adjust
the hazard pointer to the next valid value. We use hazard pointer solely for
reverse traversal of lists within a buffer pool instance.
Add an event to control the background flush thread. The background flush
thread wait has been converted to an os event timed wait so that it can be
signalled by threads that want to kick start a background flush when the
buffer pool is running low on free/dirty pages.
--- fix for mysql bug#71411
buf_flush_LRU() returns the number of pages processed. There are
two types of processing that can happen. A page can get evicted or
a page can get flushed. These two numbers are quite distinct and
should not be mixed.
Simplify instrumentation for LRU eviction
Remove information_schema.innodb_metrics, innodb_monitor_enable, innodb_monitor_disable
Overhaul the InnoDB page flushing
Remove unused monitor counters from InnoDB
10.5 performance regression with IO-bound tpcc
InnoDB log checkpointing causes regression for write-heavy OLTP