From 984da963fb450252eb444402a30c7dd0b54e1c69 Mon Sep 17 00:00:00 2001 From: Fujii Masao Date: Tue, 16 Feb 2016 14:59:19 +0900 Subject: [PATCH] Correct the formulas for System V IPC parameters SEMMNI and SEMMNS in docs. In runtime.sgml, the old formulas for calculating the reasonable values of SEMMNI and SEMMNS were incorrect. They have forgotten to count the number of semaphores which both the checkpointer process (introduced in 9.2) and the background worker processes (introduced in 9.3) need. This commit fixes those formulas so that they count the number of semaphores which the checkpointer process and the background worker processes need. Report and patch by Kyotaro Horiguchi. Only the patch for 9.3 was modified by me. Back-patch to 9.2 where the checkpointer process was added and the number of needed semaphores was increased. Author: Kyotaro Horiguchi Reviewed-by: Fujii Masao Backpatch: 9.2 Discussion: http://www.postgresql.org/message-id/20160203.125119.66820697.horiguchi.kyotaro@lab.ntt.co.jp --- doc/src/sgml/runtime.sgml | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/doc/src/sgml/runtime.sgml b/doc/src/sgml/runtime.sgml index 0db38074644..59909059f17 100644 --- a/doc/src/sgml/runtime.sgml +++ b/doc/src/sgml/runtime.sgml @@ -645,13 +645,13 @@ psql: could not connect to server: No such file or directory SEMMNI Maximum number of semaphore identifiers (i.e., sets) - at least ceil((max_connections + autovacuum_max_workers + 4) / 16) + at least ceil((max_connections + autovacuum_max_workers + number of background processes + 5) / 16) SEMMNS Maximum number of semaphores system-wide - ceil((max_connections + autovacuum_max_workers + 4) / 16) * 17 plus room for other applications + ceil((max_connections + autovacuum_max_workers + number of background processes + 5) / 16) * 17 plus room for other applications @@ -699,20 +699,23 @@ psql: could not connect to server: No such file or directory PostgreSQL uses one semaphore per allowed connection - () and allowed autovacuum worker - process (), in sets of 16. + (), allowed autovacuum worker + process () and allowed + background processes requesting shared memory access, in sets of 16. Each such set will also contain a 17th semaphore which contains a magic number, to detect collision with semaphore sets used by other applications. The maximum number of semaphores in the system is set by SEMMNS, which consequently must be at least as high as max_connections plus - autovacuum_max_workers, plus one extra for each 16 + autovacuum_max_workers plus number of background + processes requesting shared memory access, plus one extra for each 16 allowed connections plus workers (see the formula in ). The parameter SEMMNI 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 ceil((max_connections + autovacuum_max_workers + 4) / 16). + least ceil((max_connections + autovacuum_max_workers + + number of background processes + 5) / 16). Lowering the number of allowed connections is a temporary workaround for failures, which are usually confusingly worded No space