mirror of
https://github.com/postgres/postgres.git
synced 2025-07-11 10:01:57 +03:00
Introduce a maintenance_io_concurrency setting.
Introduce a GUC and a tablespace option to control I/O prefetching, much
like effective_io_concurrency, but for work that is done on behalf of
many client sessions.
Use the new setting in heapam.c instead of the hard-coded formula
effective_io_concurrency + 10 introduced by commit 558a9165e0
. Go with
a default value of 10 for now, because it's a round number pretty close
to the value used for that existing case.
Discussion: https://postgr.es/m/CA%2BhUKGJUw08dPs_3EUcdO6M90GnjofPYrWp4YSLaBkgYwS-AqA%40mail.gmail.com
This commit is contained in:
@ -196,6 +196,7 @@ static bool check_autovacuum_max_workers(int *newval, void **extra, GucSource so
|
||||
static bool check_max_wal_senders(int *newval, void **extra, GucSource source);
|
||||
static bool check_autovacuum_work_mem(int *newval, void **extra, GucSource source);
|
||||
static bool check_effective_io_concurrency(int *newval, void **extra, GucSource source);
|
||||
static bool check_maintenance_io_concurrency(int *newval, void **extra, GucSource source);
|
||||
static void assign_pgstat_temp_directory(const char *newval, void *extra);
|
||||
static bool check_application_name(char **newval, void **extra, GucSource source);
|
||||
static void assign_application_name(const char *newval, void *extra);
|
||||
@ -2884,6 +2885,24 @@ static struct config_int ConfigureNamesInt[] =
|
||||
check_effective_io_concurrency, NULL, NULL
|
||||
},
|
||||
|
||||
{
|
||||
{"maintenance_io_concurrency",
|
||||
PGC_USERSET,
|
||||
RESOURCES_ASYNCHRONOUS,
|
||||
gettext_noop("A variant of effective_io_concurrency that is used for maintenance work."),
|
||||
NULL,
|
||||
GUC_EXPLAIN
|
||||
},
|
||||
&maintenance_io_concurrency,
|
||||
#ifdef USE_PREFETCH
|
||||
10,
|
||||
#else
|
||||
0,
|
||||
#endif
|
||||
0, MAX_IO_CONCURRENCY,
|
||||
check_maintenance_io_concurrency, NULL, NULL
|
||||
},
|
||||
|
||||
{
|
||||
{"backend_flush_after", PGC_USERSET, RESOURCES_ASYNCHRONOUS,
|
||||
gettext_noop("Number of pages after which previously performed writes are flushed to disk."),
|
||||
@ -11466,6 +11485,19 @@ check_effective_io_concurrency(int *newval, void **extra, GucSource source)
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool
|
||||
check_maintenance_io_concurrency(int *newval, void **extra, GucSource source)
|
||||
{
|
||||
#ifndef USE_PREFETCH
|
||||
if (*newval != 0)
|
||||
{
|
||||
GUC_check_errdetail("maintenance_io_concurrency must be set to 0 on platforms that lack posix_fadvise().");
|
||||
return false;
|
||||
}
|
||||
#endif /* USE_PREFETCH */
|
||||
return true;
|
||||
}
|
||||
|
||||
static void
|
||||
assign_pgstat_temp_directory(const char *newval, void *extra)
|
||||
{
|
||||
|
Reference in New Issue
Block a user