mirror of
https://github.com/postgres/postgres.git
synced 2025-11-15 03:41:20 +03:00
Fix the size of predicate lock manager's shared memory hash tables at creation.
This way they don't compete with the regular lock manager for the slack shared memory, making the behavior more predictable.
This commit is contained in:
@@ -970,17 +970,15 @@ InitPredicateLocks(void)
|
||||
{
|
||||
HASHCTL info;
|
||||
int hash_flags;
|
||||
long init_table_size,
|
||||
max_table_size;
|
||||
long max_table_size;
|
||||
Size requestSize;
|
||||
bool found;
|
||||
|
||||
/*
|
||||
* Compute init/max size to request for predicate lock target hashtable.
|
||||
* Compute size of predicate lock target hashtable.
|
||||
* Note these calculations must agree with PredicateLockShmemSize!
|
||||
*/
|
||||
max_table_size = NPREDICATELOCKTARGETENTS();
|
||||
init_table_size = max_table_size / 2;
|
||||
|
||||
/*
|
||||
* Allocate hash table for PREDICATELOCKTARGET structs. This stores
|
||||
@@ -991,17 +989,16 @@ InitPredicateLocks(void)
|
||||
info.entrysize = sizeof(PREDICATELOCKTARGET);
|
||||
info.hash = tag_hash;
|
||||
info.num_partitions = NUM_PREDICATELOCK_PARTITIONS;
|
||||
hash_flags = (HASH_ELEM | HASH_FUNCTION | HASH_PARTITION);
|
||||
hash_flags = (HASH_ELEM | HASH_FUNCTION | HASH_PARTITION | HASH_FIXED_SIZE);
|
||||
|
||||
PredicateLockTargetHash = ShmemInitHash("PREDICATELOCKTARGET hash",
|
||||
init_table_size,
|
||||
max_table_size,
|
||||
max_table_size,
|
||||
&info,
|
||||
hash_flags);
|
||||
|
||||
/* Assume an average of 2 xacts per target */
|
||||
max_table_size *= 2;
|
||||
init_table_size *= 2;
|
||||
|
||||
/*
|
||||
* Reserve an entry in the hash table; we use it to make sure there's
|
||||
@@ -1022,18 +1019,17 @@ InitPredicateLocks(void)
|
||||
info.entrysize = sizeof(PREDICATELOCK);
|
||||
info.hash = predicatelock_hash;
|
||||
info.num_partitions = NUM_PREDICATELOCK_PARTITIONS;
|
||||
hash_flags = (HASH_ELEM | HASH_FUNCTION | HASH_PARTITION);
|
||||
hash_flags = (HASH_ELEM | HASH_FUNCTION | HASH_PARTITION | HASH_FIXED_SIZE);
|
||||
|
||||
PredicateLockHash = ShmemInitHash("PREDICATELOCK hash",
|
||||
init_table_size,
|
||||
max_table_size,
|
||||
max_table_size,
|
||||
&info,
|
||||
hash_flags);
|
||||
|
||||
/*
|
||||
* Compute init/max size to request for serializable transaction
|
||||
* hashtable. Note these calculations must agree with
|
||||
* PredicateLockShmemSize!
|
||||
* Compute size for serializable transaction hashtable.
|
||||
* Note these calculations must agree with PredicateLockShmemSize!
|
||||
*/
|
||||
max_table_size = (MaxBackends + max_prepared_xacts);
|
||||
|
||||
@@ -1104,7 +1100,7 @@ InitPredicateLocks(void)
|
||||
info.keysize = sizeof(SERIALIZABLEXIDTAG);
|
||||
info.entrysize = sizeof(SERIALIZABLEXID);
|
||||
info.hash = tag_hash;
|
||||
hash_flags = (HASH_ELEM | HASH_FUNCTION);
|
||||
hash_flags = (HASH_ELEM | HASH_FUNCTION | HASH_FIXED_SIZE);
|
||||
|
||||
SerializableXidHash = ShmemInitHash("SERIALIZABLEXID hash",
|
||||
max_table_size,
|
||||
|
||||
Reference in New Issue
Block a user