[MDEV-25093] Adaptive flushing fails to kick in even if innodb_adaptive_flushing_lwm is hit. (possible regression) Created: 2021-03-09 Updated: 2021-06-30 Resolved: 2021-04-28 |
|
| Status: | Closed |
| Project: | MariaDB Server |
| Component/s: | Storage Engine - InnoDB |
| Affects Version/s: | 10.5.7, 10.5.8, 10.5.9 |
| Fix Version/s: | 10.5.10 |
| Type: | Bug | Priority: | Blocker |
| Reporter: | Krunal Bauskar | Assignee: | Marko Mäkelä |
| Resolution: | Fixed | Votes: | 0 |
| Labels: | regression | ||
| Issue Links: |
|
||||||||||||||||||||||||||||
| Description |
a. dirty_pct (dirty pages in buffer pool) > innodb_max_dirty_pages_pct_lwm
--------------------------------------------------------------------------- Let's understand this with some quick experiment Let's say we have a very large buffer pool (1m pages = 160 GB). Adaptive flushing should kick in if there is pressure being built on the redo log I am running an update-index workload in parallel and as we could see despite redo log Ideally, on crossing 10% of the redo-log size (20GB * 10% = 2GB) it should start flushing. MariaDB [(none)]> show status like 'Innodb_buffer_pool_pages%'; show status like 'Innodb_checkpoint_%'; Innodb_buffer_pool_pages_data 4496537 MariaDB [(none)]> show status like 'Innodb_buffer_pool_pages%'; show status like 'Innodb_checkpoint_%'; Innodb_buffer_pool_pages_data 4523411 Version tested on: 10.5 (#4498714) and of-course a sudden drop in tps is seen once the redo-log hit the max-checkpoint age (84K -> 34K) [ 255s ] thds: 1024 tps: 84861.92 qps: 84862.12 (r/w/o: 0.00/84862.12/0.00) lat (ms,95%): 12.75 err/s: 0.00 reconn/s: 0.00 --------------- Said issue looks to be a regression and older version should be studied to findout when it started regressing but likely it is 10.5 onwards only. |
| Comments |
| Comment by Marko Mäkelä [ 2021-04-28 ] | ||
|
It seems to me that this regression was introduced in
That condition was later revised in | ||
| Comment by Krunal Bauskar [ 2021-04-28 ] | ||
|
As per the original semantics (please refer to mysql documentation) https://dev.mysql.com/doc/refman/8.0/en/innodb-buffer-pool-flushing.html The innodb_adaptive_flushing_lwm variable defines a low water mark for redo log capacity. When that threshold is crossed, adaptive flushing is enabled, even if the innodb_adaptive_flushing variable is disabled. So srv_adaptive_flushing doesn't make difference if the threshold is crossed. | ||
| Comment by Marko Mäkelä [ 2021-04-28 ] | ||
|
Thank you, krunalbauskar! I was not aware that innodb_adaptive_flushing=OFF does not necessarily mean "no". greenman, please update our documentation on that. | ||
| Comment by Ian Gilfillan [ 2021-04-28 ] | ||
|
Thanks, added |