91 lines
2.5 KiB
Plaintext
91 lines
2.5 KiB
Plaintext
#
|
|
# WL#6965: Truncate UNDO logs.
|
|
#
|
|
|
|
--source include/have_innodb_max_16k.inc
|
|
--source include/have_undo_tablespaces.inc
|
|
|
|
# The test is restarting the server to force undo truncation.
|
|
--source include/not_embedded.inc
|
|
--source include/big_test.inc
|
|
|
|
|
|
--let $restart_parameters="restart: --innodb_undo_tablespaces=2 --innodb_rollback_segments=35"
|
|
--source include/restart_mysqld.inc
|
|
|
|
################################################################################
|
|
# Test-case will test following scenarios.
|
|
#
|
|
# 1. Perform enough DML action so that undo tablespace size grows beyond
|
|
# set threshold and then wait and see if it is being truncated.
|
|
#
|
|
################################################################################
|
|
|
|
#-----------------------------------------------------------------------------
|
|
#
|
|
# create test-bed
|
|
#
|
|
let MYSQLD_DATADIR = `select @@datadir`;
|
|
|
|
#-----------------------------------------------------------------------------
|
|
#
|
|
# 1. Perform enough DML action so that undo tablespace size grows beyond
|
|
# set threshold and then wait and see if it is being truncated.
|
|
#
|
|
create table t1
|
|
(keyc int, c1 char(100), c2 char(100),
|
|
primary key(keyc)) engine = innodb;
|
|
delimiter |;
|
|
CREATE PROCEDURE populate_t1()
|
|
BEGIN
|
|
DECLARE i INT DEFAULT 1;
|
|
while (i <= 40000) DO
|
|
insert into t1 values (i, 'a', 'b');
|
|
SET i = i + 1;
|
|
END WHILE;
|
|
END |
|
|
delimiter ;|
|
|
begin;
|
|
call populate_t1();
|
|
delete from t1 where keyc < 20000;
|
|
update t1 set c1 = 'mysql' where keyc > 20000;
|
|
update t1 set c2 = 'oracle' where keyc > 20000;
|
|
#
|
|
commit;
|
|
drop table t1;
|
|
drop PROCEDURE populate_t1;
|
|
|
|
let CHECKFILE = $MYSQLTEST_VARDIR/log/check.txt;
|
|
|
|
perl;
|
|
($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size1)
|
|
= stat("$ENV{MYSQLD_DATADIR}/undo001");
|
|
($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size2)
|
|
= stat("$ENV{MYSQLD_DATADIR}/undo002");
|
|
open(OUT, ">$ENV{CHECKFILE}") || die;
|
|
print OUT "let \$size1='$size1,$size2';\n";
|
|
close(OUT);
|
|
EOF
|
|
SET GLOBAL innodb_fast_shutdown=0;
|
|
--source include/shutdown_mysqld.inc
|
|
--source $CHECKFILE
|
|
perl;
|
|
($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size1)
|
|
= stat("$ENV{MYSQLD_DATADIR}/undo001");
|
|
($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size2)
|
|
= stat("$ENV{MYSQLD_DATADIR}/undo002");
|
|
open(OUT, ">$ENV{CHECKFILE}") || die;
|
|
print OUT "let \$size2='$size1,$size2';\n";
|
|
close(OUT);
|
|
EOF
|
|
|
|
--source $CHECKFILE
|
|
|
|
if ($size1 == $size2)
|
|
{
|
|
echo Truncation did not happen: $size1 == $size2;
|
|
}
|
|
|
|
--let $restart_parameters=
|
|
--source include/start_mysqld.inc
|