diff options
author | Michael Paquier <michael@paquier.xyz> | 2019-02-12 10:07:56 +0900 |
---|---|---|
committer | Michael Paquier <michael@paquier.xyz> | 2019-02-12 10:07:56 +0900 |
commit | ea92368cd1da1e290f9ab8efb7f60cb7598fc310 (patch) | |
tree | 7a7970e2e34e61271e07e8adc2f2b40a8d7911cb /doc/src | |
parent | 1d92a0c9f7dd547ad14cd8a3974289c5ec7f04ce (diff) | |
download | postgresql-ea92368cd1da1e290f9ab8efb7f60cb7598fc310.tar.gz postgresql-ea92368cd1da1e290f9ab8efb7f60cb7598fc310.zip |
Move max_wal_senders out of max_connections for connection slot handling
Since its introduction, max_wal_senders is counted as part of
max_connections when it comes to define how many connection slots can be
used for replication connections with a WAL sender context. This can
lead to confusion for some users, as it could be possible to block a
base backup or replication from happening because other backend sessions
are already taken for other purposes by an application, and
superuser-only connection slots are not a correct solution to handle
that case.
This commit makes max_wal_senders independent of max_connections for its
handling of PGPROC entries in ProcGlobal, meaning that connection slots
for WAL senders are handled using their own free queue, like autovacuum
workers and bgworkers.
One compatibility issue that this change creates is that a standby now
requires to have a value of max_wal_senders at least equal to its
primary. So, if a standby created enforces the value of
max_wal_senders to be lower than that, then this could break failovers.
Normally this should not be an issue though, as any settings of a
standby are inherited from its primary as postgresql.conf gets normally
copied as part of a base backup, so parameters would be consistent.
Author: Alexander Kukushkin
Reviewed-by: Kyotaro Horiguchi, Petr JelĂnek, Masahiko Sawada, Oleksii
Kliukin
Discussion: https://postgr.es/m/CAFh8B=nBzHQeYAu0b8fjK-AF1X4+_p6GRtwG+cCgs6Vci2uRuQ@mail.gmail.com
Diffstat (limited to 'doc/src')
-rw-r--r-- | doc/src/sgml/config.sgml | 34 | ||||
-rw-r--r-- | doc/src/sgml/high-availability.sgml | 5 | ||||
-rw-r--r-- | doc/src/sgml/runtime.sgml | 10 |
3 files changed, 27 insertions, 22 deletions
diff --git a/doc/src/sgml/config.sgml b/doc/src/sgml/config.sgml index 7e208a4b812..07b847a8e96 100644 --- a/doc/src/sgml/config.sgml +++ b/doc/src/sgml/config.sgml @@ -697,8 +697,7 @@ include_dir 'conf.d' <para> The default value is three connections. The value must be less - than <varname>max_connections</varname> minus - <xref linkend="guc-max-wal-senders"/>. + than <varname>max_connections</varname>. This parameter can only be set at server start. </para> </listitem> @@ -3495,24 +3494,25 @@ restore_command = 'copy "C:\\server\\archivedir\\%f" "%p"' # Windows </term> <listitem> <para> - Specifies the maximum number of concurrent connections from - standby servers or streaming base backup clients (i.e., the - maximum number of simultaneously running WAL sender - processes). The default is 10. The value 0 means replication is - disabled. WAL sender processes count towards the total number - of connections, so this parameter's value must be less than - <xref linkend="guc-max-connections"/> minus - <xref linkend="guc-superuser-reserved-connections"/>. - Abrupt streaming client disconnection might leave an orphaned - connection slot behind until - a timeout is reached, so this parameter should be set slightly - higher than the maximum number of expected clients so disconnected - clients can immediately reconnect. This parameter can only - be set at server start. - Also, <varname>wal_level</varname> must be set to + Specifies the maximum number of concurrent connections from standby + servers or streaming base backup clients (i.e., the maximum number of + simultaneously running WAL sender processes). The default is + <literal>10</literal>. The value <literal>0</literal> means + replication is disabled. Abrupt streaming client disconnection might + leave an orphaned connection slot behind until a timeout is reached, + so this parameter should be set slightly higher than the maximum + number of expected clients so disconnected clients can immediately + reconnect. This parameter can only be set at server start. Also, + <varname>wal_level</varname> must be set to <literal>replica</literal> or higher to allow connections from standby servers. </para> + + <para> + When running a standby server, you must set this parameter to the + same or higher value than on the master server. Otherwise, queries + will not be allowed in the standby server. + </para> </listitem> </varlistentry> diff --git a/doc/src/sgml/high-availability.sgml b/doc/src/sgml/high-availability.sgml index bbab7395a21..2b4dcd03c87 100644 --- a/doc/src/sgml/high-availability.sgml +++ b/doc/src/sgml/high-availability.sgml @@ -2179,6 +2179,11 @@ LOG: database system is ready to accept read only connections </listitem> <listitem> <para> + <varname>max_wal_senders</varname> + </para> + </listitem> + <listitem> + <para> <varname>max_worker_processes</varname> </para> </listitem> diff --git a/doc/src/sgml/runtime.sgml b/doc/src/sgml/runtime.sgml index 1f78f6c9569..7de26e98ad8 100644 --- a/doc/src/sgml/runtime.sgml +++ b/doc/src/sgml/runtime.sgml @@ -720,13 +720,13 @@ psql: could not connect to server: No such file or directory <row> <entry><varname>SEMMNI</varname></entry> <entry>Maximum number of semaphore identifiers (i.e., sets)</entry> - <entry>at least <literal>ceil((max_connections + autovacuum_max_workers + max_worker_processes + 5) / 16)</literal> plus room for other applications</entry> + <entry>at least <literal>ceil((max_connections + autovacuum_max_workers + wax_wal_senders + max_worker_processes + 5) / 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((max_connections + autovacuum_max_workers + max_worker_processes + 5) / 16) * 17</literal> plus room for other applications</entry> + <entry><literal>ceil((max_connections + autovacuum_max_workers + max_wal_senders + max_worker_processes + 5) / 16) * 17</literal> plus room for other applications</entry> </row> <row> @@ -785,13 +785,13 @@ psql: could not connect to server: No such file or directory 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 <varname>max_connections</varname> plus - <varname>autovacuum_max_workers</varname> plus <varname>max_worker_processes</varname>, - plus one extra for each 16 + <varname>autovacuum_max_workers</varname> plus <varname>max_wal_senders</varname>, + plus <varname>max_worker_processes</varname>, plus one extra for each 16 allowed connections plus workers (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((max_connections + autovacuum_max_workers + max_worker_processes + 5) / 16)</literal>. + least <literal>ceil((max_connections + autovacuum_max_workers + max_wal_senders + max_worker_processes + 5) / 16)</literal>. Lowering the number of allowed connections is a temporary workaround for failures, which are usually confusingly worded <quote>No space |