From: Heikki Linnakangas Date: Fri, 3 Apr 2026 17:25:57 +0000 (+0300) Subject: Remove bogus "safety margin" from predicate.c shmem estimates X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=feb03dfecdc9810619bc94793be3257a487a669f;p=thirdparty%2Fpostgresql.git Remove bogus "safety margin" from predicate.c shmem estimates 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 Reviewed-by: Matthias van de Meent Discussion: https://www.postgresql.org/message-id/e07be2ba-856b-4ff5-8313-8b58b6b4e4d0@iki.fi --- diff --git a/src/backend/storage/lmgr/predicate.c b/src/backend/storage/lmgr/predicate.c index ae0e96aee5f..efa47ec1684 100644 --- a/src/backend/storage/lmgr/predicate.c +++ b/src/backend/storage/lmgr/predicate.c @@ -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);