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;
|
# API: set mel_keep_control_file=1 if want to keep control file;
|
||||||
# uses vardir, port and socket.
|
# uses vardir, port and socket.
|
||||||
|
|
||||||
|
connection default;
|
||||||
|
let $default_db=`select database()`;
|
||||||
|
|
||||||
connection admin;
|
connection admin;
|
||||||
|
|
||||||
-- echo * shut down mysqld, removed logs, restarted it
|
-- echo * shut down mysqld, removed logs, restarted it
|
||||||
@ -71,4 +74,4 @@ EOF
|
|||||||
connection default;
|
connection default;
|
||||||
# the effect of "use" is lost after a restart so we are back into db "test",
|
# the effect of "use" is lost after a restart so we are back into db "test",
|
||||||
# because connection 'default' was created with 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 global storage_engine=maria;
|
||||||
set session storage_engine=maria;
|
set session storage_engine=maria;
|
||||||
set global maria_log_file_size=4294967295;
|
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/have_maria.inc
|
||||||
-- source include/big_test.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`;
|
let $default=`select @@global.storage_engine`;
|
||||||
set global storage_engine=maria;
|
set global storage_engine=maria;
|
||||||
set session storage_engine=maria;
|
set session storage_engine=maria;
|
||||||
@ -47,6 +60,7 @@ insert into t2 select * from t1;
|
|||||||
insert into t1 select * from t2;
|
insert into t1 select * from t2;
|
||||||
|
|
||||||
set global maria_log_file_size=16777216;
|
set global maria_log_file_size=16777216;
|
||||||
|
# force a checkpoint to allow log purge
|
||||||
eval set global maria_checkpoint_interval=$def_checkinterval;
|
eval set global maria_checkpoint_interval=$def_checkinterval;
|
||||||
--replace_regex /Size +[0-9]+ ; .+master-data/master-data/
|
--replace_regex /Size +[0-9]+ ; .+master-data/master-data/
|
||||||
SHOW ENGINE maria logs;
|
SHOW ENGINE maria logs;
|
||||||
|
Reference in New Issue
Block a user