Commit 54b719a2 authored by Guilhem Bichot's avatar Guilhem Bichot

Verify that if Maria table is absent or initially empty, CREATE SELECT and...

Verify that if Maria table is absent or initially empty, CREATE SELECT and INSERT SELECT with enough
rows cause no logging

mysql-test/include/maria_empty_logs.inc:
  don't assume that mysqltest is the default db
mysql-test/r/maria-no-logging.result:
  result. Without the optimization of disabling logging in ha_maria::start_bulk_insert(),
  we see 24k instead of 16k, in the cases where the table is empty.
mysql-test/r/maria-purge.result:
  side effect of change to maria_empty_logs.inc
mysql-test/t/maria-purge.test:
  maria-purge.test used to fail when run in a group like this "--big t/*maria*.test" because
  SHOW ENGINE MARIA LOGS was influenced by previous tests; deleting logs to fix that.
parent 17a9470e
......@@ -4,6 +4,9 @@
# API: set mel_keep_control_file=1 if want to keep control file;
# uses vardir, port and socket.
connection default;
let $default_db=`select database()`;
connection admin;
-- echo * shut down mysqld, removed logs, restarted it
......@@ -71,4 +74,4 @@ EOF
connection default;
# the effect of "use" is lost after a restart so we are back into db "test",
# because connection 'default' was created with db "test".
use mysqltest;
eval use $default_db;
set global maria_log_file_size=4294967295;
drop database if exists mysqltest;
create database mysqltest;
use mysqltest;
set global maria_checkpoint_interval=0;
create table t2 (a varchar(100)) engine=myisam;
insert into t2 select repeat('z',100);
insert into t2 select * from t2;
insert into t2 select * from t2;
insert into t2 select * from t2;
insert into t2 select * from t2;
insert into t2 select * from t2;
insert into t2 select * from t2;
* shut down mysqld, removed logs, restarted it
use mysqltest;
create table t1 (a varchar(100)) engine=maria transactional=1;
show create table t1;
Table Create Table
t1 CREATE TABLE `t1` (
`a` varchar(100) DEFAULT NULL
) ENGINE=MARIA DEFAULT CHARSET=latin1 PAGE_CHECKSUM=1 TRANSACTIONAL=1
show engine maria logs;
Type Name Status
MARIA Size 16384 maria_log.00000001 unknown
insert into t1 values('a');
insert into t1 select * from t2;
show engine maria logs;
Type Name Status
MARIA Size 24576 maria_log.00000001 unknown
* shut down mysqld, removed logs, restarted it
use mysqltest;
truncate table t1;
insert into t1 select * from t2;
show engine maria logs;
Type Name Status
MARIA Size 16384 maria_log.00000001 unknown
drop table t1;
* shut down mysqld, removed logs, restarted it
use mysqltest;
create table t1 (a varchar(100)) engine=maria transactional=1;
insert into t1 values('a');
create table if not exists t1 select * from t2;
Warnings:
Note 1050 Table 't1' already exists
show engine maria logs;
Type Name Status
MARIA Size 24576 maria_log.00000001 unknown
* shut down mysqld, removed logs, restarted it
use mysqltest;
drop table t1;
create table t1 engine=maria transactional=1 select * from t2;
show engine maria logs;
Type Name Status
MARIA Size 16384 maria_log.00000001 unknown
drop database mysqltest;
* shut down mysqld, removed logs, restarted it
use test;
set global storage_engine=maria;
set session storage_engine=maria;
set global maria_log_file_size=4294967295;
......
# test of cases where we can safely disable logging
--source include/have_maria.inc
set global maria_log_file_size=4294967295;
--disable_warnings
drop database if exists mysqltest;
--enable_warnings
create database mysqltest;
connect (admin, 127.0.0.1, root,,mysqltest,,);
--enable_reconnect
connection default;
use mysqltest;
--enable_reconnect
# checkpoints can make log unrepeatable
let $def_checkinterval=`select @@global.maria_checkpoint_interval`;
set global maria_checkpoint_interval=0;
# Prepare table to help for big load
create table t2 (a varchar(100)) engine=myisam;
insert into t2 select repeat('z',100);
insert into t2 select * from t2;
insert into t2 select * from t2;
insert into t2 select * from t2;
insert into t2 select * from t2;
insert into t2 select * from t2;
insert into t2 select * from t2;
# INSERT SELECT
# no optimization because table not empty
# SHOW ENGINE MARIA LOGS could be influenced by older logs
-- source include/maria_empty_logs.inc
create table t1 (a varchar(100)) engine=maria transactional=1;
show create table t1;
--replace_regex /; .+maria_log/maria_log/
show engine maria logs;
insert into t1 values('a');
insert into t1 select * from t2;
--replace_regex /; .+maria_log/maria_log/
show engine maria logs;
# optimization because table is empty
-- source include/maria_empty_logs.inc
truncate table t1;
insert into t1 select * from t2;
--replace_regex /; .+maria_log/maria_log/
show engine maria logs;
drop table t1;
# same for CREATE SELECT
# no optimization because table not empty
-- source include/maria_empty_logs.inc
create table t1 (a varchar(100)) engine=maria transactional=1;
insert into t1 values('a');
create table if not exists t1 select * from t2;
--replace_regex /; .+maria_log/maria_log/
show engine maria logs;
# optimization because table is empty
-- source include/maria_empty_logs.inc
drop table t1;
create table t1 engine=maria transactional=1 select * from t2;
--replace_regex /; .+maria_log/maria_log/
show engine maria logs;
drop database mysqltest;
--disable_result_log
--disable_query_log
eval set global maria_checkpoint_interval=$def_checkinterval;
--enable_result_log
--enable_query_log
-- source include/have_maria.inc
-- source include/big_test.inc
# pre-requisites for maria_empty_logs
connect (admin, 127.0.0.1, root,,test,,);
--enable_reconnect
connection default;
--enable_reconnect
# end of pre-requisites
# SHOW ENGINE MARIA LOGS could be influenced by older logs
# Also, possibly automatic checkpoints (see if that happens in
# practice)
-- source include/maria_empty_logs.inc
let $default=`select @@global.storage_engine`;
set global storage_engine=maria;
set session storage_engine=maria;
......@@ -47,6 +60,7 @@ insert into t2 select * from t1;
insert into t1 select * from t2;
set global maria_log_file_size=16777216;
# force a checkpoint to allow log purge
eval set global maria_checkpoint_interval=$def_checkinterval;
--replace_regex /Size +[0-9]+ ; .+master-data/master-data/
SHOW ENGINE maria logs;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment