diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/backend/postmaster/postmaster.c | 7 | ||||
-rw-r--r-- | src/backend/storage/ipc/ipci.c | 22 | ||||
-rw-r--r-- | src/backend/utils/misc/guc.c | 12 | ||||
-rw-r--r-- | src/include/storage/ipc.h | 1 |
4 files changed, 42 insertions, 0 deletions
diff --git a/src/backend/postmaster/postmaster.c b/src/backend/postmaster/postmaster.c index 63043ed8d1f..b2fe420c3cf 100644 --- a/src/backend/postmaster/postmaster.c +++ b/src/backend/postmaster/postmaster.c @@ -1027,6 +1027,13 @@ PostmasterMain(int argc, char *argv[]) InitializeMaxBackends(); /* + * Now that loadable modules have had their chance to request additional + * shared memory, determine the value of any runtime-computed GUCs that + * depend on the amount of shared memory required. + */ + InitializeShmemGUCs(); + + /* * Set up shared memory and semaphores. */ reset_shared(); diff --git a/src/backend/storage/ipc/ipci.c b/src/backend/storage/ipc/ipci.c index 64bc16fa848..1a408ad77e5 100644 --- a/src/backend/storage/ipc/ipci.c +++ b/src/backend/storage/ipc/ipci.c @@ -313,3 +313,25 @@ CreateSharedMemoryAndSemaphores(void) if (shmem_startup_hook) shmem_startup_hook(); } + +/* + * InitializeShmemGUCs + * + * This function initializes runtime-computed GUCs related to the amount of + * shared memory required for the current configuration. + */ +void +InitializeShmemGUCs(void) +{ + char buf[64]; + Size size_b; + Size size_mb; + + /* + * Calculate the shared memory size and round up to the nearest megabyte. + */ + size_b = CalculateShmemSize(NULL); + size_mb = add_size(size_b, (1024 * 1024) - 1) / (1024 * 1024); + sprintf(buf, "%lu", size_mb); + SetConfigOption("shared_memory_size", buf, PGC_INTERNAL, PGC_S_OVERRIDE); +} diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c index 467b0fd6fe7..c339acf0670 100644 --- a/src/backend/utils/misc/guc.c +++ b/src/backend/utils/misc/guc.c @@ -664,6 +664,7 @@ static int max_index_keys; static int max_identifier_length; static int block_size; static int segment_size; +static int shared_memory_size_mb; static int wal_block_size; static bool data_checksums; static bool integer_datetimes; @@ -2338,6 +2339,17 @@ static struct config_int ConfigureNamesInt[] = }, { + {"shared_memory_size", PGC_INTERNAL, RESOURCES_MEM, + gettext_noop("Shows the size of the server's main shared memory area (rounded up to the nearest MB)."), + NULL, + GUC_NOT_IN_SAMPLE | GUC_DISALLOW_IN_FILE | GUC_UNIT_MB + }, + &shared_memory_size_mb, + 0, 0, INT_MAX, + NULL, NULL, NULL + }, + + { {"temp_buffers", PGC_USERSET, RESOURCES_MEM, gettext_noop("Sets the maximum number of temporary buffers used by each session."), NULL, diff --git a/src/include/storage/ipc.h b/src/include/storage/ipc.h index 80e191d407d..7a1ebc8559c 100644 --- a/src/include/storage/ipc.h +++ b/src/include/storage/ipc.h @@ -79,5 +79,6 @@ extern PGDLLIMPORT shmem_startup_hook_type shmem_startup_hook; extern Size CalculateShmemSize(int *num_semaphores); extern void CreateSharedMemoryAndSemaphores(void); +extern void InitializeShmemGUCs(void); #endif /* IPC_H */ |