mirror of
https://github.com/MariaDB/server.git
synced 2025-01-19 05:22:25 +01:00
c4356bfccb
* Added galera/query_cache test * Merged patch for lp:1296403
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"á");
|
|
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'á'),(_koi8r'Á');
|
|
#
|
|
# 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
|