Commit ea646dce authored by unknown's avatar unknown

avoid using ndb tables in query cache


sql/ha_ndbcluster.h:
  fixed layout
  prohibit using query cache with ndb tables
sql/handler.h:
  new caching type
sql/sql_cache.cc:
  support of new caching type (caching prohibited)
parent af847c22
set GLOBAL query_cache_size=1355776;
reset query cache;
flush status;
drop table if exists t1,t2;
CREATE TABLE t1 (a int) ENGINE=ndbcluster;
CREATE TABLE t2 (a int);
select * from t1;
a
show status like "Qcache_queries_in_cache";
Variable_name Value
Qcache_queries_in_cache 0
show status like "Qcache_inserts";
Variable_name Value
Qcache_inserts 0
show status like "Qcache_hits";
Variable_name Value
Qcache_hits 0
select * from t2;
a
show status like "Qcache_queries_in_cache";
Variable_name Value
Qcache_queries_in_cache 1
show status like "Qcache_inserts";
Variable_name Value
Qcache_inserts 1
show status like "Qcache_hits";
Variable_name Value
Qcache_hits 0
select * from t1;
a
select * from t2;
a
show status like "Qcache_queries_in_cache";
Variable_name Value
Qcache_queries_in_cache 1
show status like "Qcache_inserts";
Variable_name Value
Qcache_inserts 1
show status like "Qcache_hits";
Variable_name Value
Qcache_hits 1
drop table t1, t2;
SET GLOBAL query_cache_size=0;
-- source include/have_query_cache.inc
-- source include/have_ndb.inc
set GLOBAL query_cache_size=1355776;
reset query cache;
flush status;
--disable_warnings
drop table if exists t1,t2;
--enable_warnings
CREATE TABLE t1 (a int) ENGINE=ndbcluster;
CREATE TABLE t2 (a int);
select * from t1;
show status like "Qcache_queries_in_cache";
show status like "Qcache_inserts";
show status like "Qcache_hits";
select * from t2;
show status like "Qcache_queries_in_cache";
show status like "Qcache_inserts";
show status like "Qcache_hits";
select * from t1;
select * from t2;
show status like "Qcache_queries_in_cache";
show status like "Qcache_inserts";
show status like "Qcache_hits";
drop table t1, t2;
SET GLOBAL query_cache_size=0;
......@@ -107,7 +107,7 @@ class ha_ndbcluster: public handler
return true;
#endif
}
bool has_transactions() { return true;}
bool has_transactions() { return true; }
const char* index_type(uint key_number) {
switch (get_index_type(key_number)) {
......@@ -130,7 +130,7 @@ class ha_ndbcluster: public handler
static Ndb* seize_ndb();
static void release_ndb(Ndb* ndb);
uint8 table_cache_type() { return HA_CACHE_TBL_NOCACHE; }
private:
int alter_table_name(const char *from, const char *to);
......
......@@ -138,8 +138,10 @@
/* Table caching type */
#define HA_CACHE_TBL_NONTRANSACT 0
#define HA_CACHE_TBL_ASKTRANSACT 1
#define HA_CACHE_TBL_TRANSACT 2
#define HA_CACHE_TBL_NOCACHE 1
#define HA_CACHE_TBL_ASKTRANSACT 2
#define HA_CACHE_TBL_TRANSACT 4
enum db_type
{
......
......@@ -2614,12 +2614,14 @@ TABLE_COUNTER_TYPE Query_cache::is_cacheable(THD *thd, uint32 query_len,
*/
if (tables_used->table->db_type == DB_TYPE_MRG_ISAM ||
tables_used->table->tmp_table != NO_TMP_TABLE ||
(*tables_type & HA_CACHE_TBL_NOCACHE) ||
(tables_used->db_length == 5 &&
my_strnncoll(table_alias_charset, (uchar*)tables_used->db, 6,
(uchar*)"mysql",6) == 0))
{
DBUG_PRINT("qcache",
("select not cacheable: used MRG_ISAM, temporary or system table(s)"));
("select not cacheable: used MRG_ISAM, temporary, \
system or other non-cacheable table(s)"));
DBUG_RETURN(0);
}
if (tables_used->table->db_type == DB_TYPE_MRG_MYISAM)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment