postgres.git / summary / log / commit / refs

commit    c5d66fc12b0891fd5f2a830ab9fa9feb8df94171
Author:   Alexander Korotkov <akorotkov@postgresql.org>
Date:     Thu Aug 07 11:29:02 2025 +0000

    Fix checkpointer shared memory allocation
    
    Use Min(NBuffers, MAX_CHECKPOINT_REQUESTS) instead of NBuffers in
    CheckpointerShmemSize() to match the actual array size limit set in
    CheckpointerShmemInit().  This prevents wasting shared memory when
    NBuffers > MAX_CHECKPOINT_REQUESTS.  Also, fix the comment.
    
    Reported-by: Tom Lane <tgl@sss.pgh.pa.us>
    Discussion: https://postgr.es/m/1439188.1754506714%40sss.pgh.pa.us
    Author: Xuneng Zhou <xunengzhou@gmail.com>
    Co-authored-by: Alexander Korotkov <aekorotkov@gmail.com>


src/backend/postmaster/checkpointer.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/backend/postmaster/checkpointer.c b/src/backend/postmaster/checkpointer.c index 17a068b27b8..afaa580ae4d 100644 --- a/src/backend/postmaster/checkpointer.c +++ b/src/backend/postmaster/checkpointer.c @@ -876,11 +876,14 @@ CheckpointerShmemSize(void) Size size; /* - * Currently, the size of the requests[] array is arbitrarily set equal to - * NBuffers. This may prove too large or small ... + * The size of the requests[] array is arbitrarily set equal to NBuffers. + * But there is a cap of MAX_CHECKPOINT_REQUESTS to prevent accumulating + * too many checkpoint requests in the ring buffer. */ size = offsetof(CheckpointerShmemStruct, requests); - size = add_size(size, mul_size(NBuffers, sizeof(CheckpointerRequest))); + size = add_size(size, mul_size(Min(NBuffers, + MAX_CHECKPOINT_REQUESTS), + sizeof(CheckpointerRequest))); return size; } [parent: 0edaaa8f2978]