Commit e1b406ba authored by unknown's avatar unknown

Merge mysql.com:/usr/local/bk/mysql-5.0

into mysql.com:/home/pem/work/mysql-5.0

parents 3fe96322 4c09584b
......@@ -108,15 +108,15 @@ insert into t7 values (18,2,3,4,5,6);
insert into t7 values (19,2,3,4,5,6);
insert into t7 values (20,2,3,4,5,6);
insert into t7 values (21,2,3,4,5,6);
select @@plan_search_depth;
@@plan_search_depth
select @@optimizer_search_depth;
@@optimizer_search_depth
62
select @@heuristic;
@@heuristic
select @@optimizer_prune_level;
@@optimizer_prune_level
1
set plan_search_depth=63;
select @@plan_search_depth;
@@plan_search_depth
set optimizer_search_depth=63;
select @@optimizer_search_depth;
@@optimizer_search_depth
63
explain select t1.c11 from t1, t2, t3, t4, t5, t6, t7 where t1.c12 = t2.c21 and t2.c22 = t3.c31 and t3.c32 = t4.c41 and t4.c42 = t5.c51 and t5.c52 = t6.c61 and t6.c62 = t7.c71;
id select_type table type possible_keys key key_len ref rows Extra
......@@ -190,13 +190,13 @@ id select_type table type possible_keys key key_len ref rows Extra
show status like 'Last_query_cost';
Variable_name Value
Last_query_cost 794.838037
set heuristic=0;
select @@heuristic;
@@heuristic
set optimizer_prune_level=0;
select @@optimizer_prune_level;
@@optimizer_prune_level
0
set plan_search_depth=0;
select @@plan_search_depth;
@@plan_search_depth
set optimizer_search_depth=0;
select @@optimizer_search_depth;
@@optimizer_search_depth
0
explain select t1.c11 from t1, t2, t3, t4, t5, t6, t7 where t1.c12 = t2.c21 and t2.c22 = t3.c31 and t3.c32 = t4.c41 and t4.c42 = t5.c51 and t5.c52 = t6.c61 and t6.c62 = t7.c71;
id select_type table type possible_keys key key_len ref rows Extra
......@@ -270,9 +270,9 @@ id select_type table type possible_keys key key_len ref rows Extra
show status like 'Last_query_cost';
Variable_name Value
Last_query_cost 274.419727
set plan_search_depth=1;
select @@plan_search_depth;
@@plan_search_depth
set optimizer_search_depth=1;
select @@optimizer_search_depth;
@@optimizer_search_depth
1
explain select t1.c11 from t1, t2, t3, t4, t5, t6, t7 where t1.c12 = t2.c21 and t2.c22 = t3.c31 and t3.c32 = t4.c41 and t4.c42 = t5.c51 and t5.c52 = t6.c61 and t6.c62 = t7.c71;
id select_type table type possible_keys key key_len ref rows Extra
......@@ -346,9 +346,9 @@ id select_type table type possible_keys key key_len ref rows Extra
show status like 'Last_query_cost';
Variable_name Value
Last_query_cost 794.838037
set plan_search_depth=62;
select @@plan_search_depth;
@@plan_search_depth
set optimizer_search_depth=62;
select @@optimizer_search_depth;
@@optimizer_search_depth
62
explain select t1.c11 from t1, t2, t3, t4, t5, t6, t7 where t1.c12 = t2.c21 and t2.c22 = t3.c31 and t3.c32 = t4.c41 and t4.c42 = t5.c51 and t5.c52 = t6.c61 and t6.c62 = t7.c71;
id select_type table type possible_keys key key_len ref rows Extra
......@@ -422,13 +422,13 @@ id select_type table type possible_keys key key_len ref rows Extra
show status like 'Last_query_cost';
Variable_name Value
Last_query_cost 274.419727
set heuristic=1;
select @@heuristic;
@@heuristic
set optimizer_prune_level=1;
select @@optimizer_prune_level;
@@optimizer_prune_level
1
set plan_search_depth=0;
select @@plan_search_depth;
@@plan_search_depth
set optimizer_search_depth=0;
select @@optimizer_search_depth;
@@optimizer_search_depth
0
explain select t1.c11 from t1, t2, t3, t4, t5, t6, t7 where t1.c12 = t2.c21 and t2.c22 = t3.c31 and t3.c32 = t4.c41 and t4.c42 = t5.c51 and t5.c52 = t6.c61 and t6.c62 = t7.c71;
id select_type table type possible_keys key key_len ref rows Extra
......@@ -502,9 +502,9 @@ id select_type table type possible_keys key key_len ref rows Extra
show status like 'Last_query_cost';
Variable_name Value
Last_query_cost 794.838037
set plan_search_depth=1;
select @@plan_search_depth;
@@plan_search_depth
set optimizer_search_depth=1;
select @@optimizer_search_depth;
@@optimizer_search_depth
1
explain select t1.c11 from t1, t2, t3, t4, t5, t6, t7 where t1.c12 = t2.c21 and t2.c22 = t3.c31 and t3.c32 = t4.c41 and t4.c42 = t5.c51 and t5.c52 = t6.c61 and t6.c62 = t7.c71;
id select_type table type possible_keys key key_len ref rows Extra
......@@ -578,9 +578,9 @@ id select_type table type possible_keys key key_len ref rows Extra
show status like 'Last_query_cost';
Variable_name Value
Last_query_cost 794.838037
set plan_search_depth=62;
select @@plan_search_depth;
@@plan_search_depth
set optimizer_search_depth=62;
select @@optimizer_search_depth;
@@optimizer_search_depth
62
explain select t1.c11 from t1, t2, t3, t4, t5, t6, t7 where t1.c12 = t2.c21 and t2.c22 = t3.c31 and t3.c32 = t4.c41 and t4.c42 = t5.c51 and t5.c52 = t6.c61 and t6.c62 = t7.c71;
id select_type table type possible_keys key key_len ref rows Extra
......
......@@ -137,21 +137,21 @@ insert into t7 values (21,2,3,4,5,6);
# Check the default values for the optimizer paramters
select @@plan_search_depth;
select @@heuristic;
select @@optimizer_search_depth;
select @@optimizer_prune_level;
-- This value swithes back to the old implementation of 'find_best()'
-- set plan_search_depth=63; - old (independent of the heuristic)
-- set optimizer_search_depth=63; - old (independent of the optimizer_prune_level)
--
-- These are the values for the parameters that control the greedy optimizer
-- (total 6 combinations - 3 for plan_search_depth, 2 for heuristic):
-- (total 6 combinations - 3 for optimizer_search_depth, 2 for optimizer_prune_level):
--
-- set plan_search_depth=0; - automatic
-- set plan_search_depth=1; - min
-- set plan_search_depth=62; - max (default)
-- set optimizer_search_depth=0; - automatic
-- set optimizer_search_depth=1; - min
-- set optimizer_search_depth=62; - max (default)
--
-- set heuristic=0 - exhaustive;
-- set heuristic=1 - heuristic; -- default
-- set optimizer_prune_level=0 - exhaustive;
-- set optimizer_prune_level=1 - heuristic; -- default
#
......@@ -167,8 +167,8 @@ select @@heuristic;
# procedure 'find_best'. Notice that 'find_best' does not depend on the
# choice of heuristic.
set plan_search_depth=63;
select @@plan_search_depth;
set optimizer_search_depth=63;
select @@optimizer_search_depth;
-- 6-table join, chain
explain select t1.c11 from t1, t2, t3, t4, t5, t6, t7 where t1.c12 = t2.c21 and t2.c22 = t3.c31 and t3.c32 = t4.c41 and t4.c42 = t5.c51 and t5.c52 = t6.c61 and t6.c62 = t7.c71;
......@@ -189,11 +189,11 @@ show status like 'Last_query_cost';
# Test the new optimization procedures
set heuristic=0;
select @@heuristic;
set optimizer_prune_level=0;
select @@optimizer_prune_level;
set plan_search_depth=0;
select @@plan_search_depth;
set optimizer_search_depth=0;
select @@optimizer_search_depth;
-- 6-table join, chain
explain select t1.c11 from t1, t2, t3, t4, t5, t6, t7 where t1.c12 = t2.c21 and t2.c22 = t3.c31 and t3.c32 = t4.c41 and t4.c42 = t5.c51 and t5.c52 = t6.c61 and t6.c62 = t7.c71;
......@@ -211,8 +211,8 @@ show status like 'Last_query_cost';
explain select t1.c11 from t7, t6, t5, t4, t3, t2, t1 where t1.c11 = t2.c21 and t1.c12 = t3.c31 and t1.c13 = t4.c41 and t1.c14 = t5.c51 and t1.c15 = t6.c61 and t1.c16 = t7.c71 and t2.c22 = t3.c32 and t2.c23 = t4.c42 and t2.c24 = t5.c52 and t2.c25 = t6.c62 and t2.c26 = t7.c72 and t3.c33 = t4.c43 and t3.c34 = t5.c53 and t3.c35 = t6.c63 and t3.c36 = t7.c73 and t4.c42 = t5.c54 and t4.c43 = t6.c64 and t4.c44 = t7.c74 and t5.c52 = t6.c65 and t5.c53 = t7.c75 and t6.c62 = t7.c76;
show status like 'Last_query_cost';
set plan_search_depth=1;
select @@plan_search_depth;
set optimizer_search_depth=1;
select @@optimizer_search_depth;
-- 6-table join, chain
explain select t1.c11 from t1, t2, t3, t4, t5, t6, t7 where t1.c12 = t2.c21 and t2.c22 = t3.c31 and t3.c32 = t4.c41 and t4.c42 = t5.c51 and t5.c52 = t6.c61 and t6.c62 = t7.c71;
......@@ -230,8 +230,8 @@ show status like 'Last_query_cost';
explain select t1.c11 from t7, t6, t5, t4, t3, t2, t1 where t1.c11 = t2.c21 and t1.c12 = t3.c31 and t1.c13 = t4.c41 and t1.c14 = t5.c51 and t1.c15 = t6.c61 and t1.c16 = t7.c71 and t2.c22 = t3.c32 and t2.c23 = t4.c42 and t2.c24 = t5.c52 and t2.c25 = t6.c62 and t2.c26 = t7.c72 and t3.c33 = t4.c43 and t3.c34 = t5.c53 and t3.c35 = t6.c63 and t3.c36 = t7.c73 and t4.c42 = t5.c54 and t4.c43 = t6.c64 and t4.c44 = t7.c74 and t5.c52 = t6.c65 and t5.c53 = t7.c75 and t6.c62 = t7.c76;
show status like 'Last_query_cost';
set plan_search_depth=62;
select @@plan_search_depth;
set optimizer_search_depth=62;
select @@optimizer_search_depth;
-- 6-table join, chain
explain select t1.c11 from t1, t2, t3, t4, t5, t6, t7 where t1.c12 = t2.c21 and t2.c22 = t3.c31 and t3.c32 = t4.c41 and t4.c42 = t5.c51 and t5.c52 = t6.c61 and t6.c62 = t7.c71;
......@@ -250,11 +250,11 @@ explain select t1.c11 from t7, t6, t5, t4, t3, t2, t1 where t1.c11 = t2.c21 and
show status like 'Last_query_cost';
set heuristic=1;
select @@heuristic;
set optimizer_prune_level=1;
select @@optimizer_prune_level;
set plan_search_depth=0;
select @@plan_search_depth;
set optimizer_search_depth=0;
select @@optimizer_search_depth;
-- 6-table join, chain
explain select t1.c11 from t1, t2, t3, t4, t5, t6, t7 where t1.c12 = t2.c21 and t2.c22 = t3.c31 and t3.c32 = t4.c41 and t4.c42 = t5.c51 and t5.c52 = t6.c61 and t6.c62 = t7.c71;
......@@ -272,8 +272,8 @@ show status like 'Last_query_cost';
explain select t1.c11 from t7, t6, t5, t4, t3, t2, t1 where t1.c11 = t2.c21 and t1.c12 = t3.c31 and t1.c13 = t4.c41 and t1.c14 = t5.c51 and t1.c15 = t6.c61 and t1.c16 = t7.c71 and t2.c22 = t3.c32 and t2.c23 = t4.c42 and t2.c24 = t5.c52 and t2.c25 = t6.c62 and t2.c26 = t7.c72 and t3.c33 = t4.c43 and t3.c34 = t5.c53 and t3.c35 = t6.c63 and t3.c36 = t7.c73 and t4.c42 = t5.c54 and t4.c43 = t6.c64 and t4.c44 = t7.c74 and t5.c52 = t6.c65 and t5.c53 = t7.c75 and t6.c62 = t7.c76;
show status like 'Last_query_cost';
set plan_search_depth=1;
select @@plan_search_depth;
set optimizer_search_depth=1;
select @@optimizer_search_depth;
-- 6-table join, chain
explain select t1.c11 from t1, t2, t3, t4, t5, t6, t7 where t1.c12 = t2.c21 and t2.c22 = t3.c31 and t3.c32 = t4.c41 and t4.c42 = t5.c51 and t5.c52 = t6.c61 and t6.c62 = t7.c71;
......@@ -291,8 +291,8 @@ show status like 'Last_query_cost';
explain select t1.c11 from t7, t6, t5, t4, t3, t2, t1 where t1.c11 = t2.c21 and t1.c12 = t3.c31 and t1.c13 = t4.c41 and t1.c14 = t5.c51 and t1.c15 = t6.c61 and t1.c16 = t7.c71 and t2.c22 = t3.c32 and t2.c23 = t4.c42 and t2.c24 = t5.c52 and t2.c25 = t6.c62 and t2.c26 = t7.c72 and t3.c33 = t4.c43 and t3.c34 = t5.c53 and t3.c35 = t6.c63 and t3.c36 = t7.c73 and t4.c42 = t5.c54 and t4.c43 = t6.c64 and t4.c44 = t7.c74 and t5.c52 = t6.c65 and t5.c53 = t7.c75 and t6.c62 = t7.c76;
show status like 'Last_query_cost';
set plan_search_depth=62;
select @@plan_search_depth;
set optimizer_search_depth=62;
select @@optimizer_search_depth;
-- 6-table join, chain
explain select t1.c11 from t1, t2, t3, t4, t5, t6, t7 where t1.c12 = t2.c21 and t2.c22 = t3.c31 and t3.c32 = t4.c41 and t4.c42 = t5.c51 and t5.c52 = t6.c61 and t6.c62 = t7.c71;
......
......@@ -3777,8 +3777,8 @@ enum options_mysqld
OPT_TIME_FORMAT,
OPT_DATETIME_FORMAT,
OPT_LOG_QUERIES_NOT_USING_INDEXES,
OPT_PLAN_SEARCH_DEPTH,
OPT_HEURISTIC
OPT_OPTIMIZER_SEARCH_DEPTH,
OPT_OPTIMIZER_PRUNE_LEVEL
};
......@@ -4403,11 +4403,6 @@ log and this option does nothing anymore.",
"Use stopwords from this file instead of built-in list.",
(gptr*) &ft_stopword_file, (gptr*) &ft_stopword_file, 0, GET_STR,
REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
{"heuristic", OPT_HEURISTIC,
"Controls the heuristic(s) applied during query optimization to prune less-promising partial plans from the optimizer search space. Meaning: 0 - do not apply any heuristic, thus perform exhaustive search; 1 - prune plans based on rows and read time.",
(gptr*) &global_system_variables.heuristic,
(gptr*) &max_system_variables.heuristic,
0, GET_ULONG, OPT_ARG, 1, 0, 1, 0, 1, 0},
#ifdef HAVE_INNOBASE_DB
{"innodb_mirrored_log_groups", OPT_INNODB_MIRRORED_LOG_GROUPS,
"Number of identical copies of log groups we keep for the database. Currently this should be set to 1.",
......@@ -4648,10 +4643,15 @@ The minimum value for this variable is 4096.",
"If this is not 0, then mysqld will use this value to reserve file descriptors to use with setrlimit(). If this value is 0 then mysqld will reserve max_connections*5 or max_connections + table_cache*2 (whichever is larger) number of files.",
(gptr*) &open_files_limit, (gptr*) &open_files_limit, 0, GET_ULONG,
REQUIRED_ARG, 0, 0, OS_FILE_LIMIT, 0, 1, 0},
{"plan_search_depth", OPT_PLAN_SEARCH_DEPTH,
{"optimizer_prune_level", OPT_OPTIMIZER_PRUNE_LEVEL,
"Controls the heuristic(s) applied during query optimization to prune less-promising partial plans from the optimizer search space. Meaning: 0 - do not apply any heuristic, thus perform exhaustive search; 1 - prune plans based on number of retrieved rows.",
(gptr*) &global_system_variables.optimizer_prune_level,
(gptr*) &max_system_variables.optimizer_prune_level,
0, GET_ULONG, OPT_ARG, 1, 0, 1, 0, 1, 0},
{"optimizer_search_depth", OPT_OPTIMIZER_SEARCH_DEPTH,
"Maximum depth of search performed by the query optimizer. Values larger than the number of relations in a query result in better query plans, but take longer to compile a query. Smaller values than the number of tables in a relation result in faster optimization, but may produce very bad query plans. If set to 0, the system will automatically pick a reasonable value; if set to MAX_TABLES+2, the optimizer will switch to the original find_best (used for testing/comparison).",
(gptr*) &global_system_variables.plan_search_depth,
(gptr*) &max_system_variables.plan_search_depth,
(gptr*) &global_system_variables.optimizer_search_depth,
(gptr*) &max_system_variables.optimizer_search_depth,
0, GET_ULONG, OPT_ARG, MAX_TABLES+1, 0, MAX_TABLES+2, 0, 1, 0},
{"preload_buffer_size", OPT_PRELOAD_BUFFER_SIZE,
"The size of the buffer that is allocated when preloading indexes",
......
......@@ -50,27 +50,27 @@ write_escaped_string(IO_CACHE *file, LEX_STRING *val_s)
*/
switch(*ptr) {
case '\\': // escape character
if (my_b_write(file, "\\\\", 2))
if (my_b_append(file, "\\\\", 2))
return TRUE;
break;
case '\n': // parameter value delimiter
if (my_b_write(file, "\\n", 2))
if (my_b_append(file, "\\n", 2))
return TRUE;
break;
case '\0': // problem for some string processing utilites
if (my_b_write(file, "\\0", 2))
if (my_b_append(file, "\\0", 2))
return TRUE;
break;
case 26: // problem for windows utilites (Ctrl-Z)
if (my_b_write(file, "\\z", 2))
if (my_b_append(file, "\\z", 2))
return TRUE;
break;
case '\'': // list of string delimiter
if (my_b_write(file, "\\\'", 2))
if (my_b_append(file, "\\\'", 2))
return TRUE;
break;
default:
if (my_b_write(file, ptr, 1))
if (my_b_append(file, ptr, 1))
return TRUE;
}
}
......@@ -106,7 +106,7 @@ write_parameter(IO_CACHE *file, gptr base, File_option *parameter,
case FILE_OPTIONS_STRING:
{
LEX_STRING *val_s= (LEX_STRING *)(base + parameter->offset);
if (my_b_write(file, val_s->str, val_s->length))
if (my_b_append(file, val_s->str, val_s->length))
DBUG_RETURN(TRUE);
break;
}
......@@ -119,7 +119,7 @@ write_parameter(IO_CACHE *file, gptr base, File_option *parameter,
case FILE_OPTIONS_ULONGLONG:
{
num.set(*((ulonglong *)(base + parameter->offset)), &my_charset_bin);
if (my_b_write(file, num.ptr(), num.length()))
if (my_b_append(file, num.ptr(), num.length()))
DBUG_RETURN(TRUE);
break;
}
......@@ -128,7 +128,7 @@ write_parameter(IO_CACHE *file, gptr base, File_option *parameter,
ulonglong *val_i= (ulonglong *)(base + parameter->offset);
*old_version= (*val_i)++;
num.set(*val_i, &my_charset_bin);
if (my_b_write(file, num.ptr(), num.length()))
if (my_b_append(file, num.ptr(), num.length()))
DBUG_RETURN(TRUE);
break;
}
......@@ -141,7 +141,7 @@ write_parameter(IO_CACHE *file, gptr base, File_option *parameter,
get_date(val_s->str, GETDATE_DATE_TIME|GETDATE_GMT|GETDATE_FIXEDLENGTH,
tm);
val_s->length= PARSE_FILE_TIMESTAMPLENGTH;
if (my_b_write(file, val_s->str, PARSE_FILE_TIMESTAMPLENGTH))
if (my_b_append(file, val_s->str, PARSE_FILE_TIMESTAMPLENGTH))
DBUG_RETURN(TRUE);
break;
}
......@@ -155,10 +155,10 @@ write_parameter(IO_CACHE *file, gptr base, File_option *parameter,
{
num.set((ulonglong)str->length, &my_charset_bin);
// ',' after string to detect list continuation
if ((!first && my_b_write(file, " ", 1)) ||
my_b_write(file, "\'", 1) ||
my_b_write(file, str->str, str->length) ||
my_b_write(file, "\'", 1))
if ((!first && my_b_append(file, " ", 1)) ||
my_b_append(file, "\'", 1) ||
my_b_append(file, str->str, str->length) ||
my_b_append(file, "\'", 1))
{
DBUG_RETURN(TRUE);
}
......@@ -222,18 +222,18 @@ sql_create_definition_file(const LEX_STRING *dir, const LEX_STRING *file_name,
goto err_w_file;
// write header (file signature)
if (my_b_write(&file, "TYPE=", 5) ||
my_b_write(&file, type->str, type->length) ||
my_b_write(&file, "\n", 1))
if (my_b_append(&file, "TYPE=", 5) ||
my_b_append(&file, type->str, type->length) ||
my_b_append(&file, "\n", 1))
goto err_w_file;
// write parameters to temporary file
for (File_option *param= parameters; param->name.str; param++)
{
if (my_b_write(&file, param->name.str, param->name.length) ||
my_b_write(&file, "=", 1) ||
if (my_b_append(&file, param->name.str, param->name.length) ||
my_b_append(&file, "=", 1) ||
write_parameter(&file, base, param, &old_version) ||
my_b_write(&file, "\n", 1))
my_b_append(&file, "\n", 1))
goto err_w_cache;
}
......
......@@ -160,7 +160,6 @@ sys_var_str sys_ft_boolean_syntax("ft_boolean_syntax",
sys_update_ftb_syntax,
sys_default_ftb_syntax,
ft_boolean_syntax);
sys_var_thd_ulong sys_heuristic("heuristic", &SV::heuristic);
sys_var_str sys_init_connect("init_connect", 0,
sys_update_init_connect,
sys_default_init_connect,0);
......@@ -263,8 +262,10 @@ sys_var_thd_ulong sys_net_retry_count("net_retry_count",
0, fix_net_retry_count);
sys_var_thd_bool sys_new_mode("new", &SV::new_mode);
sys_var_thd_bool sys_old_passwords("old_passwords", &SV::old_passwords);
sys_var_thd_ulong sys_plan_search_depth("plan_search_depth",
&SV::plan_search_depth);
sys_var_thd_ulong sys_optimizer_prune_level("optimizer_prune_level",
&SV::optimizer_prune_level);
sys_var_thd_ulong sys_optimizer_search_depth("optimizer_search_depth",
&SV::optimizer_search_depth);
sys_var_thd_ulong sys_preload_buff_size("preload_buffer_size",
&SV::preload_buff_size);
sys_var_thd_ulong sys_read_buff_size("read_buffer_size",
......@@ -491,7 +492,6 @@ sys_var *sys_variables[]=
&sys_ft_boolean_syntax,
&sys_foreign_key_checks,
&sys_group_concat_max_len,
&sys_heuristic,
&sys_identity,
&sys_init_connect,
&sys_init_slave,
......@@ -540,7 +540,8 @@ sys_var *sys_variables[]=
&sys_net_write_timeout,
&sys_new_mode,
&sys_old_passwords,
&sys_plan_search_depth,
&sys_optimizer_prune_level,
&sys_optimizer_search_depth,
&sys_preload_buff_size,
&sys_pseudo_thread_id,
&sys_query_alloc_block_size,
......@@ -750,6 +751,10 @@ struct show_var_st init_vars[]= {
{sys_new_mode.name, (char*) &sys_new_mode, SHOW_SYS},
{sys_old_passwords.name, (char*) &sys_old_passwords, SHOW_SYS},
{"open_files_limit", (char*) &open_files_limit, SHOW_LONG},
{sys_optimizer_prune_level.name, (char*) &sys_optimizer_prune_level,
SHOW_SYS},
{sys_optimizer_search_depth.name,(char*) &sys_optimizer_search_depth,
SHOW_SYS},
{"pid_file", (char*) pidfile_name, SHOW_CHAR},
{"port", (char*) &mysqld_port, SHOW_INT},
{sys_preload_buff_size.name, (char*) &sys_preload_buff_size, SHOW_SYS},
......@@ -817,8 +822,6 @@ struct show_var_st init_vars[]= {
{"version_compile_machine", (char*) MACHINE_TYPE, SHOW_CHAR},
{sys_os.name, (char*) &sys_os, SHOW_SYS},
{sys_net_wait_timeout.name, (char*) &sys_net_wait_timeout, SHOW_SYS},
{sys_heuristic.name, (char*) &sys_heuristic, SHOW_SYS},
{sys_plan_search_depth.name,(char*) &sys_plan_search_depth, SHOW_SYS},
{NullS, NullS, SHOW_LONG}
};
......
......@@ -384,6 +384,8 @@ struct system_variables
ulong net_retry_count;
ulong net_wait_timeout;
ulong net_write_timeout;
ulong optimizer_prune_level;
ulong optimizer_search_depth;
ulong preload_buff_size;
ulong query_cache_type;
ulong read_buff_size;
......@@ -392,8 +394,6 @@ struct system_variables
ulong table_type;
ulong tmp_table_size;
ulong tx_isolation;
ulong heuristic;
ulong plan_search_depth;
/* Determines which non-standard SQL behaviour should be enabled */
ulong sql_mode;
ulong default_week_format;
......
......@@ -55,12 +55,12 @@ static void best_access_path(JOIN *join, JOIN_TAB *s, THD *thd,
double record_count, double read_time);
static void optimize_straight_join(JOIN *join, table_map join_tables);
static void greedy_search(JOIN *join, table_map remaining_tables,
uint depth, uint heuristic);
uint depth, uint prune_level);
static void best_extension_by_limited_search(JOIN *join,
table_map remaining_tables,
uint idx, double record_count,
double read_time, uint depth,
uint heuristic);
uint prune_level);
static uint determine_search_depth(JOIN* join);
static int join_tab_cmp(const void* ptr1, const void* ptr2);
/*
......@@ -3063,8 +3063,8 @@ best_access_path(JOIN *join,
static void
choose_plan(JOIN *join, table_map join_tables)
{
uint search_depth= join->thd->variables.plan_search_depth;
uint heuristic= join->thd->variables.heuristic;
uint search_depth= join->thd->variables.optimizer_search_depth;
uint prune_level= join->thd->variables.optimizer_prune_level;
DBUG_ENTER("choose_plan");
......@@ -3094,7 +3094,7 @@ choose_plan(JOIN *join, table_map join_tables)
if (search_depth == 0)
/* Automatically determine a reasonable value for 'search_depth' */
search_depth= determine_search_depth(join);
greedy_search(join, join_tables, search_depth, heuristic);
greedy_search(join, join_tables, search_depth, prune_level);
}
}
......@@ -3245,7 +3245,7 @@ optimize_straight_join(JOIN *join, table_map join_tables)
for the query
remaining_tables set of tables not included into the partial plan yet
search_depth controlls the exhaustiveness of the search
heuristic the pruning heuristics that should be applied during
prune_level the pruning heuristics that should be applied during
search
DESCRIPTION
......@@ -3315,7 +3315,7 @@ static void
greedy_search(JOIN *join,
table_map remaining_tables,
uint search_depth,
uint heuristic)
uint prune_level)
{
double record_count= 1.0;
double read_time= 0.0;
......@@ -3334,7 +3334,7 @@ greedy_search(JOIN *join,
/* Find the extension of the current QEP with the lowest cost */
join->best_read= DBL_MAX;
best_extension_by_limited_search(join, remaining_tables, idx, record_count,
read_time, search_depth, heuristic);
read_time, search_depth, prune_level);
if (rem_size <= search_depth)
{
......@@ -3398,7 +3398,7 @@ greedy_search(JOIN *join,
read_time the cost of the best partial plan
search_depth maximum depth of the recursion and thus size of the found
optimal plan (0 < search_depth <= join->tables+1).
heuristic pruning heuristics that should be applied during optimization
prune_level pruning heuristics that should be applied during optimization
(values: 0 = EXHAUSTIVE, 1 = PRUNE_BY_TIME_OR_ROWS)
DESCRIPTION
......@@ -3482,7 +3482,7 @@ greedy_search(JOIN *join,
When 'best_extension_by_limited_search' is called for the first time,
'join->best_read' must be set to the largest possible value (e.g. DBL_MAX).
The actual implementation provides a way to optionally use pruning
heuristics (controlled by the parameter 'heuristic') to reduce the search
heuristic (controlled by the parameter 'prune_level') to reduce the search
space by skipping some partial plans.
The parameter 'search_depth' provides control over the recursion
depth, and thus the size of the resulting optimal plan.
......@@ -3498,7 +3498,7 @@ best_extension_by_limited_search(JOIN *join,
double record_count,
double read_time,
uint search_depth,
uint heuristic)
uint prune_level)
{
THD *thd= join->thd;
if (thd->killed) // Abort
......@@ -3543,7 +3543,7 @@ best_extension_by_limited_search(JOIN *join,
Prune some less promising partial plans. This heuristic may miss
the optimal QEPs, thus it results in a non-exhaustive search.
*/
if (heuristic == 1)
if (prune_level == 1)
{
if (best_record_count > current_record_count ||
best_read_time > current_read_time ||
......@@ -3563,7 +3563,7 @@ best_extension_by_limited_search(JOIN *join,
else
{
DBUG_EXECUTE("opt", print_plan(join, read_time, record_count, idx,
"prune_by_heuristic"););
"pruned_by_heuristic"););
continue;
}
}
......@@ -3577,7 +3577,7 @@ best_extension_by_limited_search(JOIN *join,
current_record_count,
current_read_time,
search_depth - 1,
heuristic);
prune_level);
if (thd->killed)
DBUG_VOID_RETURN;
swap(JOIN_TAB*, join->best_ref[idx], *pos);
......
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