mirror of
https://github.com/postgres/postgres.git
synced 2025-11-12 05:01:15 +03:00
Repair error apparently introduced in the initial coding of GUC: the
default value for geqo_effort is supposed to be 40, not 1. The actual 'genetic' component of the GEQO algorithm has been practically disabled since 7.1 because of this mistake. Improve documentation while at it.
This commit is contained in:
@@ -7,7 +7,7 @@
|
||||
* Portions Copyright (c) 1996-2003, PostgreSQL Global Development Group
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* $PostgreSQL: pgsql/src/backend/optimizer/geqo/geqo_main.c,v 1.41 2003/11/29 19:51:50 pgsql Exp $
|
||||
* $PostgreSQL: pgsql/src/backend/optimizer/geqo/geqo_main.c,v 1.42 2004/01/21 23:33:34 tgl Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -38,13 +38,13 @@
|
||||
* Configuration options
|
||||
*/
|
||||
int Geqo_pool_size;
|
||||
int Geqo_effort;
|
||||
int Geqo_generations;
|
||||
int Geqo_effort;
|
||||
double Geqo_selection_bias;
|
||||
|
||||
|
||||
static int gimme_pool_size(int nr_rel);
|
||||
static int gimme_number_generations(int pool_size, int effort);
|
||||
static int gimme_number_generations(int pool_size);
|
||||
|
||||
/* define edge recombination crossover [ERX] per default */
|
||||
#if !defined(ERX) && \
|
||||
@@ -92,7 +92,7 @@ geqo(Query *root, int number_of_rels, List *initial_rels)
|
||||
|
||||
/* set GA parameters */
|
||||
pool_size = gimme_pool_size(number_of_rels);
|
||||
number_generations = gimme_number_generations(pool_size, Geqo_effort);
|
||||
number_generations = gimme_number_generations(pool_size);
|
||||
status_interval = 10;
|
||||
|
||||
/* allocate genetic pool memory */
|
||||
@@ -284,7 +284,7 @@ gimme_pool_size(int nr_rel)
|
||||
{
|
||||
double size;
|
||||
|
||||
if (Geqo_pool_size != 0)
|
||||
if (Geqo_pool_size > 0)
|
||||
return Geqo_pool_size;
|
||||
|
||||
size = pow(2.0, nr_rel + 1.0);
|
||||
@@ -305,10 +305,20 @@ gimme_pool_size(int nr_rel)
|
||||
* = Effort * Log2(PoolSize)
|
||||
*/
|
||||
static int
|
||||
gimme_number_generations(int pool_size, int effort)
|
||||
gimme_number_generations(int pool_size)
|
||||
{
|
||||
if (Geqo_generations <= 0)
|
||||
return effort * (int) ceil(log((double) pool_size) / log(2.0));
|
||||
else
|
||||
double gens;
|
||||
|
||||
if (Geqo_generations > 0)
|
||||
return Geqo_generations;
|
||||
|
||||
gens = Geqo_effort * log((double) pool_size) / log(2.0);
|
||||
|
||||
/* bound it to a sane range */
|
||||
if (gens <= 0)
|
||||
gens = 1;
|
||||
else if (gens > 10000)
|
||||
gens = 10000;
|
||||
|
||||
return (int) ceil(gens);
|
||||
}
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
* Written by Peter Eisentraut <peter_e@gmx.net>.
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $PostgreSQL: pgsql/src/backend/utils/misc/guc.c,v 1.177 2004/01/19 19:04:40 tgl Exp $
|
||||
* $PostgreSQL: pgsql/src/backend/utils/misc/guc.c,v 1.178 2004/01/21 23:33:34 tgl Exp $
|
||||
*
|
||||
*--------------------------------------------------------------------
|
||||
*/
|
||||
@@ -931,23 +931,23 @@ static struct config_int ConfigureNamesInt[] =
|
||||
&Geqo_pool_size,
|
||||
DEFAULT_GEQO_POOL_SIZE, 0, MAX_GEQO_POOL_SIZE, NULL, NULL
|
||||
},
|
||||
{
|
||||
{"geqo_effort", PGC_USERSET, QUERY_TUNING_GEQO,
|
||||
gettext_noop("GEQO: effort is used to calculate a default for generations."),
|
||||
NULL
|
||||
},
|
||||
&Geqo_effort,
|
||||
1, 1, INT_MAX, NULL, NULL
|
||||
},
|
||||
{
|
||||
{"geqo_generations", PGC_USERSET, QUERY_TUNING_GEQO,
|
||||
gettext_noop("GEQO: number of iterations in the algorithm."),
|
||||
gettext_noop("The number must be a positive integer. If 0 is "
|
||||
gettext_noop("GEQO: number of iterations of the algorithm."),
|
||||
gettext_noop("The value must be a positive integer. If 0 is "
|
||||
"specified then effort * log2(poolsize) is used.")
|
||||
},
|
||||
&Geqo_generations,
|
||||
0, 0, INT_MAX, NULL, NULL
|
||||
},
|
||||
{
|
||||
{"geqo_effort", PGC_USERSET, QUERY_TUNING_GEQO,
|
||||
gettext_noop("GEQO: effort is used to set the default for generations."),
|
||||
NULL
|
||||
},
|
||||
&Geqo_effort,
|
||||
DEFAULT_GEQO_EFFORT, MIN_GEQO_EFFORT, MAX_GEQO_EFFORT, NULL, NULL
|
||||
},
|
||||
|
||||
{
|
||||
{"deadlock_timeout", PGC_SIGHUP, LOCK_MANAGEMENT,
|
||||
|
||||
@@ -123,10 +123,10 @@
|
||||
|
||||
#geqo = true
|
||||
#geqo_threshold = 11
|
||||
#geqo_effort = 1
|
||||
#geqo_generations = 0
|
||||
#geqo_pool_size = 0 # default based on tables in statement,
|
||||
# range 128-1024
|
||||
#geqo_generations = 0 # use default: effort * log2(pool_size)
|
||||
#geqo_effort = 40 # range 1-100
|
||||
#geqo_selection_bias = 2.0 # range 1.5-2.0
|
||||
|
||||
# - Other Planner Options -
|
||||
|
||||
Reference in New Issue
Block a user