From edea649afbcedd431802a5255cd153538e43ee1d Mon Sep 17 00:00:00 2001 From: Robert Haas Date: Tue, 29 Mar 2022 09:24:24 -0400 Subject: [PATCH] Explain why the startup process can't cause a shortage of sinval slots. Bharath Rupireddy, reviewed by Fujii Masao and Yura Sokolov. Lightly edited by me. Discussion: http://postgr.es/m/CALj2ACU=3_frMkDp9UUeuZoAMjaK1y0Z_q5RFNbGvwi8NM==AA@mail.gmail.com --- src/backend/storage/ipc/sinvaladt.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/backend/storage/ipc/sinvaladt.c b/src/backend/storage/ipc/sinvaladt.c index 68e7160b30e..2dec668bbcd 100644 --- a/src/backend/storage/ipc/sinvaladt.c +++ b/src/backend/storage/ipc/sinvaladt.c @@ -205,6 +205,14 @@ SInvalShmemSize(void) Size size; size = offsetof(SISeg, procState); + + /* + * In Hot Standby mode, the startup process requests a procState array + * slot using InitRecoveryTransactionEnvironment(). Even though MaxBackends + * doesn't account for the startup process, it is guaranteed to get a + * free slot. This is because the autovacuum launcher and worker processes, + * which are included in MaxBackends, are not started in Hot Standby mode. + */ size = add_size(size, mul_size(sizeof(ProcState), GetMaxBackends())); return size;