diff options
-rw-r--r-- | doc/src/sgml/runtime.sgml | 24 | ||||
-rw-r--r-- | src/backend/port/sysv_sema.c | 8 | ||||
-rw-r--r-- | src/bin/initdb/initdb.c | 9 |
3 files changed, 17 insertions, 24 deletions
diff --git a/doc/src/sgml/runtime.sgml b/doc/src/sgml/runtime.sgml index 3a6d308ae35..0c60bafac63 100644 --- a/doc/src/sgml/runtime.sgml +++ b/doc/src/sgml/runtime.sgml @@ -782,19 +782,19 @@ psql: error: connection to server on socket "/tmp/.s.PGSQL.5432" failed: No such <row> <entry><varname>SEMMNI</varname></entry> <entry>Maximum number of semaphore identifiers (i.e., sets)</entry> - <entry>at least <literal>ceil(num_os_semaphores / 19)</literal> plus room for other applications</entry> + <entry>at least <literal>ceil(num_os_semaphores / 16)</literal> plus room for other applications</entry> </row> <row> <entry><varname>SEMMNS</varname></entry> <entry>Maximum number of semaphores system-wide</entry> - <entry><literal>ceil(num_os_semaphores / 19) * 20</literal> plus room for other applications</entry> + <entry><literal>ceil(num_os_semaphores / 16) * 17</literal> plus room for other applications</entry> </row> <row> <entry><varname>SEMMSL</varname></entry> <entry>Maximum number of semaphores per set</entry> - <entry>at least 20</entry> + <entry>at least 17</entry> </row> <row> @@ -841,7 +841,7 @@ psql: error: connection to server on socket "/tmp/.s.PGSQL.5432" failed: No such (<xref linkend="guc-max-connections"/>), allowed autovacuum worker process (<xref linkend="guc-autovacuum-worker-slots"/>), allowed WAL sender process (<xref linkend="guc-max-wal-senders"/>), allowed background - process (<xref linkend="guc-max-worker-processes"/>), etc., in sets of 19. + process (<xref linkend="guc-max-worker-processes"/>), etc., in sets of 16. The runtime-computed parameter <xref linkend="guc-num-os-semaphores"/> reports the number of semaphores required. This parameter can be viewed before starting the server with a <command>postgres</command> command like: @@ -851,17 +851,17 @@ $ <userinput>postgres -D $PGDATA -C num_os_semaphores</userinput> </para> <para> - Each set of 19 semaphores will - also contain a 20th semaphore which contains a <quote>magic + Each set of 16 semaphores will + also contain a 17th semaphore which contains a <quote>magic number</quote>, to detect collision with semaphore sets used by other applications. The maximum number of semaphores in the system is set by <varname>SEMMNS</varname>, which consequently must be at least as high as <literal>num_os_semaphores</literal> plus one extra for - each set of 19 required semaphores (see the formula in <xref + each set of 16 required semaphores (see the formula in <xref linkend="sysvipc-parameters"/>). The parameter <varname>SEMMNI</varname> determines the limit on the number of semaphore sets that can exist on the system at one time. Hence this parameter must be at - least <literal>ceil(num_os_semaphores / 19)</literal>. + least <literal>ceil(num_os_semaphores / 16)</literal>. Lowering the number of allowed connections is a temporary workaround for failures, which are usually confusingly worded <quote>No space @@ -953,10 +953,10 @@ $ <userinput>postgres -D $PGDATA -C num_os_semaphores</userinput> <para> The default shared memory settings are usually good enough, unless you have set <literal>shared_memory_type</literal> to <literal>sysv</literal>. - You will usually want to increase <literal>kern.ipc.semmni</literal> + However, you will need to increase <literal>kern.ipc.semmni</literal> and <literal>kern.ipc.semmns</literal>, as <systemitem class="osname">NetBSD</systemitem>'s default settings - for these are uncomfortably small. + for these are unworkably small. </para> <para> @@ -987,11 +987,11 @@ $ <userinput>postgres -D $PGDATA -C num_os_semaphores</userinput> <para> The default shared memory settings are usually good enough, unless you have set <literal>shared_memory_type</literal> to <literal>sysv</literal>. - You will usually want to + However, you will need to increase <literal>kern.seminfo.semmni</literal> and <literal>kern.seminfo.semmns</literal>, as <systemitem class="osname">OpenBSD</systemitem>'s default settings - for these are uncomfortably small. + for these are unworkably small. </para> <para> diff --git a/src/backend/port/sysv_sema.c b/src/backend/port/sysv_sema.c index f7c8638aec5..423b2b4f9d6 100644 --- a/src/backend/port/sysv_sema.c +++ b/src/backend/port/sysv_sema.c @@ -50,14 +50,8 @@ typedef int IpcSemaphoreId; /* semaphore ID returned by semget(2) */ * we allocate. It must be *less than* your kernel's SEMMSL (max semaphores * per set) parameter, which is often around 25. (Less than, because we * allocate one extra sema in each set for identification purposes.) - * - * The present value of 19 is chosen with one eye on NetBSD/OpenBSD's default - * SEMMNS setting of 60. Remembering the extra sema per set, this lets us - * allocate three sets with 57 useful semaphores before exceeding that, which - * is enough to run our core regression tests. Users of those systems will - * still want to raise SEMMNS for any sort of production work, though. */ -#define SEMAS_PER_SET 19 +#define SEMAS_PER_SET 16 #define IPCProtection (0600) /* access/modify by user only */ diff --git a/src/bin/initdb/initdb.c b/src/bin/initdb/initdb.c index aefe8130a68..62bbd08d9f6 100644 --- a/src/bin/initdb/initdb.c +++ b/src/bin/initdb/initdb.c @@ -1128,15 +1128,14 @@ test_config_settings(void) * for a given max_connections value. Note that it has been carefully * crafted to provide specific values for the associated values in * trial_conns. We want it to return autovacuum_worker_slots's initial - * default value (16) for the maximum value in trial_conns (100), and we - * want it to return close to the minimum value we'd consider (3, which is - * the default of autovacuum_max_workers) for the minimum value in - * trial_conns (25). + * default value (16) for the maximum value in trial_conns[] (100), while + * it mustn't return less than the default value of autovacuum_max_workers + * (3) for the minimum value in trial_conns[]. */ #define AV_SLOTS_FOR_CONNS(nconns) ((nconns) / 6) static const int trial_conns[] = { - 100, 50, 40, 30, 25 + 100, 50, 40, 30, 20 }; static const int trial_bufs[] = { 16384, 8192, 4096, 3584, 3072, 2560, 2048, 1536, |