1
0
mirror of https://github.com/postgres/postgres.git synced 2025-07-12 21:01:52 +03:00

Auto-tune effective_cache size to be 4x shared buffers

This commit is contained in:
Bruce Momjian
2013-10-08 12:12:24 -04:00
parent d29a031926
commit ee1e5662d8
8 changed files with 75 additions and 11 deletions

View File

@ -87,6 +87,7 @@
#include "optimizer/planmain.h"
#include "optimizer/restrictinfo.h"
#include "parser/parsetree.h"
#include "utils/guc.h"
#include "utils/lsyscache.h"
#include "utils/selfuncs.h"
#include "utils/spccache.h"
@ -95,14 +96,13 @@
#define LOG2(x) (log(x) / 0.693147180559945)
double seq_page_cost = DEFAULT_SEQ_PAGE_COST;
double random_page_cost = DEFAULT_RANDOM_PAGE_COST;
double cpu_tuple_cost = DEFAULT_CPU_TUPLE_COST;
double cpu_index_tuple_cost = DEFAULT_CPU_INDEX_TUPLE_COST;
double cpu_operator_cost = DEFAULT_CPU_OPERATOR_COST;
int effective_cache_size = DEFAULT_EFFECTIVE_CACHE_SIZE;
int effective_cache_size = -1;
Cost disable_cost = 1.0e10;
@ -456,6 +456,52 @@ cost_index(IndexPath *path, PlannerInfo *root, double loop_count)
path->path.total_cost = startup_cost + run_cost;
}
void
set_default_effective_cache_size(void)
{
/*
* If the value of effective_cache_size is -1, use the preferred
* auto-tune value.
*/
if (effective_cache_size == -1)
{
char buf[32];
snprintf(buf, sizeof(buf), "%d", NBuffers * DEFAULT_EFFECTIVE_CACHE_SIZE_MULTI);
SetConfigOption("effective_cache_size", buf, PGC_POSTMASTER, PGC_S_OVERRIDE);
}
Assert(effective_cache_size > 0);
}
/*
* GUC check_hook for effective_cache_size
*/
bool
check_effective_cache_size(int *newval, void **extra, GucSource source)
{
/*
* -1 indicates a request for auto-tune.
*/
if (*newval == -1)
{
/*
* If we haven't yet changed the boot_val default of -1, just let it
* be. We'll fix it in index_pages_fetched
*/
if (effective_cache_size == -1)
return true;
/* Otherwise, substitute the auto-tune value */
*newval = NBuffers * DEFAULT_EFFECTIVE_CACHE_SIZE_MULTI;
}
/* set minimum? */
if (*newval < 1)
*newval = 1;
return true;
}
/*
* index_pages_fetched
* Estimate the number of pages actually fetched after accounting for