Details
-
Task
-
Status: Closed (View Workflow)
-
Major
-
Resolution: Fixed
-
None
Description
Description:
|
------------
|
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.
|
https://github.com/alibaba/AliSQL/commit/2645293fb0c1ed398f7243da2c14ab07572045b0
Attachments
Issue Links
- is blocked by
-
MDEV-25085 Simplify instrumentation for LRU eviction
- Closed
- relates to
-
MDEV-15706 Remove information_schema.innodb_metrics, innodb_monitor_enable, innodb_monitor_disable
- Open
-
MDEV-16526 Overhaul the InnoDB page flushing
- Closed
-
MDEV-16580 Remove unused monitor counters from InnoDB
- Closed
-
MDEV-23399 10.5 performance regression with IO-bound tpcc
- Closed
-
MDEV-23855 InnoDB log checkpointing causes regression for write-heavy OLTP
- Closed
The commit includes two things: a backport of a feature from MySQL 5.7 to AliSQL 5.6, and a change to split a "processed blocks" counter into "flushed blocks" and "evicted blocks" counters.
MariaDB 10.2+ is based on MySQL 5.7, so the only addition of this contribution is the split of the counter. I would prefer to do it differently, if it is OK from a performance point of view:
plinux, I think that the above is feasible to do in MariaDB 10.3.