<row>
<entry><varname>SEMMNI</></>
<entry>Maximum number of semaphore identifiers (i.e., sets)</>
- <entry>at least <literal>ceil((max_connections + autovacuum_max_workers + 4) / 16)</literal></>
+ <entry>at least <literal>ceil((max_connections + autovacuum_max_workers + number of background processes + 5) / 16)</literal></>
</row>
<row>
<entry><varname>SEMMNS</></>
<entry>Maximum number of semaphores system-wide</>
- <entry><literal>ceil((max_connections + autovacuum_max_workers + 4) / 16) * 17</literal> plus room for other applications</>
+ <entry><literal>ceil((max_connections + autovacuum_max_workers + number of background processes + 5) / 16) * 17</literal> plus room for other applications</>
</row>
<row>
<para>
<productname>PostgreSQL</> uses one semaphore per allowed connection
- (<xref linkend="guc-max-connections">) and allowed autovacuum worker
- process (<xref linkend="guc-autovacuum-max-workers">), in sets of 16.
+ (<xref linkend="guc-max-connections">), allowed autovacuum worker
+ process (<xref linkend="guc-autovacuum-max-workers">) and allowed
+ background processes requesting shared memory access, in sets of 16.
Each such set 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</>, which consequently must be at least
as high as <varname>max_connections</> plus
- <varname>autovacuum_max_workers</>, plus one extra for each 16
+ <varname>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 <xref
linkend="sysvipc-parameters">). The parameter <varname>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 <literal>ceil((max_connections + autovacuum_max_workers + 4) / 16)</>.
+ least <literal>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 <quote>No space