mirror of
https://github.com/MariaDB/server.git
synced 2025-01-16 03:52:35 +01:00
Merge laptop.sanja.is.com.ua:/home/bell/mysql/bk/mysql-4.1
into laptop.sanja.is.com.ua:/home/bell/mysql/bk/work-qc-4.1 sql/sql_cache.cc: Auto merged sql/sql_cache.h: Auto merged
This commit is contained in:
commit
9ffa550e07
3 changed files with 48 additions and 4 deletions
|
@ -10,7 +10,7 @@ a
|
|||
3
|
||||
show status like "Qcache_queries_in_cache";
|
||||
Variable_name Value
|
||||
Qcache_queries_in_cache 1
|
||||
Qcache_queries_in_cache 0
|
||||
drop table t1;
|
||||
commit;
|
||||
set autocommit=1;
|
||||
|
@ -24,7 +24,7 @@ a
|
|||
3
|
||||
show status like "Qcache_queries_in_cache";
|
||||
Variable_name Value
|
||||
Qcache_queries_in_cache 1
|
||||
Qcache_queries_in_cache 0
|
||||
drop table t1;
|
||||
commit;
|
||||
create table t1 (a int not null) type=innodb;
|
||||
|
@ -90,14 +90,14 @@ a
|
|||
2
|
||||
show status like "Qcache_queries_in_cache";
|
||||
Variable_name Value
|
||||
Qcache_queries_in_cache 3
|
||||
Qcache_queries_in_cache 1
|
||||
show status like "Qcache_hits";
|
||||
Variable_name Value
|
||||
Qcache_hits 4
|
||||
commit;
|
||||
show status like "Qcache_queries_in_cache";
|
||||
Variable_name Value
|
||||
Qcache_queries_in_cache 3
|
||||
Qcache_queries_in_cache 1
|
||||
drop table if exists t1;
|
||||
CREATE TABLE t1 (id int(11) NOT NULL auto_increment, PRIMARY KEY (id)) TYPE=InnoDB;
|
||||
select count(*) from t1;
|
||||
|
|
|
@ -769,9 +769,18 @@ void Query_cache::store_query(THD *thd, TABLE_LIST *tables_used)
|
|||
STRUCT_LOCK(&structure_guard_mutex);
|
||||
|
||||
if (query_cache_size == 0)
|
||||
{
|
||||
STRUCT_UNLOCK(&structure_guard_mutex);
|
||||
DBUG_VOID_RETURN;
|
||||
}
|
||||
DUMP(this);
|
||||
|
||||
if (ask_handler_allowance(thd, tables_used))
|
||||
{
|
||||
STRUCT_UNLOCK(&structure_guard_mutex);
|
||||
DBUG_VOID_RETURN;
|
||||
}
|
||||
|
||||
/* Key is query + database + flag */
|
||||
if (thd->db_length)
|
||||
{
|
||||
|
@ -2548,6 +2557,39 @@ TABLE_COUNTER_TYPE Query_cache::is_cacheable(THD *thd, uint32 query_len,
|
|||
DBUG_RETURN(0);
|
||||
}
|
||||
|
||||
/*
|
||||
Check handler allowence to cache query with this tables
|
||||
|
||||
SYNOPSYS
|
||||
Query_cache::ask_handler_allowance()
|
||||
thd - thread handlers
|
||||
tables_used - tables list used in query
|
||||
|
||||
RETURN
|
||||
0 - caching allowed
|
||||
1 - caching disallowed
|
||||
*/
|
||||
my_bool Query_cache::ask_handler_allowance(THD *thd,
|
||||
TABLE_LIST *tables_used)
|
||||
{
|
||||
DBUG_ENTER("Query_cache::is_cacheable");
|
||||
|
||||
for (; tables_used; tables_used= tables_used->next)
|
||||
{
|
||||
TABLE *table= tables_used->table;
|
||||
if (!handler::caching_allowed(thd, table->table_cache_key,
|
||||
table->key_length,
|
||||
table->file->table_cache_type()))
|
||||
{
|
||||
DBUG_PRINT("qcache", ("Handler does not allow caching for %s.%s",
|
||||
tables_used->db, tables_used->alias));
|
||||
thd->lex.safe_to_cache_query= 0; // Don't try to cache this
|
||||
DBUG_RETURN(1);
|
||||
}
|
||||
}
|
||||
DBUG_RETURN(0);
|
||||
}
|
||||
|
||||
|
||||
/*****************************************************************************
|
||||
Packing
|
||||
|
|
|
@ -345,6 +345,8 @@ protected:
|
|||
TABLE_COUNTER_TYPE is_cacheable(THD *thd, uint32 query_len, char *query,
|
||||
LEX *lex, TABLE_LIST *tables_used,
|
||||
uint8 *tables_type);
|
||||
|
||||
static my_bool ask_handler_allowance(THD *thd, TABLE_LIST *tables_used);
|
||||
public:
|
||||
|
||||
Query_cache(ulong query_cache_limit = ULONG_MAX,
|
||||
|
|
Loading…
Reference in a new issue