Обсуждение: max_wal_senders

Поиск
Список
Период
Сортировка

max_wal_senders

От
Rick Otten
Дата:
I've been thinking about the max_wal_senders parameter lately and wondering if there is any harm in setting it too high.  I'm wondering if I should try to shave a few senders off, perhaps to match my logical replicas + 1, instead of just leaving it at the default of 10.  Or vice-versa, can clients use more than one sender if they are available?  Would increasing it result in lower latency?  The documentation is a little vague.

The documentation mentions an orphaned connection slot that may take a while to time out.  How can I tell if I have any of those?  I was looking for a `pg_wal_slots` table similar to the `pg_replication_slots` table, but don't see anything obvious in the catalog.

Re: max_wal_senders

От
Laurenz Albe
Дата:
On Wed, 2023-02-08 at 18:07 -0500, Rick Otten wrote:
> I've been thinking about the max_wal_senders parameter lately and wondering if there
> is any harm in setting it too high.

No, there isn't, except that if you end up having too many *actual* WAL senders, it
will cause load.  A high limit is no problem as such.

> The documentation mentions an orphaned connection slot that may take a while to time out.
> How can I tell if I have any of those?  I was looking for a `pg_wal_slots` table
> similar to the `pg_replication_slots` table, but don't see anything obvious in the catalog.

The view is "pg_stat_replication", but you won't see there if an entry is
abandoned before PostgreSQL does and terminates it.  You can set "tcp_keepalived_idle"
low enough so that the kernel will detect broken connections early on.

Yours,
Laurenz Albe



Re: max_wal_senders

От
Andres Freund
Дата:
Hi,

On 2023-02-09 06:59:53 +0100, Laurenz Albe wrote:
> On Wed, 2023-02-08 at 18:07 -0500, Rick Otten wrote:
> > I've been thinking about the max_wal_senders parameter lately and wondering if there
> > is any harm in setting it too high.
> 
> No, there isn't, except that if you end up having too many *actual* WAL senders, it
> will cause load.  A high limit is no problem as such.

That's not *quite* true. The downsides are basically the same as for
max_connections (It's basically treated the same, see
InitializeMaxBackends()): You need more shared memory. There's a small
degradation of performance due to the increased size of some shared
datastructures, most prominently the lock table for heavyweight locks.

Greetings,

Andres Freund