mirror of
https://github.com/postgres/postgres.git
synced 2025-11-10 17:42:29 +03:00
Arrange to preallocate all required space for the buffer and FSM hash
tables in shared memory. This ensures that overflow of the lock table creates no long-lasting problems. Per discussion with Merlin Moncure.
This commit is contained in:
@@ -8,7 +8,7 @@
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $PostgreSQL: pgsql/src/backend/storage/freespace/freespace.c,v 1.34 2004/08/29 05:06:47 momjian Exp $
|
||||
* $PostgreSQL: pgsql/src/backend/storage/freespace/freespace.c,v 1.35 2004/09/28 20:46:27 tgl Exp $
|
||||
*
|
||||
*
|
||||
* NOTES:
|
||||
@@ -283,8 +283,8 @@ InitFreeSpaceMap(void)
|
||||
info.hash = tag_hash;
|
||||
|
||||
FreeSpaceMapRelHash = ShmemInitHash("Free Space Map Hash",
|
||||
MaxFSMRelations / 10,
|
||||
MaxFSMRelations,
|
||||
MaxFSMRelations + 1,
|
||||
MaxFSMRelations + 1,
|
||||
&info,
|
||||
(HASH_ELEM | HASH_FUNCTION));
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $PostgreSQL: pgsql/src/backend/storage/ipc/shmem.c,v 1.80 2004/08/29 05:06:48 momjian Exp $
|
||||
* $PostgreSQL: pgsql/src/backend/storage/ipc/shmem.c,v 1.81 2004/09/28 20:46:29 tgl Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -262,8 +262,17 @@ InitShmemIndex(void)
|
||||
* shared memory hash table.
|
||||
*
|
||||
* We assume caller is doing some kind of synchronization
|
||||
* so that two people dont try to create/initialize the
|
||||
* so that two people don't try to create/initialize the
|
||||
* table at once.
|
||||
*
|
||||
* max_size is the estimated maximum number of hashtable entries. This is
|
||||
* not a hard limit, but the access efficiency will degrade if it is
|
||||
* exceeded substantially (since it's used to compute directory size and
|
||||
* the hash table buckets will get overfull).
|
||||
*
|
||||
* init_size is the number of hashtable entries to preallocate. For a table
|
||||
* whose maximum size is certain, this should be equal to max_size; that
|
||||
* ensures that no run-time out-of-shared-memory failures can occur.
|
||||
*/
|
||||
HTAB *
|
||||
ShmemInitHash(const char *name, /* table string name for shmem index */
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $PostgreSQL: pgsql/src/backend/storage/lmgr/lock.c,v 1.140 2004/09/12 18:30:50 tgl Exp $
|
||||
* $PostgreSQL: pgsql/src/backend/storage/lmgr/lock.c,v 1.141 2004/09/28 20:46:32 tgl Exp $
|
||||
*
|
||||
* NOTES
|
||||
* Outside modules can create a lock table and acquire/release
|
||||
@@ -241,7 +241,7 @@ LockMethodTableInit(const char *tabName,
|
||||
|
||||
/* Compute init/max size to request for lock hashtables */
|
||||
max_table_size = NLOCKENTS(maxBackends);
|
||||
init_table_size = max_table_size / 10;
|
||||
init_table_size = max_table_size / 2;
|
||||
|
||||
/* Allocate a string for the shmem index table lookups. */
|
||||
/* This is just temp space in this routine, so palloc is OK. */
|
||||
|
||||
Reference in New Issue
Block a user