I spent a bit of time looking into this.  Using current HEAD, I
instrumented CreateSharedMemoryAndSemaphores to log the size estimates
returned by the various estimation subroutines, plus the shared memory
space actually consumed (i.e, the change in ShmemSegHdr->freeoffset)
by the various shared memory initialization functions.  There were only
two estimates that were way off: LockShmemSize requested 1651771 more
bytes than InitLocks actually consumed, and PredicateLockShmemSize
requested 167058 more bytes than InitPredicateLocks consumed.  I believe
both of those are intentional, reflecting space that may be eaten by the
lock tables later.

Meanwhile, looking at ShmemSegHdr->freeoffset vs ShmemSegHdr->totalsize,
the actual remaining shmem space after postmaster startup is 1919488
bytes.  (Running the core regression tests doesn't consume any of that
remaining space, btw.)  Subtracting the extra lock-table space, we have
100659 bytes to spare, which is as near as makes no difference to the
intended slop of 100000 bytes.

My conclusion is that we don't need to do anything, indeed the proposed
changes will probably just lead to overestimation.

It's certainly possible that there's something amiss somewhere.  These
numbers were all taken with out-of-the-box configuration, so it could be
that changing some postgresql.conf entries would expose that some module
is not scaling its request correctly.  Also, I don't have any extensions
loaded, so this proves nothing about the correctness of any of those.
But it appears to me that the general scheme is working perfectly fine,
so we do not need to complicate it.

                        regards, tom lane

ApplyLauncherShmemInit          used    512
ApplyLauncherShmemSize          est     424
AsyncShmemInit                  used    69376
AsyncShmemSize                  est     69308
AutoVacuumShmemInit             used    5376
AutoVacuumShmemSize             est     5368
BTreeShmemInit                  used    1536
BTreeShmemSize                  est     1476
CreateSharedBackendStatus       used    203520
BackendStatusShmemSize          est     203304
BackgroundWorkerShmemInit       used    4608
BackgroundWorkerShmemSize       est     4496
InitBufferPool          used    137047040
BufferShmemSize         est     137044560
CLOGShmemInit           used    529152
CLOGShmemSize           est     529152
CheckpointerShmemInit   used    393344
CheckpointerShmemSize   est     393280
CommitTsShmemInit       used    133760
CommitTsShmemSize       est     133600
CreateLWLocks           used    26880
LWLockShmemSize         est     26756
InitLocks               used    1394560
LockShmemSize           est     3046331         <-- 1651771 not consumed
MultiXactShmemInit      used    201600
MultiXactShmemSize      est     201412
PGReserveSemaphores     used    16128
PGSemaphoreShmemSize    est     16128
PMSignalShmemInit       used    1024
PMSignalShmemSize       est     1024
InitPredicateLocks      used    2396160
PredicateLockShmemSize  est     2563218         <-- 167058 not consumed
CreateSharedProcArray   used    40320
ProcArrayShmemSize      est     40178
InitProcGlobal          used    112128
ProcGlobalShmemSize     est     111883
ProcSignalShmemInit     used    9344
ProcSignalShmemSize     est     9296
ReplicationOriginShmemInit      used    640
ReplicationOriginShmemSize      est     568
ReplicationSlotsShmemInit       used    2688
ReplicationSlotsShmemSize       est     2640
InitShmemIndex          used    10624
SHMEM_INDEX hash        est     13040
CreateSharedInvalidationState   used    69504
SInvalShmemSize                 est     69464
SUBTRANSShmemInit       used    267008
SUBTRANSShmemSize       est     267008
SnapMgrInit             used    128
SnapMgrShmemSize        est     68
SyncScanShmemInit       used    768
SyncScanShmemSize       est     656
TwoPhaseShmemInit       used    128
TwoPhaseShmemSize       est     16
WalRcvShmemInit         used    2304
WalRcvShmemSize         est     2248
WalSndShmemInit         used    1152
WalSndShmemSize         est     1040
XLOGShmemInit           used    4208768
XLOGShmemSize           est     4208280
dsm_postmaster_startup  used    0
dsm_estimate_size       est     0
dsm_shmem_init          used    0
final roundup           est     3602
total_addin_request     est     0

Reply via email to