Introduce GUC shared_memory_size

This runtime-computed GUC shows the size of the server's main shared
memory area, taking into account the amount of shared memory allocated
by extensions as this is calculated after processing
shared_preload_libraries.

Author: Nathan Bossart
Discussion: https://postgr.es/m/F2772387-CE0F-46BF-B5F1-CC55516EB885@amazon.com
This commit is contained in:
Michael Paquier 2021-09-08 12:02:30 +09:00
parent fd0625c7a9
commit bd1788051b
5 changed files with 56 additions and 0 deletions

View File

@ -10275,6 +10275,20 @@ dynamic_library_path = 'C:\tools\postgresql;H:\my_project\lib;$libdir'
</listitem>
</varlistentry>
<varlistentry id="guc-shared-memory-size" xreflabel="shared_memory_size">
<term><varname>shared_memory_size</varname> (<type>integer</type>)
<indexterm>
<primary><varname>shared_memory_size</varname> configuration parameter</primary>
</indexterm>
</term>
<listitem>
<para>
Reports the size of the main shared memory area, rounded up to the
nearest megabyte.
</para>
</listitem>
</varlistentry>
<varlistentry id="guc-ssl-library" xreflabel="ssl_library">
<term><varname>ssl_library</varname> (<type>string</type>)
<indexterm>

View File

@ -1026,6 +1026,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.
*/

View File

@ -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);
}

View File

@ -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;
@ -2337,6 +2338,17 @@ static struct config_int ConfigureNamesInt[] =
NULL, NULL, NULL
},
{
{"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."),

View File

@ -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 */