mirror of
https://github.com/MariaDB/server.git
synced 2025-01-31 11:01:52 +01:00
03a8eaa072
galera.galera_kill_applier: Make the test less likely to fail by adding sleep time. galera.query_cache: Remove data truncation. Part of the test file looks like it has been misinterpreted as latin1 and wrongly converted to UTF-8 encoding. In MariaDB 10.1, the server would only warn about data truncation and not issue an error. 10.2 is stricter. (The test should be carefully reviewed if it really makes sense.)
1002 lines
26 KiB
Text
1002 lines
26 KiB
Text
--source include/galera_cluster.inc
|
|
--source include/have_innodb.inc
|
|
--source include/have_query_cache.inc
|
|
|
|
--echo
|
|
--echo # Execute FLUSH/RESET commands.
|
|
--echo # On node-1
|
|
--connection node_1
|
|
SET @query_cache_size_saved=@@GLOBAL.query_cache_size;
|
|
SET @query_cache_type_saved=@@GLOBAL.query_cache_type;
|
|
set GLOBAL query_cache_size=1355776;
|
|
flush query cache; # This crashed in some versions
|
|
reset query cache;
|
|
flush status;
|
|
|
|
--echo # On node-2
|
|
--connection node_2
|
|
SET @query_cache_size_saved=@@GLOBAL.query_cache_size;
|
|
SET @query_cache_type_saved=@@GLOBAL.query_cache_type;
|
|
set GLOBAL query_cache_size=1355776;
|
|
flush query cache; # This crashed in some versions
|
|
reset query cache;
|
|
flush status;
|
|
|
|
#
|
|
# INSERT/UPDATE/DELETE/DROP/SELECT
|
|
#
|
|
|
|
--echo # On node-1
|
|
--connection node_1
|
|
create table t1 (a int not null) engine=innodb;
|
|
insert into t1 values (1),(2),(3);
|
|
select * from t1;
|
|
select * from t1;
|
|
select sql_no_cache * from t1;
|
|
select length(now()) from t1;
|
|
|
|
show status like "Qcache_queries_in_cache";
|
|
show status like "Qcache_inserts";
|
|
show status like "Qcache_hits";
|
|
|
|
--echo # On node-2
|
|
--connection node_2
|
|
|
|
select * from t1;
|
|
select * from t1;
|
|
select sql_no_cache * from t1;
|
|
select length(now()) from t1;
|
|
|
|
show status like "Qcache_queries_in_cache";
|
|
show status like "Qcache_inserts";
|
|
show status like "Qcache_hits";
|
|
|
|
# DELETE should invalidate cache on both the nodes.
|
|
--echo # On node-1
|
|
--connection node_1
|
|
delete from t1 where a=1;
|
|
show status like "Qcache_queries_in_cache";
|
|
show status like "Qcache_hits";
|
|
|
|
--echo # On node-2
|
|
--connection node_2
|
|
show status like "Qcache_queries_in_cache";
|
|
show status like "Qcache_hits";
|
|
|
|
# Add a SELECT to the cache.
|
|
--echo # On node-1
|
|
--connection node_1
|
|
select * from t1;
|
|
show status like "Qcache_queries_in_cache";
|
|
show status like "Qcache_hits";
|
|
|
|
--echo # On node-2
|
|
--connection node_2
|
|
select * from t1;
|
|
show status like "Qcache_queries_in_cache";
|
|
show status like "Qcache_hits";
|
|
|
|
# UPDATE should invalidate cache on both the nodes.
|
|
--echo # On node-1
|
|
--connection node_1
|
|
update t1 set a=1 where a=3;
|
|
show status like "Qcache_queries_in_cache";
|
|
show status like "Qcache_hits";
|
|
|
|
--echo # On node-2
|
|
--connection node_2
|
|
show status like "Qcache_queries_in_cache";
|
|
show status like "Qcache_hits";
|
|
|
|
# Add a SELECT to the cache.
|
|
--echo # On node-1
|
|
--connection node_1
|
|
select * from t1;
|
|
show status like "Qcache_queries_in_cache";
|
|
show status like "Qcache_hits";
|
|
|
|
--echo # On node-2
|
|
--connection node_2
|
|
select * from t1;
|
|
show status like "Qcache_queries_in_cache";
|
|
show status like "Qcache_hits";
|
|
|
|
# DROP should invalidate cache on both the nodes.
|
|
--echo # On node-1
|
|
--connection node_1
|
|
drop table t1;
|
|
show status like "Qcache_queries_in_cache";
|
|
show status like "Qcache_hits";
|
|
|
|
--echo # On node-2
|
|
--connection node_2
|
|
show status like "Qcache_queries_in_cache";
|
|
show status like "Qcache_hits";
|
|
|
|
#
|
|
# MERGE TABLES with INSERT/UPDATE and DELETE
|
|
#
|
|
--echo
|
|
--echo # On node-1
|
|
--connection node_1
|
|
create table t1 (a int not null) ENGINE=MyISAM;
|
|
insert into t1 values (1),(2),(3);
|
|
create table t2 (a int not null) ENGINE=MyISAM;
|
|
insert into t2 values (4),(5),(6);
|
|
create table t3 (a int not null) engine=MERGE UNION=(t1,t2) INSERT_METHOD=FIRST;
|
|
# insert
|
|
select * from t3;
|
|
select * from t3;
|
|
show status like "Qcache_hits";
|
|
show status like "Qcache_queries_in_cache";
|
|
show status like "Qcache_hits";
|
|
insert into t2 values (7);
|
|
show status like "Qcache_queries_in_cache";
|
|
show status like "Qcache_hits";
|
|
select * from t1;
|
|
select * from t1;
|
|
show status like "Qcache_hits";
|
|
show status like "Qcache_queries_in_cache";
|
|
show status like "Qcache_hits";
|
|
insert into t3 values (8);
|
|
show status like "Qcache_queries_in_cache";
|
|
show status like "Qcache_hits";
|
|
# update
|
|
select * from t3;
|
|
show status like "Qcache_queries_in_cache";
|
|
show status like "Qcache_hits";
|
|
update t2 set a=9 where a=7;
|
|
show status like "Qcache_queries_in_cache";
|
|
show status like "Qcache_hits";
|
|
select * from t1;
|
|
show status like "Qcache_queries_in_cache";
|
|
show status like "Qcache_hits";
|
|
update t3 set a=10 where a=1;
|
|
show status like "Qcache_queries_in_cache";
|
|
show status like "Qcache_hits";
|
|
#delete
|
|
select * from t3;
|
|
show status like "Qcache_queries_in_cache";
|
|
show status like "Qcache_hits";
|
|
delete from t2 where a=9;
|
|
show status like "Qcache_queries_in_cache";
|
|
show status like "Qcache_hits";
|
|
select * from t1;
|
|
show status like "Qcache_queries_in_cache";
|
|
show status like "Qcache_hits";
|
|
delete from t3 where a=10;
|
|
select * from t3;
|
|
show status like "Qcache_queries_in_cache";
|
|
show status like "Qcache_hits";
|
|
|
|
--echo # On node-2
|
|
--connection node_2
|
|
# MERGE table, expect no records.
|
|
select * from t3;
|
|
select * from t3;
|
|
show status like "Qcache_queries_in_cache";
|
|
show status like "Qcache_inserts";
|
|
show status like "Qcache_hits";
|
|
|
|
drop table t1, t2, t3;
|
|
|
|
#
|
|
# SELECT SQL_CACHE ...
|
|
#
|
|
--echo # On node-1
|
|
--connection node_1
|
|
set query_cache_type=demand;
|
|
create table t1 (a int not null) engine=innodb;
|
|
insert into t1 values (1),(2),(3);
|
|
select * from t1;
|
|
show status like "Qcache_queries_in_cache";
|
|
show status like "Qcache_hits";
|
|
select sql_cache * from t1 union select * from t1;
|
|
set query_cache_type=2;
|
|
select sql_cache * from t1 union select * from t1;
|
|
show status like "Qcache_hits";
|
|
show status like "Qcache_queries_in_cache";
|
|
set query_cache_type=on;
|
|
|
|
--echo # On node-2
|
|
--connection node_2
|
|
set query_cache_type=demand;
|
|
select * from t1;
|
|
show status like "Qcache_queries_in_cache";
|
|
show status like "Qcache_hits";
|
|
select sql_cache * from t1 union select * from t1;
|
|
set query_cache_type=2;
|
|
select sql_cache * from t1 union select * from t1;
|
|
show status like "Qcache_hits";
|
|
show status like "Qcache_queries_in_cache";
|
|
set query_cache_type=on;
|
|
|
|
#
|
|
# RESET QUERY CACHE
|
|
#
|
|
--echo # On node-1
|
|
--connection node_1
|
|
reset query cache;
|
|
show status like "Qcache_queries_in_cache";
|
|
show status like "Qcache_hits";
|
|
--echo # On node-2
|
|
--connection node_2
|
|
reset query cache;
|
|
show status like "Qcache_queries_in_cache";
|
|
show status like "Qcache_hits";
|
|
|
|
#
|
|
# SELECT SQL_NO_CACHE
|
|
#
|
|
--echo # On node-1
|
|
--connection node_1
|
|
select sql_no_cache * from t1;
|
|
show status like "Qcache_queries_in_cache";
|
|
show status like "Qcache_hits";
|
|
--echo # On node-2
|
|
--connection node_2
|
|
select sql_no_cache * from t1;
|
|
show status like "Qcache_queries_in_cache";
|
|
show status like "Qcache_hits";
|
|
drop table t1;
|
|
|
|
#
|
|
# Check that queries that uses NOW(), LAST_INSERT_ID()... are not cached.
|
|
#
|
|
--echo # On node-1
|
|
--connection node_1
|
|
create table t1 (a text not null) engine=innodb;
|
|
select CONNECTION_ID() from t1;
|
|
select FOUND_ROWS();
|
|
select NOW() from t1;
|
|
select CURDATE() from t1;
|
|
select CURTIME() from t1;
|
|
select DATABASE() from t1;
|
|
select ENCRYPT("test") from t1;
|
|
select LAST_INSERT_ID() from t1;
|
|
select RAND() from t1;
|
|
select UNIX_TIMESTAMP() from t1;
|
|
select USER() from t1;
|
|
select CURRENT_USER() from t1;
|
|
select benchmark(1,1) from t1;
|
|
explain extended select benchmark(1,1) from t1;
|
|
show status like "Qcache_queries_in_cache";
|
|
show status like "Qcache_hits";
|
|
--echo # On node-2
|
|
--connection node_2
|
|
select CONNECTION_ID() from t1;
|
|
select FOUND_ROWS();
|
|
select NOW() from t1;
|
|
select CURDATE() from t1;
|
|
select CURTIME() from t1;
|
|
select DATABASE() from t1;
|
|
select ENCRYPT("test") from t1;
|
|
select LAST_INSERT_ID() from t1;
|
|
select RAND() from t1;
|
|
select UNIX_TIMESTAMP() from t1;
|
|
select USER() from t1;
|
|
select CURRENT_USER() from t1;
|
|
select benchmark(1,1) from t1;
|
|
explain extended select benchmark(1,1) from t1;
|
|
show status like "Qcache_queries_in_cache";
|
|
show status like "Qcache_hits";
|
|
drop table t1;
|
|
|
|
#
|
|
# Non-cachable ODBC work around (and prepare cache for drop database)
|
|
#
|
|
--echo # On node-1
|
|
--connection node_1
|
|
create database mysqltest;
|
|
create table mysqltest.t1 (i int not null auto_increment, a int, primary key
|
|
(i)) engine=innodb;
|
|
insert into mysqltest.t1 values (1, 1);
|
|
select * from mysqltest.t1 where i is null;
|
|
create table t1(a int) engine=innodb;
|
|
select * from t1;
|
|
show status like "Qcache_queries_in_cache";
|
|
show status like "Qcache_hits";
|
|
select * from mysqltest.t1;
|
|
show status like "Qcache_queries_in_cache";
|
|
show status like "Qcache_hits";
|
|
|
|
--echo # On node-2
|
|
--connection node_2
|
|
select * from t1;
|
|
show status like "Qcache_queries_in_cache";
|
|
show status like "Qcache_hits";
|
|
select * from mysqltest.t1;
|
|
show status like "Qcache_queries_in_cache";
|
|
show status like "Qcache_hits";
|
|
#
|
|
# drop db
|
|
#
|
|
drop database mysqltest;
|
|
show status like "Qcache_queries_in_cache";
|
|
show status like "Qcache_hits";
|
|
drop table t1;
|
|
|
|
#
|
|
# Charset conversion (cp1251_koi8 always present)
|
|
# Note: Queries using different default character sets are cached separately.
|
|
#
|
|
--echo # On node-1
|
|
--connection node_1
|
|
create table t1 (a char(1) not null collate koi8r_general_ci) engine=innodb;
|
|
insert into t1 values(_koi8r 0xc3);
|
|
set CHARACTER SET koi8r;
|
|
select * from t1;
|
|
set CHARACTER SET cp1251_koi8;
|
|
select * from t1;
|
|
set CHARACTER SET DEFAULT;
|
|
show status like "Qcache_queries_in_cache";
|
|
show status like "Qcache_hits";
|
|
|
|
--echo # On node-2
|
|
--connection node_2
|
|
set CHARACTER SET koi8r;
|
|
select * from t1;
|
|
set CHARACTER SET cp1251_koi8;
|
|
select * from t1;
|
|
set CHARACTER SET DEFAULT;
|
|
show status like "Qcache_queries_in_cache";
|
|
show status like "Qcache_hits";
|
|
drop table t1;
|
|
|
|
#
|
|
# Same tables in different dbs
|
|
#
|
|
--echo # On node-1
|
|
--connection node_1
|
|
create database if not exists mysqltest;
|
|
create table mysqltest.t1 (i int not null) engine=innodb;
|
|
create table t1 (i int not null) engine=innodb;
|
|
insert into mysqltest.t1 (i) values (1);
|
|
insert into t1 (i) values (2);
|
|
|
|
select * from t1;
|
|
use mysqltest;
|
|
select * from t1;
|
|
select * from t1;
|
|
use test;
|
|
select * from t1;
|
|
show status like "Qcache_queries_in_cache";
|
|
show status like "Qcache_hits";
|
|
|
|
--echo # On node-2
|
|
--connection node_2
|
|
select * from t1;
|
|
use mysqltest;
|
|
select * from t1;
|
|
select * from t1;
|
|
use test;
|
|
select * from t1;
|
|
show status like "Qcache_queries_in_cache";
|
|
show status like "Qcache_hits";
|
|
drop database mysqltest;
|
|
drop table t1;
|
|
|
|
#
|
|
# FOUND_ROWS()
|
|
#
|
|
--echo # On node-1
|
|
--connection node_1
|
|
create table t1 (i int not null) engine=innodb;
|
|
insert into t1 (i) values (1),(2),(3),(4);
|
|
|
|
select SQL_CALC_FOUND_ROWS * from t1 limit 2;
|
|
select FOUND_ROWS();
|
|
show status like "Qcache_hits";
|
|
show status like "Qcache_queries_in_cache";
|
|
|
|
select * from t1 where i=1;
|
|
select FOUND_ROWS();
|
|
show status like "Qcache_hits";
|
|
show status like "Qcache_queries_in_cache";
|
|
|
|
select SQL_CALC_FOUND_ROWS * from t1 limit 2;
|
|
select FOUND_ROWS();
|
|
show status like "Qcache_hits";
|
|
show status like "Qcache_queries_in_cache";
|
|
|
|
select * from t1 where i=1;
|
|
select FOUND_ROWS();
|
|
show status like "Qcache_hits";
|
|
show status like "Qcache_queries_in_cache";
|
|
|
|
--echo # On node-2
|
|
--connection node_2
|
|
select SQL_CALC_FOUND_ROWS * from t1 limit 2;
|
|
select FOUND_ROWS();
|
|
show status like "Qcache_hits";
|
|
show status like "Qcache_queries_in_cache";
|
|
|
|
select * from t1 where i=1;
|
|
select FOUND_ROWS();
|
|
show status like "Qcache_hits";
|
|
show status like "Qcache_queries_in_cache";
|
|
|
|
select SQL_CALC_FOUND_ROWS * from t1 limit 2;
|
|
select FOUND_ROWS();
|
|
show status like "Qcache_hits";
|
|
show status like "Qcache_queries_in_cache";
|
|
|
|
select * from t1 where i=1;
|
|
select FOUND_ROWS();
|
|
show status like "Qcache_hits";
|
|
show status like "Qcache_queries_in_cache";
|
|
|
|
drop table t1;
|
|
|
|
#
|
|
# Test insert delayed (MYISAM)
|
|
#
|
|
|
|
--echo # On node-2
|
|
--connection node_2
|
|
flush query cache;
|
|
reset query cache;
|
|
|
|
--echo # On node-1
|
|
--connection node_1
|
|
flush query cache;
|
|
reset query cache;
|
|
|
|
create table t1 (a int not null) ENGINE=MYISAM;
|
|
insert into t1 values (1),(2),(3);
|
|
select * from t1;
|
|
select * from t1;
|
|
show status like "Qcache_queries_in_cache";
|
|
show status like "Qcache_hits";
|
|
insert delayed into t1 values (4);
|
|
--sleep 5 # Wait for insert delayed to be executed.
|
|
select a from t1;
|
|
show status like "Qcache_queries_in_cache";
|
|
show status like "Qcache_hits";
|
|
|
|
--echo # On node-2
|
|
--connection node_2
|
|
select * from t1;
|
|
select * from t1;
|
|
show status like "Qcache_queries_in_cache";
|
|
show status like "Qcache_hits";
|
|
insert delayed into t1 values (4);
|
|
--sleep 5 # Wait for insert delayed to be executed.
|
|
select a from t1;
|
|
show status like "Qcache_queries_in_cache";
|
|
show status like "Qcache_hits";
|
|
|
|
drop table t1;
|
|
show status like "Qcache_queries_in_cache";
|
|
show status like "Qcache_hits";
|
|
|
|
--echo # On node-1
|
|
--connection node_1
|
|
show status like "Qcache_queries_in_cache";
|
|
show status like "Qcache_hits";
|
|
|
|
#
|
|
# Test of min result data unit size changing
|
|
#
|
|
--echo # On node-2
|
|
--connection node_2
|
|
show global variables like "query_cache_min_res_unit";
|
|
set GLOBAL query_cache_min_res_unit=1001;
|
|
show global variables like "query_cache_min_res_unit";
|
|
|
|
--echo # On node-1
|
|
--connection node_1
|
|
show global variables like "query_cache_min_res_unit";
|
|
set GLOBAL query_cache_min_res_unit=1001;
|
|
show global variables like "query_cache_min_res_unit";
|
|
create table t1 (a int not null) engine=innodb;
|
|
insert into t1 values (1),(2),(3);
|
|
create table t2 (a int not null) engine=innodb;
|
|
insert into t2 values (1),(2),(3);
|
|
select * from t1;
|
|
select * from t1;
|
|
select * from t2;
|
|
select * from t2;
|
|
show status like "Qcache_hits";
|
|
show status like "Qcache_queries_in_cache";
|
|
|
|
--echo # On node-2
|
|
--connection node_2
|
|
select * from t1;
|
|
select * from t1;
|
|
select * from t2;
|
|
select * from t2;
|
|
show status like "Qcache_hits";
|
|
show status like "Qcache_queries_in_cache";
|
|
drop table t1;
|
|
select a from t2;
|
|
select a from t2;
|
|
show status like "Qcache_hits";
|
|
show status like "Qcache_queries_in_cache";
|
|
set GLOBAL query_cache_min_res_unit=default;
|
|
show global variables like "query_cache_min_res_unit";
|
|
|
|
--echo # On node-1
|
|
--connection node_1
|
|
select a from t2;
|
|
select a from t2;
|
|
show status like "Qcache_hits";
|
|
show status like "Qcache_queries_in_cache";
|
|
drop table t2;
|
|
set GLOBAL query_cache_min_res_unit=default;
|
|
show global variables like "query_cache_min_res_unit";
|
|
|
|
#
|
|
# Case sensitive test
|
|
#
|
|
--echo # On node-1
|
|
--connection node_1
|
|
create table t1 (a int not null) engine=innodb;
|
|
insert into t1 values (1);
|
|
select "aaa" from t1;
|
|
select "AAA" from t1;
|
|
show status like "Qcache_queries_in_cache";
|
|
show status like "Qcache_hits";
|
|
|
|
--echo # On node-2
|
|
--connection node_2
|
|
select "aaa" from t1;
|
|
select "AAA" from t1;
|
|
show status like "Qcache_queries_in_cache";
|
|
show status like "Qcache_hits";
|
|
drop table t1;
|
|
|
|
#
|
|
# Test of query cache resizing
|
|
#
|
|
--echo # On node-1
|
|
--connection node_1
|
|
create table t1 (a int) engine=innodb;
|
|
set GLOBAL query_cache_size=1000;
|
|
show global variables like "query_cache_size";
|
|
select * from t1;
|
|
set GLOBAL query_cache_size=1024;
|
|
show global variables like "query_cache_size";
|
|
select * from t1;
|
|
set GLOBAL query_cache_size=10240;
|
|
show global variables like "query_cache_size";
|
|
select * from t1;
|
|
set GLOBAL query_cache_size=20480;
|
|
show global variables like "query_cache_size";
|
|
select * from t1;
|
|
set GLOBAL query_cache_size=40960;
|
|
show global variables like "query_cache_size";
|
|
select * from t1;
|
|
set GLOBAL query_cache_size=51200;
|
|
show global variables like "query_cache_size";
|
|
select * from t1;
|
|
set GLOBAL query_cache_size=61440;
|
|
show global variables like "query_cache_size";
|
|
select * from t1;
|
|
set GLOBAL query_cache_size=81920;
|
|
show global variables like "query_cache_size";
|
|
select * from t1;
|
|
set GLOBAL query_cache_size=102400;
|
|
show global variables like "query_cache_size";
|
|
select * from t1;
|
|
|
|
--echo # On node-2
|
|
--connection node_2
|
|
set GLOBAL query_cache_size=1000;
|
|
show global variables like "query_cache_size";
|
|
select * from t1;
|
|
set GLOBAL query_cache_size=1024;
|
|
show global variables like "query_cache_size";
|
|
select * from t1;
|
|
set GLOBAL query_cache_size=10240;
|
|
show global variables like "query_cache_size";
|
|
select * from t1;
|
|
set GLOBAL query_cache_size=20480;
|
|
show global variables like "query_cache_size";
|
|
select * from t1;
|
|
set GLOBAL query_cache_size=40960;
|
|
show global variables like "query_cache_size";
|
|
select * from t1;
|
|
set GLOBAL query_cache_size=51200;
|
|
show global variables like "query_cache_size";
|
|
select * from t1;
|
|
set GLOBAL query_cache_size=61440;
|
|
show global variables like "query_cache_size";
|
|
select * from t1;
|
|
set GLOBAL query_cache_size=81920;
|
|
show global variables like "query_cache_size";
|
|
select * from t1;
|
|
set GLOBAL query_cache_size=102400;
|
|
show global variables like "query_cache_size";
|
|
select * from t1;
|
|
|
|
drop table t1;
|
|
|
|
#
|
|
# Temporary tables (ignored by Galera)
|
|
#
|
|
--echo # On node-1
|
|
--connection node_1
|
|
set GLOBAL query_cache_size=1048576;
|
|
create table t1 (i int not null) engine=innodb;
|
|
create table t2 (i int not null) engine=innodb;
|
|
select * from t1;
|
|
show status like "Qcache_queries_in_cache";
|
|
show status like "Qcache_hits";
|
|
create temporary table t3 (i int not null);
|
|
select * from t2;
|
|
show status like "Qcache_queries_in_cache";
|
|
show status like "Qcache_hits";
|
|
select * from t3;
|
|
show status like "Qcache_queries_in_cache";
|
|
show status like "Qcache_hits";
|
|
update t1 set i=(select distinct 1 from (select * from t2) a);
|
|
drop table t3;
|
|
|
|
--echo # On node-2
|
|
--connection node_2
|
|
set GLOBAL query_cache_size=1048576;
|
|
select * from t1;
|
|
show status like "Qcache_queries_in_cache";
|
|
show status like "Qcache_hits";
|
|
select * from t2;
|
|
show status like "Qcache_queries_in_cache";
|
|
show status like "Qcache_hits";
|
|
|
|
drop table t1, t2;
|
|
|
|
#
|
|
# System databse test (no need to perform it on node_2)
|
|
# Note: Queries on system tables are not cached.
|
|
#
|
|
--echo # On node-1
|
|
--connection node_1
|
|
use mysql;
|
|
disable_result_log;
|
|
select * from db;
|
|
enable_result_log;
|
|
show status like "Qcache_queries_in_cache";
|
|
show status like "Qcache_hits";
|
|
use test;
|
|
disable_result_log;
|
|
select * from mysql.db;
|
|
enable_result_log;
|
|
show status like "Qcache_queries_in_cache";
|
|
show status like "Qcache_hits";
|
|
|
|
#
|
|
# Simple rename test
|
|
#
|
|
--echo # On node-1
|
|
--connection node_1
|
|
create table t1(id int auto_increment primary key) engine=innodb;
|
|
insert into t1 values (1), (2), (3);
|
|
select * from t1;
|
|
show status like "Qcache_queries_in_cache";
|
|
show status like "Qcache_hits";
|
|
|
|
--echo # On node-2
|
|
--connection node_2
|
|
select * from t1;
|
|
show status like "Qcache_queries_in_cache";
|
|
show status like "Qcache_hits";
|
|
|
|
--echo # On node-1
|
|
--connection node_1
|
|
alter table t1 rename to t2;
|
|
--error ER_NO_SUCH_TABLE
|
|
select * from t1;
|
|
show status like "Qcache_queries_in_cache";
|
|
show status like "Qcache_hits";
|
|
|
|
--echo # On node-2
|
|
--connection node_2
|
|
--error ER_NO_SUCH_TABLE
|
|
select * from t1;
|
|
show status like "Qcache_queries_in_cache";
|
|
show status like "Qcache_hits";
|
|
drop table t2;
|
|
|
|
#
|
|
# Load data invalidation test
|
|
#
|
|
--echo # On node-1
|
|
--connection node_1
|
|
create table t1 (word char(20) not null) engine=innodb;
|
|
select * from t1;
|
|
show status like "Qcache_queries_in_cache";
|
|
show status like "Qcache_hits";
|
|
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
|
eval load data infile '$MYSQLTEST_VARDIR/std_data/words.dat' into table t1;
|
|
show status like "Qcache_queries_in_cache";
|
|
show status like "Qcache_hits";
|
|
select count(*) from t1;
|
|
|
|
# Wait for "load data" to replicate.
|
|
--sleep 5
|
|
|
|
--echo # On node-2
|
|
--connection node_2
|
|
select count(*) from t1;
|
|
show status like "Qcache_queries_in_cache";
|
|
show status like "Qcache_hits";
|
|
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
|
eval load data infile '$MYSQLTEST_VARDIR/std_data/words.dat' into table t1;
|
|
show status like "Qcache_queries_in_cache";
|
|
show status like "Qcache_hits";
|
|
select count(*) from t1;
|
|
|
|
drop table t1;
|
|
|
|
#
|
|
# INTO OUTFILE/DUMPFILE test
|
|
#
|
|
--echo # On node-1
|
|
--connection node_1
|
|
create table t1 (a int) engine=innodb;
|
|
insert into t1 values (1),(2),(3);
|
|
show status like "Qcache_queries_in_cache";
|
|
show status like "Qcache_hits";
|
|
select * from t1 into outfile "query_cache.out.file";
|
|
--error ER_FILE_EXISTS_ERROR
|
|
select * from t1 into outfile "query_cache.out.file";
|
|
select * from t1 limit 1 into dumpfile "query_cache.dump.file";
|
|
show status like "Qcache_queries_in_cache";
|
|
show status like "Qcache_hits";
|
|
drop table t1;
|
|
let $datadir=`select @@datadir`;
|
|
--remove_file $datadir/test/query_cache.dump.file
|
|
--remove_file $datadir/test/query_cache.out.file
|
|
|
|
#
|
|
# Test of SQL_SELECT_LIMIT
|
|
#
|
|
--echo # On node-1
|
|
--connection node_1
|
|
create table t1 (a int) engine=innodb;
|
|
insert into t1 values (1),(2);
|
|
show status like "Qcache_queries_in_cache";
|
|
show status like "Qcache_hits";
|
|
select * from t1;
|
|
SET SQL_SELECT_LIMIT=1;
|
|
select * from t1;
|
|
show status like "Qcache_queries_in_cache";
|
|
show status like "Qcache_hits";
|
|
SET SQL_SELECT_LIMIT=DEFAULT;
|
|
|
|
--echo # On node-2
|
|
--connection node_2
|
|
show status like "Qcache_queries_in_cache";
|
|
show status like "Qcache_hits";
|
|
select * from t1;
|
|
SET SQL_SELECT_LIMIT=1;
|
|
select * from t1;
|
|
show status like "Qcache_queries_in_cache";
|
|
show status like "Qcache_hits";
|
|
SET SQL_SELECT_LIMIT=DEFAULT;
|
|
|
|
drop table t1;
|
|
|
|
#
|
|
# WRITE LOCK & QC
|
|
#
|
|
--echo # On node-1
|
|
--connection node_1
|
|
create table t1 (a int not null) engine=innodb;
|
|
create table t2 (a int not null) engine=innodb;
|
|
|
|
set query_cache_wlock_invalidate=1;
|
|
create view v1 as select * from t1;
|
|
select * from t1;
|
|
select * from t2;
|
|
show status like "Qcache_queries_in_cache";
|
|
show status like "Qcache_hits";
|
|
lock table t1 write, t2 read;
|
|
show status like "Qcache_queries_in_cache";
|
|
show status like "Qcache_hits";
|
|
unlock table;
|
|
select * from t1;
|
|
# Implicit locking of t1 does not invalidate QC
|
|
show status like "Qcache_queries_in_cache";
|
|
show status like "Qcache_hits";
|
|
lock table v1 write;
|
|
show status like "Qcache_queries_in_cache";
|
|
show status like "Qcache_hits";
|
|
unlock table;
|
|
drop view v1;
|
|
set query_cache_wlock_invalidate=default;
|
|
|
|
--echo # On node-2
|
|
--connection node_2
|
|
set query_cache_wlock_invalidate=1;
|
|
create view v1 as select * from t1;
|
|
select * from t1;
|
|
select * from t2;
|
|
show status like "Qcache_queries_in_cache";
|
|
show status like "Qcache_hits";
|
|
lock table t1 write, t2 read;
|
|
show status like "Qcache_queries_in_cache";
|
|
show status like "Qcache_hits";
|
|
unlock table;
|
|
select * from t1;
|
|
# Implicit locking of t1 does not invalidate QC
|
|
show status like "Qcache_queries_in_cache";
|
|
show status like "Qcache_hits";
|
|
lock table v1 write;
|
|
show status like "Qcache_queries_in_cache";
|
|
show status like "Qcache_hits";
|
|
unlock table;
|
|
drop view v1;
|
|
set query_cache_wlock_invalidate=default;
|
|
|
|
drop table t1,t2;
|
|
|
|
#
|
|
# Hiding real table stored in query cache by temporary table
|
|
#
|
|
--echo # On node-1
|
|
--connection node_1
|
|
create table t1 (id int primary key) engine=innodb;
|
|
insert into t1 values (1),(2),(3);
|
|
select * from t1;
|
|
create temporary table t1 (a int not null auto_increment primary key);
|
|
select * from t1;
|
|
drop table t1;
|
|
drop table t1;
|
|
|
|
#
|
|
# Test character set related variables:
|
|
# character_set_result
|
|
# character_set_client
|
|
# charactet_set_connection/collation_connection
|
|
# If at least one of the above variables has changed,
|
|
# the cached query can't be reused. In the below test
|
|
# absolutely the same query is used several times,
|
|
# SELECT should fetch different results for every instance.
|
|
# No hits should be produced.
|
|
# New cache entry should appear for every SELECT.
|
|
#
|
|
|
|
--echo # On node-1
|
|
--connection node_1
|
|
SET NAMES koi8r;
|
|
CREATE TABLE t1 (a char(1) character set koi8r) engine=innodb;
|
|
INSERT INTO t1 VALUES (_koi8r 0xc3),(_koi8r 0xc3);
|
|
#
|
|
# Run select
|
|
#
|
|
SELECT a,'Â','â'='Â' FROM t1;
|
|
show status like "Qcache_hits";
|
|
show status like "Qcache_queries_in_cache";
|
|
#
|
|
# Change collation_connection and run the same query again
|
|
#
|
|
set collation_connection=koi8r_bin;
|
|
SELECT a,'Â','â'='Â' FROM t1;
|
|
show status like "Qcache_hits";
|
|
show status like "Qcache_queries_in_cache";
|
|
#
|
|
# Now change character_set_client and run the same query again
|
|
#
|
|
set character_set_client=cp1251;
|
|
SELECT a,'Â','â'='Â' FROM t1;
|
|
show status like "Qcache_hits";
|
|
show status like "Qcache_queries_in_cache";
|
|
#
|
|
# And finally change character_set_results and run the same query again
|
|
#
|
|
set character_set_results=cp1251;
|
|
SELECT a,'Â','â'='Â' FROM t1;
|
|
show status like "Qcache_hits";
|
|
show status like "Qcache_queries_in_cache";
|
|
SET NAMES default;
|
|
|
|
--echo # On node-2
|
|
--connection node_2
|
|
#
|
|
# Run select
|
|
#
|
|
SELECT a,'Â','â'='Â' FROM t1;
|
|
show status like "Qcache_hits";
|
|
show status like "Qcache_queries_in_cache";
|
|
#
|
|
# Change collation_connection and run the same query again
|
|
#
|
|
set collation_connection=koi8r_bin;
|
|
SELECT a,'Â','â'='Â' FROM t1;
|
|
show status like "Qcache_hits";
|
|
show status like "Qcache_queries_in_cache";
|
|
#
|
|
# Now change character_set_client and run the same query again
|
|
#
|
|
set character_set_client=cp1251;
|
|
SELECT a,'Â','â'='Â' FROM t1;
|
|
show status like "Qcache_hits";
|
|
show status like "Qcache_queries_in_cache";
|
|
#
|
|
# And finally change character_set_results and run the same query again
|
|
#
|
|
set character_set_results=cp1251;
|
|
SELECT a,'Â','â'='Â' FROM t1;
|
|
show status like "Qcache_hits";
|
|
show status like "Qcache_queries_in_cache";
|
|
|
|
drop table t1;
|
|
|
|
#
|
|
# Comments before command
|
|
#
|
|
--echo # On node-1
|
|
--connection node_1
|
|
create table t1 (a int) engine=innodb;
|
|
show status like "Qcache_queries_in_cache";
|
|
show status like "Qcache_inserts";
|
|
show status like "Qcache_hits";
|
|
/**/ select * from t1;
|
|
/**/ select * from t1;
|
|
show status like "Qcache_queries_in_cache";
|
|
show status like "Qcache_inserts";
|
|
show status like "Qcache_hits";
|
|
|
|
--echo # On node-2
|
|
--connection node_2
|
|
show status like "Qcache_queries_in_cache";
|
|
show status like "Qcache_inserts";
|
|
show status like "Qcache_hits";
|
|
/**/ select * from t1;
|
|
/**/ select * from t1;
|
|
show status like "Qcache_queries_in_cache";
|
|
show status like "Qcache_inserts";
|
|
show status like "Qcache_hits";
|
|
|
|
drop table t1;
|
|
|
|
#
|
|
# Information schema & query cache test
|
|
#
|
|
--echo # On node-1
|
|
--connection node_1
|
|
set session query_cache_type = 2;
|
|
create table t1(a int) engine=innodb;
|
|
select table_name from information_schema.tables
|
|
where table_schema="test";
|
|
drop table t1;
|
|
select table_name from information_schema.tables
|
|
where table_schema="test";
|
|
# Bug #8480: REPAIR TABLE needs to flush the table from the query cache
|
|
set session query_cache_type = 1;
|
|
set global query_cache_size=1024*1024;
|
|
flush query cache;
|
|
create table t1 ( a int ) engine=myisam; # myisam for repair tables
|
|
insert into t1 values (1);
|
|
select a from t1;
|
|
select a from t1;
|
|
show status like 'qcache_queries_in_cache';
|
|
show status like "Qcache_hits";
|
|
repair table t1;
|
|
show status like 'qcache_queries_in_cache';
|
|
show status like "Qcache_hits";
|
|
|
|
--echo # On node-2
|
|
--connection node_2
|
|
select a from t1;
|
|
select a from t1;
|
|
show status like 'qcache_queries_in_cache';
|
|
show status like "Qcache_hits";
|
|
repair table t1;
|
|
show status like 'qcache_queries_in_cache';
|
|
show status like "Qcache_hits";
|
|
drop table t1;
|
|
|
|
--echo # Restore original settings.
|
|
--echo # On node-1
|
|
--connection node_1
|
|
SET GLOBAL query_cache_size=@query_cache_size_saved;
|
|
SET GLOBAL query_cache_type=@query_cache_type_saved;
|
|
--echo
|
|
--echo # On node-2
|
|
--connection node_2
|
|
SET GLOBAL query_cache_size=@query_cache_size_saved;
|
|
SET GLOBAL query_cache_type=@query_cache_type_saved;
|
|
|
|
--echo # End of test
|