diff options
author | Daniel Black <daniel@mariadb.org> | 2022-11-22 08:37:27 +1100 |
---|---|---|
committer | Marko Mäkelä <marko.makela@mariadb.com> | 2022-11-28 11:25:47 +0200 |
commit | 183ca823bbddec81bbb2ec64bd314a50851e39c5 (patch) | |
tree | c03c544bc9f401aea21bb788cd73ad14e0e87bb2 /storage/innobase | |
parent | 812443c251e163b83252638a3229cc6d48e61a5f (diff) | |
download | mariadb-git-183ca823bbddec81bbb2ec64bd314a50851e39c5.tar.gz |
MDEV-25417: Remove innodb buffer pool load throttling
The very lightest of load would decimate any buffer pool loading
to ~1 page per second. As seen in MDEV-29343 this resulting in
a load taking over an hour on a high end system.
Since MDEV-26547 the fetching is asynchronous, however the loading
has equal access to the IO as the SQL queries.
Diffstat (limited to 'storage/innobase')
-rw-r--r-- | storage/innobase/buf/buf0dump.cc | 72 |
1 files changed, 0 insertions, 72 deletions
diff --git a/storage/innobase/buf/buf0dump.cc b/storage/innobase/buf/buf0dump.cc index aaf07dd17eb..269ef448c31 100644 --- a/storage/innobase/buf/buf0dump.cc +++ b/storage/innobase/buf/buf0dump.cc @@ -411,72 +411,6 @@ done: } /*****************************************************************//** -Artificially delay the buffer pool loading if necessary. The idea of -this function is to prevent hogging the server with IO and slowing down -too much normal client queries. */ -UNIV_INLINE -void -buf_load_throttle_if_needed( -/*========================*/ - ulint* last_check_time, /*!< in/out: milliseconds since epoch - of the last time we did check if - throttling is needed, we do the check - every srv_io_capacity IO ops. */ - ulint* last_activity_count, - ulint n_io) /*!< in: number of IO ops done since - buffer pool load has started */ -{ - if (n_io % srv_io_capacity < srv_io_capacity - 1) { - return; - } - - if (*last_check_time == 0 || *last_activity_count == 0) { - *last_check_time = ut_time_ms(); - *last_activity_count = srv_get_activity_count(); - return; - } - - /* srv_io_capacity IO operations have been performed by buffer pool - load since the last time we were here. */ - - /* If no other activity, then keep going without any delay. */ - if (srv_get_activity_count() == *last_activity_count) { - return; - } - - /* There has been other activity, throttle. */ - - ulint now = ut_time_ms(); - ulint elapsed_time = now - *last_check_time; - - /* Notice that elapsed_time is not the time for the last - srv_io_capacity IO operations performed by BP load. It is the - time elapsed since the last time we detected that there has been - other activity. This has a small and acceptable deficiency, e.g.: - 1. BP load runs and there is no other activity. - 2. Other activity occurs, we run N IO operations after that and - enter here (where 0 <= N < srv_io_capacity). - 3. last_check_time is very old and we do not sleep at this time, but - only update last_check_time and last_activity_count. - 4. We run srv_io_capacity more IO operations and call this function - again. - 5. There has been more other activity and thus we enter here. - 6. Now last_check_time is recent and we sleep if necessary to prevent - more than srv_io_capacity IO operations per second. - The deficiency is that we could have slept at 3., but for this we - would have to update last_check_time before the - "cur_activity_count == *last_activity_count" check and calling - ut_time_ms() that often may turn out to be too expensive. */ - - if (elapsed_time < 1000 /* 1 sec (1000 milli secs) */) { - os_thread_sleep((1000 - elapsed_time) * 1000 /* micro secs */); - } - - *last_check_time = ut_time_ms(); - *last_activity_count = srv_get_activity_count(); -} - -/*****************************************************************//** Perform a buffer pool load from the file specified by innodb_buffer_pool_filename. If any errors occur then the value of innodb_buffer_pool_load_status will be set accordingly, see buf_load_status(). @@ -622,9 +556,6 @@ buf_load() std::sort(dump, dump + dump_n); } - ulint last_check_time = 0; - ulint last_activity_cnt = 0; - /* Avoid calling the expensive fil_space_t::get() for each page within the same tablespace. dump[] is sorted by (space, page), so all pages from a given tablespace are consecutive. */ @@ -699,9 +630,6 @@ buf_load() return; } - buf_load_throttle_if_needed( - &last_check_time, &last_activity_cnt, i); - #ifdef UNIV_DEBUG if ((i+1) >= srv_buf_pool_load_pages_abort) { buf_load_abort_flag = true; |