Below is the list of changes that have just been committed into a local
5.0 repository of thek. When thek does a push these changes
will be propagated to the main repository and, within 24 hours after the
push, to the public repository.
For information on how to access the public repository
see http://dev.mysql.com/doc/mysql/en/installing-source-tree.html
ChangeSet@stripped, 2008-03-17 15:32:18+01:00, thek@adventure.(none) +5 -0
Bug#30087 Set query_cache_size, if the value is too small, get a unclear warning
This bugs clarifies a warning message issued when the query cache data
size becomes smaller than the minium allowed size.
mysql-test/r/query_cache.result@stripped, 2008-03-17 15:32:17+01:00, thek@adventure.(none) +4 -4
New warning message when a too small value has been set for query cache
size.
sql/set_var.cc@stripped, 2008-03-17 15:32:17+01:00, thek@adventure.(none) +1 -6
To avoid poluting the QC API the warning messages are moved into the
QC module.
sql/share/errmsg.txt@stripped, 2008-03-17 15:32:17+01:00, thek@adventure.(none) +11 -7
Changed error message so that minimal cache size always is hinted.
sql/sql_cache.cc@stripped, 2008-03-17 15:32:17+01:00, thek@adventure.(none) +29 -0
Modified the warning message so that the minimal cache size always is
hinted.
Added interface method Query_cache::get_minimal_size_limit().
sql/sql_cache.h@stripped, 2008-03-17 15:32:17+01:00, thek@adventure.(none) +2 -0
Modified the warning message so that the minimal cache size always is
hinted.
Added interface method Query_cache::get_minimal_size_limit().
diff -Nrup a/mysql-test/r/query_cache.result b/mysql-test/r/query_cache.result
--- a/mysql-test/r/query_cache.result 2007-08-21 17:47:03 +02:00
+++ b/mysql-test/r/query_cache.result 2008-03-17 15:32:17 +01:00
@@ -564,7 +564,7 @@ select * from t1;
a
set GLOBAL query_cache_size=1024;
Warnings:
-Warning 1282 Query cache failed to set size 1024; new query cache size is 0
+Warning 1282 Query cache failed to set size 1024 (minimal value: 41297); new query cache size is 0
show global variables like "query_cache_size";
Variable_name Value
query_cache_size 0
@@ -572,7 +572,7 @@ select * from t1;
a
set GLOBAL query_cache_size=10240;
Warnings:
-Warning 1282 Query cache failed to set size 10240; new query cache size is 0
+Warning 1282 Query cache failed to set size 10240 (minimal value: 41297); new query cache size is 0
show global variables like "query_cache_size";
Variable_name Value
query_cache_size 0
@@ -580,7 +580,7 @@ select * from t1;
a
set GLOBAL query_cache_size=20480;
Warnings:
-Warning 1282 Query cache failed to set size 20480; new query cache size is 0
+Warning 1282 Query cache failed to set size 20480 (minimal value: 41297); new query cache size is 0
show global variables like "query_cache_size";
Variable_name Value
query_cache_size 0
@@ -588,7 +588,7 @@ select * from t1;
a
set GLOBAL query_cache_size=40960;
Warnings:
-Warning 1282 Query cache failed to set size 40960; new query cache size is 0
+Warning 1282 Query cache failed to set size 40960 (minimal value: 41297); new query cache size is 0
show global variables like "query_cache_size";
Variable_name Value
query_cache_size 0
diff -Nrup a/sql/set_var.cc b/sql/set_var.cc
--- a/sql/set_var.cc 2008-01-10 12:01:24 +01:00
+++ b/sql/set_var.cc 2008-03-17 15:32:17 +01:00
@@ -1343,12 +1343,7 @@ static void fix_net_retry_count(THD *thd
static void fix_query_cache_size(THD *thd, enum_var_type type)
{
#ifdef HAVE_QUERY_CACHE
- ulong requested= query_cache_size;
- query_cache.resize(query_cache_size);
- if (requested != query_cache_size)
- push_warning_printf(current_thd, MYSQL_ERROR::WARN_LEVEL_WARN,
- ER_WARN_QC_RESIZE, ER(ER_WARN_QC_RESIZE),
- requested, query_cache_size);
+ query_cache_size= query_cache.resize(query_cache_size);
#endif
}
diff -Nrup a/sql/share/errmsg.txt b/sql/share/errmsg.txt
--- a/sql/share/errmsg.txt 2007-10-23 13:15:27 +02:00
+++ b/sql/share/errmsg.txt 2008-03-17 15:32:17 +01:00
@@ -4992,13 +4992,13 @@ ER_WRONG_NAME_FOR_CATALOG 42000
spa "Nombre de catalog incorrecto '%-.100s'"
swe "Felaktigt katalog namn '%-.100s'"
ER_WARN_QC_RESIZE
- eng "Query cache failed to set size %lu; new query cache size is %lu"
+ eng "Query cache failed to set size %lu (minimal value: %lu); new query cache size is %lu"
ER_BAD_FT_COLUMN
eng "Column '%-.64s' cannot be part of FULLTEXT index"
ger "Feld '%-.64s' kann nicht Teil eines FULLTEXT-Index sein"
@@ -5641,3 +5641,7 @@ ER_NAME_BECOMES_EMPTY
eng "Name '%-.64s' has become ''"
ER_AMBIGUOUS_FIELD_TERM
eng "First character of the FIELDS TERMINATED string is ambiguous; please use non-optional and non-empty FIELDS ENCLOSED BY"
+ER_WARN_QC_RESIZE2
+ eng "Cache size %lu is too small to be efficient; minimal value is %lu. New size is %lu"
+
diff -Nrup a/sql/sql_cache.cc b/sql/sql_cache.cc
--- a/sql/sql_cache.cc 2007-10-01 12:44:28 +02:00
+++ b/sql/sql_cache.cc 2008-03-17 15:32:17 +01:00
@@ -816,6 +816,16 @@ ulong Query_cache::resize(ulong query_ca
free_cache();
query_cache_size= query_cache_size_arg;
::query_cache_size= init_cache();
+
+ if (::query_cache_size != query_cache_size_arg)
+ {
+ push_warning_printf(current_thd, MYSQL_ERROR::WARN_LEVEL_WARN,
+ ER_WARN_QC_RESIZE, ER(ER_WARN_QC_RESIZE),
+ query_cache_size_arg,
+ get_minimal_size_limit(),
+ ::query_cache_size);
+ }
+
STRUCT_UNLOCK(&structure_guard_mutex);
DBUG_RETURN(::query_cache_size);
}
@@ -1613,6 +1623,25 @@ void Query_cache::init()
DBUG_VOID_RETURN;
}
+
+/**
+ Return the lowest possible query cache size.
+*/
+
+ulong Query_cache::get_minimal_size_limit()
+{
+ ulong approx_additional_data_size= (sizeof(Query_cache) +
+ sizeof(gptr)*(def_query_hash_size+
+ def_table_hash_size));
+
+ ulong data_size= (min_allocation_unit << QUERY_CACHE_MEM_BIN_STEP_PWR2 <<
+ QUERY_CACHE_MEM_BIN_FIRST_STEP_PWR2) +
+ ALIGN_SIZE(1) - 1 +
+ (1 << QUERY_CACHE_MEM_BIN_STEP_PWR2) - 1 +
+ (1 << QUERY_CACHE_MEM_BIN_FIRST_STEP_PWR2) - 1;
+
+ return(data_size + approx_additional_data_size);
+}
ulong Query_cache::init_cache()
{
diff -Nrup a/sql/sql_cache.h b/sql/sql_cache.h
--- a/sql/sql_cache.h 2007-08-17 16:55:19 +02:00
+++ b/sql/sql_cache.h 2008-03-17 15:32:17 +01:00
@@ -245,6 +245,8 @@ private:
void free_query_internal(Query_cache_block *point);
+ ulong get_minimal_size_limit();
+
protected:
/*
The following mutex is locked when searching or changing global