]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
Remove bogus "safety margin" from predicate.c shmem estimates
authorHeikki Linnakangas <heikki.linnakangas@iki.fi>
Fri, 3 Apr 2026 17:25:57 +0000 (20:25 +0300)
committerHeikki Linnakangas <heikki.linnakangas@iki.fi>
Fri, 3 Apr 2026 17:25:57 +0000 (20:25 +0300)
The 10% safety margin was copy-pasted from lock.c when the predicate
locking code was originally added. However, we later (commit
7c797e7194) added the HASH_FIXED_SIZE flag to the hash tables, which
means that they cannot actually use the safety margin that we're
calculating for them.

The extra memory was mainly used by the main lock manager, which is
the only shmem hash table of non-trivial size that does not use the
HASH_FIXED_SIZE flag. If we wanted to have more space for the lock
manager, we should reserve it directly in lock.c. After this commit,
the lock manager will just have less memory available than before.

Reviewed-by: Ashutosh Bapat <ashutosh.bapat.oss@gmail.com>
Reviewed-by: Matthias van de Meent <boekewurm+postgres@gmail.com>
Discussion: https://www.postgresql.org/message-id/e07be2ba-856b-4ff5-8313-8b58b6b4e4d0@iki.fi

src/backend/storage/lmgr/predicate.c

index ae0e96aee5f99c9de390aff21544c43101a1d76a..efa47ec16846ed672ed3fac7a00ac42bc634556d 100644 (file)
@@ -1383,12 +1383,6 @@ PredicateLockShmemSize(void)
        size = add_size(size, hash_estimate_size(max_predicate_locks,
                                                                                         sizeof(PREDICATELOCK)));
 
-       /*
-        * Since NPREDICATELOCKTARGETENTS is only an estimate, add 10% safety
-        * margin.
-        */
-       size = add_size(size, size / 10);
-
        /* transaction list */
        max_serializable_xacts = (MaxBackends + max_prepared_xacts) * 10;
        size = add_size(size, PredXactListDataSize);