summaryrefslogtreecommitdiff
path: root/storage/innobase
diff options
context:
space:
mode:
authorMarko Mäkelä <marko.makela@mariadb.com>2021-02-18 18:20:50 +0200
committerMarko Mäkelä <marko.makela@mariadb.com>2021-02-18 18:20:50 +0200
commit93522bc9a987e756ae1872953af1ddc1731ce9b6 (patch)
treefb5415a37d3e9138e6d11b06282cab2f648d69e3 /storage/innobase
parent9d7dc1f6d0494d8c408f2c3e51a214e364783346 (diff)
downloadmariadb-git-93522bc9a987e756ae1872953af1ddc1731ce9b6.tar.gz
MDEV-24917 Page cleaner wrongly remains idlebb-10.5-MDEV-24917
commit a9933105938d4d809ea33ac3196e681cd581374f (MDEV-24537) introduced the regression that the page cleaner will keep sleeping even if there is work to do. innodb_max_dirty_pages_pct_update(): Always wake up the page cleaner on any SET GLOBAL innodb_max_dirty_pages_pct= assignment. buf_flush_page_cleaner(): If innodb_max_dirty_pages_pct is nonzero, consult only that parameter when determining whether there is work to do. Else, consult innodb_max_dirty_pages.
Diffstat (limited to 'storage/innobase')
-rw-r--r--storage/innobase/buf/buf0flu.cc8
-rw-r--r--storage/innobase/handler/ha_innodb.cc2
2 files changed, 6 insertions, 4 deletions
diff --git a/storage/innobase/buf/buf0flu.cc b/storage/innobase/buf/buf0flu.cc
index 21a01dbd2fe..0acf9334c2c 100644
--- a/storage/innobase/buf/buf0flu.cc
+++ b/storage/innobase/buf/buf0flu.cc
@@ -2136,11 +2136,13 @@ unemployed:
double(UT_LIST_GET_LEN(buf_pool.LRU) + UT_LIST_GET_LEN(buf_pool.free));
if (lsn_limit);
+ else if (srv_max_dirty_pages_pct_lwm != 0.0)
+ {
+ if (dirty_pct < srv_max_dirty_pages_pct_lwm)
+ goto unemployed;
+ }
else if (dirty_pct < srv_max_buf_pool_modified_pct)
goto unemployed;
- else if (srv_max_dirty_pages_pct_lwm == 0.0 ||
- dirty_pct < srv_max_dirty_pages_pct_lwm)
- goto unemployed;
const lsn_t oldest_lsn= buf_pool.get_oldest_modified()
->oldest_modification();
diff --git a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc
index d306311365d..d54987889fd 100644
--- a/storage/innobase/handler/ha_innodb.cc
+++ b/storage/innobase/handler/ha_innodb.cc
@@ -17206,10 +17206,10 @@ innodb_max_dirty_pages_pct_update(
in_val);
srv_max_dirty_pages_pct_lwm = in_val;
- pthread_cond_signal(&buf_pool.do_flush_list);
}
srv_max_buf_pool_modified_pct = in_val;
+ pthread_cond_signal(&buf_pool.do_flush_list);
}
/****************************************************************//**