1
0
mirror of https://github.com/postgres/postgres.git synced 2025-07-30 11:03:19 +03:00

Add shared_memory_type GUC.

Since 9.3 we have used anonymous shared mmap for our main shared memory
region, except in EXEC_BACKEND builds.  Provide a GUC so that users
can opt for System V shared memory once again, like in 9.2 and earlier.

A later patch proposes to add huge/large page support for AIX, which
requires System V shared memory and provided the motivation to revive
this possibility.  It may also be useful on some BSDs.

Author: Andres Freund (revived and documented by Thomas Munro)
Discussion: https://postgr.es/m/HE1PR0202MB28126DB4E0B6621CC6A1A91286D90%40HE1PR0202MB2812.eurprd02.prod.outlook.com
Discussion: https://postgr.es/m/2AE143D2-87D3-4AD1-AC78-CE2258230C05%40FreeBSD.org
This commit is contained in:
Thomas Munro
2019-02-03 09:55:39 +01:00
parent 0d1fe9f74e
commit f1bebef60e
7 changed files with 101 additions and 33 deletions

View File

@ -1694,6 +1694,31 @@ include_dir 'conf.d'
</listitem>
</varlistentry>
<varlistentry id="guc-shared-memory-type" xreflabel="shared_memory_type">
<term><varname>shared_memory_type</varname> (<type>enum</type>)
<indexterm>
<primary><varname>shared_memory_type</varname> configuration parameter</primary>
</indexterm>
</term>
<listitem>
<para>
Specifies the shared memory implementation that the server
should use for the main shared memory region that holds
<productname>PostgreSQL</productname>'s shared buffers and other
shared data. Possible values are <literal>mmap</literal> (for
anonymous shared memory allocated using <function>mmap</function>),
<literal>sysv</literal> (for System V shared memory allocated via
<function>shmget</function>) and <literal>windows</literal> (for Windows
shared memory). Not all values are supported on all platforms; the
first supported option is the default for that platform. The use of
the <literal>sysv</literal> option, which is not the default on any
platform, is generally discouraged because it typically requires
non-default kernel settings to allow for large allocations (see <xref
linkend="sysvipc"/>).
</para>
</listitem>
</varlistentry>
<varlistentry id="guc-dynamic-shared-memory-type" xreflabel="dynamic_shared_memory_type">
<term><varname>dynamic_shared_memory_type</varname> (<type>enum</type>)
<indexterm>

View File

@ -638,9 +638,12 @@ psql: could not connect to server: No such file or directory
</para>
<para>
Upon starting the server, <productname>PostgreSQL</productname> normally allocates
By default, <productname>PostgreSQL</productname> allocates
a very small amount of System V shared memory, as well as a much larger
amount of POSIX (<function>mmap</function>) shared memory.
amount of anonymous <function>mmap</function> shared memory.
Alternatively, a single large System V shared memory region can be used
(see <xref linkend="guc-shared-memory-type"/>).
In addition a significant number of semaphores, which can be either
System V or POSIX style, are created at server startup. Currently,
POSIX semaphores are used on Linux and FreeBSD systems while other
@ -752,8 +755,10 @@ psql: could not connect to server: No such file or directory
<productname>PostgreSQL</productname> requires a few bytes of System V shared memory
(typically 48 bytes, on 64-bit platforms) for each copy of the server.
On most modern operating systems, this amount can easily be allocated.
However, if you are running many copies of the server, or if other
applications are also using System V shared memory, it may be necessary to
However, if you are running many copies of the server or you explicitly
configure the server to use large amounts of System V shared memory (see
<xref linkend="guc-shared-memory-type"/> and <xref
linkend="guc-dynamic-shared-memory-type"/>), it may be necessary to
increase <varname>SHMALL</varname>, which is the total amount of System V shared
memory system-wide. Note that <varname>SHMALL</varname> is measured in pages
rather than bytes on many systems.
@ -879,7 +884,7 @@ kern.ipc.semmns=512
</para>
<para>
You might also want to configure your kernel to lock shared
You might also want to configure your kernel to lock System V shared
memory into RAM and prevent it from being paged out to swap.
This can be accomplished using the <command>sysctl</command>
setting <literal>kern.ipc.shm_use_phys</literal>.
@ -928,7 +933,7 @@ kern.ipc.semmns=512
</para>
<para>
You might also want to configure your kernel to lock shared
You might also want to configure your kernel to lock System V shared
memory into RAM and prevent it from being paged out to swap.
This can be accomplished using the <command>sysctl</command>
setting <literal>kern.ipc.shm_use_phys</literal>.