MT LRU flusher
https:/
Note to docs: https:/
Implement a true multithreaded asynchronous LRU flusher.
The existing 5.7 MT flusher is not fully exploiting parallelism: the cleaner threads still serialize LRU and flush list flushing, and the coordinator thread still synchronizes across all the workers for every loop iteration. Both of these are redundant, complicate code, and make flush not as effective as it can be.
Instead, create as many LRU flusher threads as there are buffer pool instances. Each thread is assigned an instance, flushing that instance in a loop and is monitoring its free list length. According to the length, the sleep time between iterations is adapted, ranging from 0ms sleeps for empty and nearly empty free lists to 1 second for free lists having innodb_
This also allows to change the innodb_
The following InnoDB metrics are no longer accounted, as their semantics do not make sense under the current LRU flushing design. If there is need, new metric counters with different names will be created.
buffer_
buffer_
buffer_
buffer_
The need for InnoDB recovery thread writer threads is also removed, consequently all associated code is deleted.
This work is evolution of a similar feature in 5.6 (https:/
Blueprint information
- Status:
- Complete
- Approver:
- Laurynas Biveinis
- Priority:
- High
- Drafter:
- Laurynas Biveinis
- Direction:
- Approved
- Assignee:
- Laurynas Biveinis
- Definition:
- Approved
- Series goal:
- Accepted for 5.7
- Implementation:
-
Implemented
- Milestone target:
-
5.7.10-3
- Started by
- Laurynas Biveinis
- Completed by
- Laurynas Biveinis