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:
@ -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;
|
||||
|
55
mysql-test/r/maria-no-logging.result
Normal file
55
mysql-test/r/maria-no-logging.result
Normal 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;
|
@ -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;
|
||||
|
81
mysql-test/t/maria-no-logging.test
Normal file
81
mysql-test/t/maria-no-logging.test
Normal 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
|
@ -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;
|
||||
|
Reference in New Issue
Block a user