diff --git a/doc/src/sgml/config.sgml b/doc/src/sgml/config.sgml index 5b913f00c1..e307bb4e8e 100644 --- a/doc/src/sgml/config.sgml +++ b/doc/src/sgml/config.sgml @@ -1662,9 +1662,9 @@ include_dir 'conf.d' should use. Possible values are posix (for POSIX shared memory allocated using shm_open), sysv (for System V shared memory allocated via shmget), - windows (for Windows shared memory), mmap - (to simulate shared memory using memory-mapped files stored in the - data directory), and none (to disable this feature). + windows (for Windows shared memory), + and mmap (to simulate shared memory using + memory-mapped files stored in the data directory). Not all values are supported on all platforms; the first supported option is the default for that platform. The use of the mmap option, which is not the default on any platform, diff --git a/doc/src/sgml/parallel.sgml b/doc/src/sgml/parallel.sgml index dd7834a763..e9a015ecd3 100644 --- a/doc/src/sgml/parallel.sgml +++ b/doc/src/sgml/parallel.sgml @@ -124,14 +124,6 @@ EXPLAIN SELECT * FROM pgbench_accounts WHERE filler LIKE '%x%'; configured via max_parallel_workers_per_gather. - - - - must be set to a - value other than none. Parallel query requires dynamic - shared memory in order to pass data between cooperating processes. - - diff --git a/src/backend/access/transam/parallel.c b/src/backend/access/transam/parallel.c index 1d631b7275..4e32cfff50 100644 --- a/src/backend/access/transam/parallel.c +++ b/src/backend/access/transam/parallel.c @@ -161,13 +161,6 @@ CreateParallelContext(const char *library_name, const char *function_name, /* Number of workers should be non-negative. */ Assert(nworkers >= 0); - /* - * If dynamic shared memory is not available, we won't be able to use - * background workers. - */ - if (dynamic_shared_memory_type == DSM_IMPL_NONE) - nworkers = 0; - /* * If we are running under serializable isolation, we can't use parallel * workers, at least not until somebody enhances that mechanism to be diff --git a/src/backend/optimizer/plan/planner.c b/src/backend/optimizer/plan/planner.c index fd45c9767d..eeebf775a4 100644 --- a/src/backend/optimizer/plan/planner.c +++ b/src/backend/optimizer/plan/planner.c @@ -335,7 +335,6 @@ standard_planner(Query *parse, int cursorOptions, ParamListInfo boundParams) */ if ((cursorOptions & CURSOR_OPT_PARALLEL_OK) != 0 && IsUnderPostmaster && - dynamic_shared_memory_type != DSM_IMPL_NONE && parse->commandType == CMD_SELECT && !parse->hasModifyingCTE && max_parallel_workers_per_gather > 0 && @@ -6050,8 +6049,7 @@ plan_create_index_workers(Oid tableOid, Oid indexOid) double allvisfrac; /* Return immediately when parallelism disabled */ - if (dynamic_shared_memory_type == DSM_IMPL_NONE || - max_parallel_maintenance_workers == 0) + if (max_parallel_maintenance_workers == 0) return 0; /* Set up largely-dummy planner state */ diff --git a/src/backend/storage/ipc/dsm.c b/src/backend/storage/ipc/dsm.c index f1f75b73f5..9629f22f7a 100644 --- a/src/backend/storage/ipc/dsm.c +++ b/src/backend/storage/ipc/dsm.c @@ -150,10 +150,6 @@ dsm_postmaster_startup(PGShmemHeader *shim) Assert(!IsUnderPostmaster); - /* If dynamic shared memory is disabled, there's nothing to do. */ - if (dynamic_shared_memory_type == DSM_IMPL_NONE) - return; - /* * If we're using the mmap implementations, clean up any leftovers. * Cleanup isn't needed on Windows, and happens earlier in startup for @@ -219,10 +215,6 @@ dsm_cleanup_using_control_segment(dsm_handle old_control_handle) uint32 i; dsm_control_header *old_control; - /* If dynamic shared memory is disabled, there's nothing to do. */ - if (dynamic_shared_memory_type == DSM_IMPL_NONE) - return; - /* * Try to attach the segment. If this fails, it probably just means that * the operating system has been rebooted and the segment no longer @@ -391,13 +383,6 @@ dsm_postmaster_shutdown(int code, Datum arg) static void dsm_backend_startup(void) { - /* If dynamic shared memory is disabled, reject this. */ - if (dynamic_shared_memory_type == DSM_IMPL_NONE) - ereport(ERROR, - (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE), - errmsg("dynamic shared memory is disabled"), - errhint("Set dynamic_shared_memory_type to a value other than \"none\"."))); - #ifdef EXEC_BACKEND { void *control_address = NULL; diff --git a/src/backend/storage/ipc/dsm_impl.c b/src/backend/storage/ipc/dsm_impl.c index c6382ec031..77e1bab54b 100644 --- a/src/backend/storage/ipc/dsm_impl.c +++ b/src/backend/storage/ipc/dsm_impl.c @@ -106,7 +106,6 @@ const struct config_enum_entry dynamic_shared_memory_options[] = { #ifdef USE_DSM_MMAP {"mmap", DSM_IMPL_MMAP, false}, #endif - {"none", DSM_IMPL_NONE, false}, {NULL, 0, false} }; @@ -210,8 +209,6 @@ dsm_impl_can_resize(void) { switch (dynamic_shared_memory_type) { - case DSM_IMPL_NONE: - return false; case DSM_IMPL_POSIX: return true; case DSM_IMPL_SYSV: diff --git a/src/backend/utils/misc/postgresql.conf.sample b/src/backend/utils/misc/postgresql.conf.sample index 9e39baf466..657c3f81f8 100644 --- a/src/backend/utils/misc/postgresql.conf.sample +++ b/src/backend/utils/misc/postgresql.conf.sample @@ -133,7 +133,6 @@ # sysv # windows # mmap - # use none to disable dynamic shared memory # (change requires restart) # - Disk - diff --git a/src/bin/initdb/initdb.c b/src/bin/initdb/initdb.c index ae22e7d9fb..3f203c6ca6 100644 --- a/src/bin/initdb/initdb.c +++ b/src/bin/initdb/initdb.c @@ -984,6 +984,15 @@ test_config_settings(void) ok_buffers = 0; + /* + * Need to determine working DSM implementation first so that subsequent + * tests don't fail because DSM setting doesn't work. + */ + printf(_("selecting dynamic shared memory implementation ... ")); + fflush(stdout); + dynamic_shared_memory_type = choose_dsm_implementation(); + printf("%s\n", dynamic_shared_memory_type); + printf(_("selecting default max_connections ... ")); fflush(stdout); @@ -996,10 +1005,11 @@ test_config_settings(void) "\"%s\" --boot -x0 %s " "-c max_connections=%d " "-c shared_buffers=%d " - "-c dynamic_shared_memory_type=none " + "-c dynamic_shared_memory_type=%s " "< \"%s\" > \"%s\" 2>&1", backend_exec, boot_options, test_conns, test_buffs, + dynamic_shared_memory_type, DEVNULL, DEVNULL); status = system(cmd); if (status == 0) @@ -1031,10 +1041,11 @@ test_config_settings(void) "\"%s\" --boot -x0 %s " "-c max_connections=%d " "-c shared_buffers=%d " - "-c dynamic_shared_memory_type=none " + "-c dynamic_shared_memory_type=%s " "< \"%s\" > \"%s\" 2>&1", backend_exec, boot_options, n_connections, test_buffs, + dynamic_shared_memory_type, DEVNULL, DEVNULL); status = system(cmd); if (status == 0) @@ -1046,11 +1057,6 @@ test_config_settings(void) printf("%dMB\n", (n_buffers * (BLCKSZ / 1024)) / 1024); else printf("%dkB\n", n_buffers * (BLCKSZ / 1024)); - - printf(_("selecting dynamic shared memory implementation ... ")); - fflush(stdout); - dynamic_shared_memory_type = choose_dsm_implementation(); - printf("%s\n", dynamic_shared_memory_type); } /* diff --git a/src/include/storage/dsm_impl.h b/src/include/storage/dsm_impl.h index 0e5730f7c5..e7acdff355 100644 --- a/src/include/storage/dsm_impl.h +++ b/src/include/storage/dsm_impl.h @@ -14,7 +14,6 @@ #define DSM_IMPL_H /* Dynamic shared memory implementations. */ -#define DSM_IMPL_NONE 0 #define DSM_IMPL_POSIX 1 #define DSM_IMPL_SYSV 2 #define DSM_IMPL_WINDOWS 3