Bug #108928 | Please consider adding innodb_free_list_target_size global variable. | ||
---|---|---|---|
Submitted: | 29 Oct 2022 14:44 | Modified: | 28 Nov 2022 19:55 |
Reporter: | Jean-François Gagné | Email Updates: | |
Status: | Verified | Impact on me: | |
Category: | MySQL Server: InnoDB storage engine | Severity: | S4 (Feature request) |
Version: | 5.7, 8.0 | OS: | Any |
Assigned to: | CPU Architecture: | Any |
[29 Oct 2022 14:44]
Jean-François Gagné
[29 Oct 2022 14:46]
Jean-François Gagné
Edit the title, from "Please consider splitting adding innodb_free_list_size global variable" to "Please consider adding innodb_free_list_size global variable".
[29 Oct 2022 14:47]
Jean-François Gagné
Edit title, from "Please consider adding innodb_free_list_size global variable" to "Please consider adding innodb_free_list_target_size global variable" (sorry for changing my mind many times on this, I am sloppy today.
[29 Oct 2022 15:01]
Jean-François Gagné
I realize I have not thought this through... If we only add one new variable, people not aware of the new variable might change innodb_lru_scan_depth thinking it will affect the free list target size without knowing about innodb_free_list_target_size. So maybe we need 2 new variables: a. innodb_free_list_target_size b. innodb_lru_clean_target_size For backward compatibility, changing innodb_lru_scan_depth would update both above and should probably be deprecated.
[31 Oct 2022 6:58]
MySQL Verification Team
Hello Jean-François, Thank you for the feature request! regards, Umesh
[28 Nov 2022 19:55]
Jean-François Gagné
We would also need a 3rd configuration variable (mentioned in Bug#108927, innodb_lru_scan_depth controls 3 things). This 3rd variable would be "innodb_lru_scan_size": the length of the tail of the LRU that is scanned by a query thread to find a clean page when the free list is empty, before falling-back to a single page flush. An example of the configuration would be: - innodb_free_list_target_size = 128 - innodb_lru_clean_target_size = 1024 - innodb_lru_scan_size = 256 In above, we waste little pages in the free list, we keep a large tail of the LRU clean, and we scan 1/4 of the clean tail of the LRU before doing a single page flush. It is unclear to me if innodb_lru_scan_size > innodb_lru_clean_target_size would make sense (maybe on a system with slow IOs, to save a single page flush, but if there are already 256 consecutive dirty pages at the tail of the LRU, I am not sure it is worth scanning the LRU more).