1
0
mirror of https://github.com/MariaDB/server.git synced 2025-07-30 16:24:05 +03:00

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.
This commit is contained in:
Guilhem Bichot
2008-06-06 15:37:16 +02:00
parent 17a9470e08
commit 54b719a2c6
5 changed files with 156 additions and 1 deletions

View File

@ -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;

View File

@ -0,0 +1,55 @@
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;

View File

@ -1,3 +1,5 @@
* 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;

View File

@ -0,0 +1,81 @@
# 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

View File

@ -1,5 +1,18 @@
-- 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;