mirror of
https://github.com/MariaDB/server.git
synced 2025-01-17 12:32:27 +01:00
74374933c8
RESULT FROM PREVIOUS TRANSACTION The current Query Cache API is not fully compatible with the partitioning engine. There is no good way to implement support for QC due to: 1) a static callback for ha_partition would need to have access to all partition names and call the underlying callback for each [sub]partition with the correct name. 2) pruning would be impossible, even if one used the ulonglong engine_data due to if engine_data is changed, the table is invalidated by the QC. So the only viable solution to avoid incorrect data is to not allow caching of queries using partitioned tables. (There are some extra changes, due to removal of \r as line break)
223 lines
5.2 KiB
Text
223 lines
5.2 KiB
Text
SET SESSION STORAGE_ENGINE = InnoDB;
|
|
drop table if exists t1,t2,t3;
|
|
set @save_query_cache_size = @@global.query_cache_size;
|
|
set GLOBAL query_cache_size = 1355776;
|
|
flush status;
|
|
set autocommit=0;
|
|
create table t1 (a int not null);
|
|
insert into t1 values (1),(2),(3);
|
|
select * from t1;
|
|
a
|
|
1
|
|
2
|
|
3
|
|
show status like "Qcache_queries_in_cache";
|
|
Variable_name Value
|
|
Qcache_queries_in_cache 0
|
|
drop table t1;
|
|
commit;
|
|
set autocommit=1;
|
|
begin;
|
|
create table t1 (a int not null);
|
|
insert into t1 values (1),(2),(3);
|
|
select * from t1;
|
|
a
|
|
1
|
|
2
|
|
3
|
|
show status like "Qcache_queries_in_cache";
|
|
Variable_name Value
|
|
Qcache_queries_in_cache 1
|
|
drop table t1;
|
|
commit;
|
|
create table t1 (a int not null);
|
|
create table t2 (a int not null);
|
|
create table t3 (a int not null);
|
|
insert into t1 values (1),(2);
|
|
insert into t2 values (1),(2);
|
|
insert into t3 values (1),(2);
|
|
select * from t1;
|
|
a
|
|
1
|
|
2
|
|
select * from t2;
|
|
a
|
|
1
|
|
2
|
|
select * from t3;
|
|
a
|
|
1
|
|
2
|
|
show status like "Qcache_queries_in_cache";
|
|
Variable_name Value
|
|
Qcache_queries_in_cache 3
|
|
show status like "Qcache_hits";
|
|
Variable_name Value
|
|
Qcache_hits 0
|
|
begin;
|
|
select * from t1;
|
|
a
|
|
1
|
|
2
|
|
select * from t2;
|
|
a
|
|
1
|
|
2
|
|
select * from t3;
|
|
a
|
|
1
|
|
2
|
|
show status like "Qcache_queries_in_cache";
|
|
Variable_name Value
|
|
Qcache_queries_in_cache 6
|
|
show status like "Qcache_hits";
|
|
Variable_name Value
|
|
Qcache_hits 0
|
|
insert into t1 values (3);
|
|
insert into t2 values (3);
|
|
insert into t1 values (4);
|
|
select * from t1;
|
|
a
|
|
1
|
|
2
|
|
3
|
|
4
|
|
select * from t2;
|
|
a
|
|
1
|
|
2
|
|
3
|
|
select * from t3;
|
|
a
|
|
1
|
|
2
|
|
show status like "Qcache_queries_in_cache";
|
|
Variable_name Value
|
|
Qcache_queries_in_cache 2
|
|
show status like "Qcache_hits";
|
|
Variable_name Value
|
|
Qcache_hits 1
|
|
commit;
|
|
show status like "Qcache_queries_in_cache";
|
|
Variable_name Value
|
|
Qcache_queries_in_cache 2
|
|
drop table t3,t2,t1;
|
|
CREATE TABLE t1 (id int(11) NOT NULL auto_increment, PRIMARY KEY (id));
|
|
select count(*) from t1;
|
|
count(*)
|
|
0
|
|
insert into t1 (id) values (0);
|
|
select count(*) from t1;
|
|
count(*)
|
|
1
|
|
drop table t1;
|
|
CREATE TABLE t1 ( id int(10) NOT NULL auto_increment, a varchar(25) default NULL, PRIMARY KEY (id), UNIQUE KEY a (a));
|
|
CREATE TABLE t2 ( id int(10) NOT NULL auto_increment, b varchar(25) default NULL, PRIMARY KEY (id), UNIQUE KEY b (b));
|
|
CREATE TABLE t3 ( id int(10) NOT NULL auto_increment, t1_id int(10) NOT NULL default '0', t2_id int(10) NOT NULL default '0', state int(11) default NULL, PRIMARY KEY (id), UNIQUE KEY t1_id (t1_id,t2_id), KEY t2_id (t2_id,t1_id), CONSTRAINT `t3_ibfk_1` FOREIGN KEY (`t1_id`) REFERENCES `t1` (`id`), CONSTRAINT `t3_ibfk_2` FOREIGN KEY (`t2_id`) REFERENCES `t2` (`id`));
|
|
INSERT INTO t1 VALUES (1,'me');
|
|
INSERT INTO t2 VALUES (1,'you');
|
|
INSERT INTO t3 VALUES (2,1,1,2);
|
|
delete from t3 where t1_id = 1 and t2_id = 1;
|
|
select t1.* from t1, t2, t3 where t3.state & 1 = 0 and t3.t1_id = t1.id and t3.t2_id = t2.id and t1.id = 1 order by t1.a asc;
|
|
id a
|
|
begin;
|
|
insert into t3 VALUES ( NULL, 1, 1, 2 );
|
|
insert into t3 VALUES ( NULL, 1, 1, 2 );
|
|
ERROR 23000: Duplicate entry '1-1' for key 't1_id'
|
|
commit;
|
|
select t1.* from t1, t2, t3 where t3.state & 1 = 0 and t3.t1_id = t1.id and t3.t2_id = t2.id and t1.id = 1 order by t1.a asc;
|
|
id a
|
|
1 me
|
|
drop table t3,t2,t1;
|
|
SET SESSION STORAGE_ENGINE = InnoDB;
|
|
SET @@autocommit=1;
|
|
connection default
|
|
SHOW VARIABLES LIKE 'have_query_cache';
|
|
Variable_name Value
|
|
have_query_cache YES
|
|
SET GLOBAL query_cache_size = 200000;
|
|
flush status;
|
|
SET @@autocommit=1;
|
|
SET SESSION STORAGE_ENGINE = InnoDB;
|
|
CREATE TABLE t2 (s1 int, s2 varchar(1000), key(s1));
|
|
INSERT INTO t2 VALUES (1,repeat('a',10)),(2,repeat('a',10)),(3,repeat('a',10)),(4,repeat('a',10));
|
|
COMMIT;
|
|
START TRANSACTION;
|
|
SELECT sql_cache count(*) FROM t2 WHERE s2 = 'w';
|
|
count(*)
|
|
0
|
|
UPDATE t2 SET s2 = 'w' WHERE s1 = 3;
|
|
SELECT sql_cache count(*) FROM t2 WHERE s2 = 'w';
|
|
count(*)
|
|
1
|
|
show status like "Qcache_queries_in_cache";
|
|
Variable_name Value
|
|
Qcache_queries_in_cache 0
|
|
connection connection1
|
|
START TRANSACTION;
|
|
SELECT sql_cache count(*) FROM t2 WHERE s2 = 'w';
|
|
count(*)
|
|
0
|
|
INSERT INTO t2 VALUES (5,'w');
|
|
SELECT sql_cache count(*) FROM t2 WHERE s2 = 'w';
|
|
count(*)
|
|
1
|
|
COMMIT;
|
|
SELECT sql_cache count(*) FROM t2 WHERE s2 = 'w';
|
|
count(*)
|
|
1
|
|
show status like "Qcache_queries_in_cache";
|
|
Variable_name Value
|
|
Qcache_queries_in_cache 0
|
|
connection default
|
|
SELECT sql_cache count(*) FROM t2 WHERE s2 = 'w';
|
|
count(*)
|
|
1
|
|
COMMIT;
|
|
show status like "Qcache_queries_in_cache";
|
|
Variable_name Value
|
|
Qcache_queries_in_cache 0
|
|
SELECT sql_cache count(*) FROM t2 WHERE s2 = 'w';
|
|
count(*)
|
|
2
|
|
show status like "Qcache_queries_in_cache";
|
|
Variable_name Value
|
|
Qcache_queries_in_cache 1
|
|
connection connection1
|
|
SELECT sql_cache count(*) FROM t2 WHERE s2 = 'w';
|
|
count(*)
|
|
2
|
|
START TRANSACTION;
|
|
SELECT sql_cache count(*) FROM t2 WHERE s2 = 'w';
|
|
count(*)
|
|
2
|
|
INSERT INTO t2 VALUES (6,'w');
|
|
SELECT sql_cache count(*) FROM t2 WHERE s2 = 'w';
|
|
count(*)
|
|
3
|
|
connection default
|
|
SELECT sql_cache count(*) FROM t2 WHERE s2 = 'w';
|
|
count(*)
|
|
2
|
|
START TRANSACTION;
|
|
SELECT sql_cache count(*) FROM t2 WHERE s2 = 'w';
|
|
count(*)
|
|
2
|
|
DELETE from t2 WHERE s1=3;
|
|
SELECT sql_cache count(*) FROM t2 WHERE s2 = 'w';
|
|
count(*)
|
|
1
|
|
COMMIT;
|
|
connection connection1
|
|
COMMIT;
|
|
SELECT sql_cache count(*) FROM t2 WHERE s2 = 'w';
|
|
count(*)
|
|
2
|
|
show status like "Qcache_queries_in_cache";
|
|
Variable_name Value
|
|
Qcache_queries_in_cache 1
|
|
show status like "Qcache_hits";
|
|
Variable_name Value
|
|
Qcache_hits 1
|
|
set @@global.query_cache_size = @save_query_cache_size;
|
|
drop table t2;
|