--source include/have_innodb.inc # With 32k, truncation could happen on shutdown after the test, # and the mtr.add_suppression() would not filter out the warning. # With 64k, no truncation seems to happen. # --source include/innodb_page_size.inc --source include/innodb_page_size_small.inc --source include/have_undo_tablespaces.inc --source include/have_sequence.inc call mtr.add_suppression("InnoDB: The transaction log size is too large"); SET @save_undo_logs = @@GLOBAL.innodb_undo_logs; SET @save_frequency = @@GLOBAL.innodb_purge_rseg_truncate_frequency; SET @save_truncate = @@GLOBAL.innodb_undo_log_truncate; SET GLOBAL innodb_undo_log_truncate = 0; SET GLOBAL innodb_undo_logs = 4; SET GLOBAL innodb_purge_rseg_truncate_frequency = 1; SET @trunc_start= (SELECT variable_value FROM information_schema.global_status WHERE variable_name = 'innodb_undo_truncations'); #----------------------------------------------------------------------------- # # Perform DML action using multiple clients and multiple undo tablespace. # # create table t1(keyc int primary key, c char(100)) engine = innodb; create table t2(keyc int primary key, c char(100)) engine = innodb; # let DATADIR = `select @@datadir`; connect (con1,localhost,root,,); begin; send insert into t1 select seq,'a' from seq_1_to_20000; connect (con2,localhost,root,,); begin; send insert into t2 select seq,'a' from seq_1_to_20000; connection con1; reap; send update t1 set c = 'mysql'; connection con2; reap; send update t2 set c = 'mysql'; connection con1; reap; send update t1 set c = 'oracle'; connection con2; reap; send update t2 set c = 'oracle'; connection con1; reap; send delete from t1; connection con2; reap; delete from t2; connection con1; reap; SET GLOBAL innodb_undo_log_truncate = 1; commit; disconnect con1; connection con2; commit; disconnect con2; connection default; drop table t1, t2; --source include/wait_all_purged.inc # Truncation will normally not occur with innodb_page_size=64k, # and occasionally not with innodb_page_size=32k, # because the undo log will not grow enough. if (`select @@innodb_page_size IN (4096,8192,16384)`) { let $wait_condition = (SELECT variable_value!=@trunc_start FROM information_schema.global_status WHERE variable_name = 'innodb_undo_truncations'); source include/wait_condition.inc; } SET GLOBAL innodb_undo_logs = @save_undo_logs; SET GLOBAL innodb_purge_rseg_truncate_frequency = @save_frequency; SET GLOBAL innodb_undo_log_truncate = @save_truncate;