diff options
author | Thirunarayanan Balathandayuthapani <thiru@mariadb.com> | 2018-02-23 15:05:45 +0530 |
---|---|---|
committer | Thirunarayanan Balathandayuthapani <thiru@mariadb.com> | 2018-02-23 15:05:45 +0530 |
commit | e05a4e383e9d88e24ddd9f7ea964ebf42dbfd19d (patch) | |
tree | b674eb705ab89914b65a51f326e10a23b16aff1c | |
parent | 24deb3737f60c8aea1781c4dd244322f0066b197 (diff) | |
download | mariadb-git-e05a4e383e9d88e24ddd9f7ea964ebf42dbfd19d.tar.gz |
MDEV-15053 Split buf_pool_t::mutex - followup fix
Added the contributed test case from the below
percona's patch.
committer: Laurynas Biveinis <laurynas.biveinis@percona.com>
branch nick: mysql-5.7-percona-patches
timestamp: Tue 2015-02-03 12:42:11 +0200
message:
Fix http://bugs.mysql.com/bug.php?id=75534 (Solve buffer pool mutex
contention by splitting it).
7 files changed, 124 insertions, 0 deletions
diff --git a/mysql-test/include/have_multiple_buffer_pools.inc b/mysql-test/include/have_multiple_buffer_pools.inc new file mode 100644 index 00000000000..00f3b727611 --- /dev/null +++ b/mysql-test/include/have_multiple_buffer_pools.inc @@ -0,0 +1,4 @@ +if (`select count(*) = 0 from information_schema.global_variables where lower(variable_name) = 'innodb_buffer_pool_instances' and variable_value >= 2`) +{ + --skip Test requires InnoDB with at least two buffer pool instances +} diff --git a/mysql-test/suite/innodb/r/innodb_buffer_pool_debug.result b/mysql-test/suite/innodb/r/innodb_buffer_pool_debug.result new file mode 100644 index 00000000000..ba042324a33 --- /dev/null +++ b/mysql-test/suite/innodb/r/innodb_buffer_pool_debug.result @@ -0,0 +1,5 @@ +SET @old_innodb_buffer_pool_evict = @@innodb_buffer_pool_evict; +CREATE TABLE t1 (id INT PRIMARY KEY) ENGINE = InnoDB ROW_FORMAT = COMPRESSED; +SET GLOBAL innodb_buffer_pool_evict = 'uncompressed'; +DROP TABLE t1; +SET GLOBAL innodb_buffer_pool_evict = @old_innodb_buffer_pool_evict; diff --git a/mysql-test/suite/innodb/t/innodb_buffer_pool_debug.test b/mysql-test/suite/innodb/t/innodb_buffer_pool_debug.test new file mode 100644 index 00000000000..18f38a96db1 --- /dev/null +++ b/mysql-test/suite/innodb/t/innodb_buffer_pool_debug.test @@ -0,0 +1,10 @@ +--source include/have_innodb.inc +--source include/have_debug.inc + +SET @old_innodb_buffer_pool_evict = @@innodb_buffer_pool_evict; + +CREATE TABLE t1 (id INT PRIMARY KEY) ENGINE = InnoDB ROW_FORMAT = COMPRESSED; +SET GLOBAL innodb_buffer_pool_evict = 'uncompressed'; + +DROP TABLE t1; +SET GLOBAL innodb_buffer_pool_evict = @old_innodb_buffer_pool_evict; diff --git a/mysql-test/suite/innodb/t/innodb_buffer_pool_resize_multiple_pools.opt b/mysql-test/suite/innodb/t/innodb_buffer_pool_resize_multiple_pools.opt new file mode 100644 index 00000000000..18b4ef0cbca --- /dev/null +++ b/mysql-test/suite/innodb/t/innodb_buffer_pool_resize_multiple_pools.opt @@ -0,0 +1 @@ +--innodb_buffer_pool_size=1G --innodb_buffer_pool_instances=2 diff --git a/mysql-test/suite/innodb/t/innodb_buffer_pool_resize_multiple_pools.test b/mysql-test/suite/innodb/t/innodb_buffer_pool_resize_multiple_pools.test new file mode 100644 index 00000000000..8a154f78831 --- /dev/null +++ b/mysql-test/suite/innodb/t/innodb_buffer_pool_resize_multiple_pools.test @@ -0,0 +1,37 @@ +# Test InnoDB online buffer pool resize with multiple buffer pool instances + +--source include/have_innodb.inc +--source include/have_debug.inc + +# Marked as a big test because of a 1.25GB buffer pool +--source include/big_test.inc +--source include/have_multiple_buffer_pools.inc + +let $wait_timeout = 180; +let $wait_condition = + SELECT SUBSTR(variable_value, 1, 34) = 'Completed resizing buffer pool at ' + FROM information_schema.global_status + WHERE LOWER(variable_name) = 'innodb_buffer_pool_resize_status'; + +--disable_query_log +set @old_innodb_buffer_pool_size = @@innodb_buffer_pool_size; +if (`select (version() like '%debug%') > 0`) +{ + set @old_innodb_disable_resize = @@innodb_disable_resize_buffer_pool_debug; + set global innodb_disable_resize_buffer_pool_debug = OFF; +} +--enable_query_log + +set @old_innodb_buffer_pool_size = @@innodb_buffer_pool_size; + +SET @@GLOBAL.innodb_buffer_pool_size = 1342177280; +--source include/wait_condition.inc + +--disable_query_log +set global innodb_buffer_pool_size = @old_innodb_buffer_pool_size; +if (`select (version() like '%debug%') > 0`) +{ + set global innodb_disable_resize_buffer_pool_debug = @old_innodb_disable_resize; +} +--enable_query_log +--source include/wait_condition.inc diff --git a/mysql-test/suite/innodb_zip/r/innodb-buffer-pool.result b/mysql-test/suite/innodb_zip/r/innodb-buffer-pool.result new file mode 100644 index 00000000000..13d39ef1738 --- /dev/null +++ b/mysql-test/suite/innodb_zip/r/innodb-buffer-pool.result @@ -0,0 +1,29 @@ +SET @old_innodb_file_per_table=@@innodb_file_per_table; +SET GLOBAL innodb_file_per_table=ON; +CREATE TABLE `test1` ( +`a` int primary key auto_increment, +`b` int default 0, +`c` char(100) default 'testtest' +) ENGINE=InnoDB ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=8; +CREATE PROCEDURE insert_many(p1 int) +BEGIN +SET @x = 0; +SET @y = 0; +start transaction; +REPEAT +insert into test1 set b=1; +SET @x = @x + 1; +SET @y = @y + 1; +IF @y >= 1000 THEN +commit; +start transaction; +SET @y = 0; +END IF; +UNTIL @x >= p1 END REPEAT; +commit; +END| +call insert_many(100000); +DROP PROCEDURE insert_many; +ALTER TABLE test1 ENGINE=MyISAM; +DROP TABLE test1; +SET GLOBAL innodb_file_per_table=@old_innodb_file_per_table; diff --git a/mysql-test/suite/innodb_zip/t/innodb-buffer-pool.test b/mysql-test/suite/innodb_zip/t/innodb-buffer-pool.test new file mode 100644 index 00000000000..6cb9246d81d --- /dev/null +++ b/mysql-test/suite/innodb_zip/t/innodb-buffer-pool.test @@ -0,0 +1,38 @@ +# Compression-related InnoDB buffer pool tests +--source include/have_innodb.inc + +SET @old_innodb_file_per_table=@@innodb_file_per_table; +SET GLOBAL innodb_file_per_table=ON; + +CREATE TABLE `test1` ( + `a` int primary key auto_increment, + `b` int default 0, + `c` char(100) default 'testtest' +) ENGINE=InnoDB ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=8; + +delimiter |; +CREATE PROCEDURE insert_many(p1 int) +BEGIN +SET @x = 0; +SET @y = 0; +start transaction; +REPEAT + insert into test1 set b=1; + SET @x = @x + 1; + SET @y = @y + 1; + IF @y >= 1000 THEN + commit; + start transaction; + SET @y = 0; + END IF; +UNTIL @x >= p1 END REPEAT; +commit; +END| +delimiter ;| +call insert_many(100000); +DROP PROCEDURE insert_many; + +ALTER TABLE test1 ENGINE=MyISAM; + +DROP TABLE test1; +SET GLOBAL innodb_file_per_table=@old_innodb_file_per_table; |