mirror of
https://github.com/MariaDB/server.git
synced 2025-08-01 03:47:19 +03:00
MDEV-11025: Make number of page cleaner threads variable dynamic
New test cases innodb-page-cleaners Modified test cases innodb_page_cleaners_basic New function buf_flush_set_page_cleaner_thread_cnt Increase or decrease the amount of page cleaner worker threads. In case of increase this function creates based on current abount and requested amount how many new threads should be created. In case of decrease this function sets up the requested amount of threads and uses is_requested event to signal workers. Then we wait until all new treads are started, old threads that should exit signal is_finished or shutdown has marked that page cleaner should finish. buf_flush_page_cleaner_worker Store current thread id and thread_no and then signal event is_finished. If number of used page cleaner threads decrease we shut down those threads that have thread_no greater or equal than number of page configured page cleaners - 1 (note that there will be always page cleaner coordinator). Before exiting we signal is_finished. New function innodb_page_cleaners_threads_update Update function for innodb-page-cleaners system variable. innobase_start_or_create_for_mysql If more than one page cleaner threads is configured we use new function buf_flush_set_page_cleaner_thread_cnt to set up the requested threads (-1 coordinator).
This commit is contained in:
@ -2,13 +2,42 @@ SELECT COUNT(@@GLOBAL.innodb_page_cleaners);
|
||||
COUNT(@@GLOBAL.innodb_page_cleaners)
|
||||
1
|
||||
1 Expected
|
||||
SELECT COUNT(@@innodb_page_cleaners);
|
||||
COUNT(@@innodb_page_cleaners)
|
||||
SELECT @@innodb_page_cleaners;
|
||||
@@innodb_page_cleaners
|
||||
1
|
||||
1 Expected
|
||||
SET @@GLOBAL.innodb_page_cleaners=2;
|
||||
Expected to pass
|
||||
SELECT @@innodb_page_cleaners;
|
||||
@@innodb_page_cleaners
|
||||
2
|
||||
2 Expected
|
||||
SET @@GLOBAL.innodb_page_cleaners=1;
|
||||
ERROR HY000: Variable 'innodb_page_cleaners' is a read only variable
|
||||
Expected error 'Read-only variable'
|
||||
Expected to pass
|
||||
SELECT @@innodb_page_cleaners;
|
||||
@@innodb_page_cleaners
|
||||
1
|
||||
1 Expected
|
||||
SET @@GLOBAL.innodb_page_cleaners=6;
|
||||
Expected to pass
|
||||
SELECT @@innodb_page_cleaners;
|
||||
@@innodb_page_cleaners
|
||||
6
|
||||
6 Expected
|
||||
SET @@GLOBAL.innodb_page_cleaners=4;
|
||||
Expected to pass
|
||||
SELECT @@innodb_page_cleaners;
|
||||
@@innodb_page_cleaners
|
||||
4
|
||||
4 Expected
|
||||
SET @@GLOBAL.innodb_page_cleaners=0;
|
||||
Warnings:
|
||||
Warning 1292 Truncated incorrect innodb_page_cleaners value: '0'
|
||||
Warning expected
|
||||
SELECT @@innodb_page_cleaners;
|
||||
@@innodb_page_cleaners
|
||||
1
|
||||
1 Expected
|
||||
SELECT innodb_page_cleaners = @@SESSION.innodb_page_cleaners;
|
||||
ERROR 42S22: Unknown column 'innodb_page_cleaners' in 'field list'
|
||||
Expected error 'Read-only variable'
|
||||
|
Reference in New Issue
Block a user