summaryrefslogtreecommitdiff
path: root/storage/innobase/buf
diff options
context:
space:
mode:
authorMarko Mäkelä <marko.makela@mariadb.com>2021-04-29 16:35:26 +0300
committerMarko Mäkelä <marko.makela@mariadb.com>2021-04-29 16:35:26 +0300
commit55e0ce1401c87fda60c5e69080bc2908230a381e (patch)
tree3f53f7e1f2b68ba3278774cabf5f5209be9ac214 /storage/innobase/buf
parentaed8605dd1ec1b2909dafeb12c5007e4d021ff3a (diff)
parente8b9d8d38cac3ca4c18a09a29601791390323bbb (diff)
downloadmariadb-git-55e0ce1401c87fda60c5e69080bc2908230a381e.tar.gz
Merge 10.5 into 10.6
Diffstat (limited to 'storage/innobase/buf')
-rw-r--r--storage/innobase/buf/buf0flu.cc23
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;