diff options
author | Marko Mäkelä <marko.makela@mariadb.com> | 2021-04-29 16:35:26 +0300 |
---|---|---|
committer | Marko Mäkelä <marko.makela@mariadb.com> | 2021-04-29 16:35:26 +0300 |
commit | 55e0ce1401c87fda60c5e69080bc2908230a381e (patch) | |
tree | 3f53f7e1f2b68ba3278774cabf5f5209be9ac214 /storage/innobase/buf | |
parent | aed8605dd1ec1b2909dafeb12c5007e4d021ff3a (diff) | |
parent | e8b9d8d38cac3ca4c18a09a29601791390323bbb (diff) | |
download | mariadb-git-55e0ce1401c87fda60c5e69080bc2908230a381e.tar.gz |
Merge 10.5 into 10.6
Diffstat (limited to 'storage/innobase/buf')
-rw-r--r-- | storage/innobase/buf/buf0flu.cc | 23 |
1 files changed, 19 insertions, 4 deletions
diff --git a/storage/innobase/buf/buf0flu.cc b/storage/innobase/buf/buf0flu.cc index 55b261c6c4d..b29122ea158 100644 --- a/storage/innobase/buf/buf0flu.cc +++ b/storage/innobase/buf/buf0flu.cc @@ -1855,6 +1855,20 @@ ATTRIBUTE_COLD static void buf_flush_sync_for_checkpoint(lsn_t lsn) } } +/** Check if the adpative flushing threshold is recommended based on +redo log capacity filled threshold. +@param oldest_lsn buf_pool.get_oldest_modification() +@return true if adaptive flushing is recommended. */ +static bool af_needed_for_redo(lsn_t oldest_lsn) +{ + lsn_t age= (log_sys.get_lsn() - oldest_lsn); + lsn_t af_lwm= static_cast<lsn_t>(srv_adaptive_flushing_lwm * + static_cast<double>(log_sys.log_capacity) / 100); + + /* if age > af_lwm adaptive flushing is recommended */ + return (age > af_lwm); +} + /*********************************************************************//** Calculates if flushing is required based on redo generation rate. @return percent of io_capacity to flush to manage redo space */ @@ -2103,9 +2117,14 @@ unemployed: const double dirty_pct= double(dirty_blocks) * 100.0 / double(UT_LIST_GET_LEN(buf_pool.LRU) + UT_LIST_GET_LEN(buf_pool.free)); + const lsn_t oldest_lsn= buf_pool.get_oldest_modified() + ->oldest_modification(); + ut_ad(oldest_lsn); + bool idle_flush= false; if (lsn_limit); + else if (af_needed_for_redo(oldest_lsn)); else if (srv_max_dirty_pages_pct_lwm != 0.0) { const ulint activity_count= srv_get_activity_count(); @@ -2128,10 +2147,6 @@ unemployed: else if (dirty_pct < srv_max_buf_pool_modified_pct) goto unemployed; - const lsn_t oldest_lsn= buf_pool.get_oldest_modified() - ->oldest_modification(); - ut_ad(oldest_lsn); - if (UNIV_UNLIKELY(lsn_limit != 0) && oldest_lsn >= lsn_limit) buf_flush_sync_lsn= 0; |