• Michael Paquier's avatar
    Move max_wal_senders out of max_connections for connection slot handling · ea92368c
    Michael Paquier authored
    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
    ea92368c
xlog_internal.h 11.4 KB