Browse Source

MDEV-35813: more robust test case

Let us integrate the test case with innodb.page_cleaner so that there
will be less interference from log writes due to checkpoints.
Also, make the test compatible with ./mtr --cursor-protocol.
bb-10.6-MDEV-25099
Marko Mäkelä 7 months ago
parent
commit
1756b0f37d
  1. 11
      mysql-test/suite/innodb/r/log_write.result
  2. 25
      mysql-test/suite/innodb/r/page_cleaner.result
  3. 12
      mysql-test/suite/innodb/t/log_write.test
  4. 28
      mysql-test/suite/innodb/t/page_cleaner.test

11
mysql-test/suite/innodb/r/log_write.result

@ -1,11 +0,0 @@
# MDEV-35813 Unnecessary InnoDB log writes in INSERT…SELECT
CREATE TABLE t1 (a INT PRIMARY KEY) ENGINE=InnoDB STATS_PERSISTENT=0;
SET GLOBAL innodb_max_purge_lag_wait=0;
SELECT variable_value INTO @log_writes FROM information_schema.global_status
WHERE variable_name='innodb_log_writes';
INSERT INTO t1 SELECT * FROM t1;
SELECT variable_value-@log_writes FROM information_schema.global_status
WHERE variable_name='innodb_log_writes';
variable_value-@log_writes
0
DROP TABLE t1;

25
mysql-test/suite/innodb/r/page_cleaner.result

@ -2,8 +2,31 @@ SET @save_pct= @@GLOBAL.innodb_max_dirty_pages_pct;
SET @save_pct_lwm= @@GLOBAL.innodb_max_dirty_pages_pct_lwm;
SET GLOBAL innodb_max_dirty_pages_pct_lwm=0.0;
SET GLOBAL innodb_max_dirty_pages_pct=0.0;
CREATE TABLE t(a INT PRIMARY KEY) ENGINE=InnoDB STATS_PERSISTENT=0;
connect prevent_purge,localhost,root;
START TRANSACTION WITH CONSISTENT SNAPSHOT;
connection default;
SET GLOBAL innodb_max_purge_lag_wait=0;
SET GLOBAL innodb_max_dirty_pages_pct=90.0;
CREATE TABLE t ENGINE=InnoDB SELECT * FROM seq_1_to_10000;
SELECT variable_value INTO @log_writes FROM information_schema.global_status
WHERE variable_name='innodb_log_writes';
BEGIN;
INSERT INTO t SELECT * FROM seq_1_to_500;
INSERT INTO t SELECT * FROM seq_501_to_1000;
INSERT INTO t SELECT * FROM seq_1001_to_1500;
INSERT INTO t SELECT * FROM seq_1501_to_2000;
INSERT INTO t SELECT * FROM seq_2001_to_2500;
INSERT INTO t SELECT * FROM seq_2501_to_3000;
INSERT INTO t SELECT * FROM seq_3001_to_3500;
INSERT INTO t SELECT * FROM seq_3501_to_4000;
INSERT INTO t SELECT * FROM seq_4001_to_4500;
INSERT INTO t SELECT * FROM seq_4501_to_5000;
ROLLBACK;
SELECT if(variable_value-@log_writes<10,'ok',variable_value-@log_writes)
FROM information_schema.global_status WHERE variable_name='innodb_log_writes';
if(variable_value-@log_writes<10,'ok',variable_value-@log_writes)
ok
disconnect prevent_purge;
SELECT variable_value>0 FROM information_schema.global_status
WHERE variable_name = 'INNODB_BUFFER_POOL_PAGES_DIRTY';
variable_value>0

12
mysql-test/suite/innodb/t/log_write.test

@ -1,12 +0,0 @@
--source include/have_innodb.inc
--echo # MDEV-35813 Unnecessary InnoDB log writes in INSERT…SELECT
CREATE TABLE t1 (a INT PRIMARY KEY) ENGINE=InnoDB STATS_PERSISTENT=0;
SET GLOBAL innodb_max_purge_lag_wait=0;
SELECT variable_value INTO @log_writes FROM information_schema.global_status
WHERE variable_name='innodb_log_writes';
INSERT INTO t1 SELECT * FROM t1;
SELECT variable_value-@log_writes FROM information_schema.global_status
WHERE variable_name='innodb_log_writes';
DROP TABLE t1;

28
mysql-test/suite/innodb/t/page_cleaner.test

@ -7,6 +7,12 @@ SET @save_pct_lwm= @@GLOBAL.innodb_max_dirty_pages_pct_lwm;
SET GLOBAL innodb_max_dirty_pages_pct_lwm=0.0;
SET GLOBAL innodb_max_dirty_pages_pct=0.0;
CREATE TABLE t(a INT PRIMARY KEY) ENGINE=InnoDB STATS_PERSISTENT=0;
--connect (prevent_purge,localhost,root)
START TRANSACTION WITH CONSISTENT SNAPSHOT;
--connection default
SET GLOBAL innodb_max_purge_lag_wait=0;
let $wait_condition =
SELECT variable_value = 0
FROM information_schema.global_status
@ -15,7 +21,27 @@ WHERE variable_name = 'INNODB_BUFFER_POOL_PAGES_DIRTY';
SET GLOBAL innodb_max_dirty_pages_pct=90.0;
CREATE TABLE t ENGINE=InnoDB SELECT * FROM seq_1_to_10000;
--disable_cursor_protocol
SELECT variable_value INTO @log_writes FROM information_schema.global_status
WHERE variable_name='innodb_log_writes';
--enable_cursor_protocol
BEGIN;
INSERT INTO t SELECT * FROM seq_1_to_500;
INSERT INTO t SELECT * FROM seq_501_to_1000;
INSERT INTO t SELECT * FROM seq_1001_to_1500;
INSERT INTO t SELECT * FROM seq_1501_to_2000;
INSERT INTO t SELECT * FROM seq_2001_to_2500;
INSERT INTO t SELECT * FROM seq_2501_to_3000;
INSERT INTO t SELECT * FROM seq_3001_to_3500;
INSERT INTO t SELECT * FROM seq_3501_to_4000;
INSERT INTO t SELECT * FROM seq_4001_to_4500;
INSERT INTO t SELECT * FROM seq_4501_to_5000;
ROLLBACK;
SELECT if(variable_value-@log_writes<10,'ok',variable_value-@log_writes)
FROM information_schema.global_status WHERE variable_name='innodb_log_writes';
--disconnect prevent_purge
SELECT variable_value>0 FROM information_schema.global_status
WHERE variable_name = 'INNODB_BUFFER_POOL_PAGES_DIRTY';

Loading…
Cancel
Save