Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit731603a

Browse files
committed
A few further tweaks to shared memory space estimation.
This change brings the default size of the main shmem block back under 1MB,which is a fairly popular value for the kernel's SHMMAX parameter.
1 parent03842eb commit731603a

File tree

5 files changed

+42
-27
lines changed

5 files changed

+42
-27
lines changed

‎src/backend/storage/ipc/ipci.c

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
*
88
*
99
* IDENTIFICATION
10-
* $Header: /cvsroot/pgsql/src/backend/storage/ipc/ipci.c,v 1.22 1999/02/22 06:16:49 tgl Exp $
10+
* $Header: /cvsroot/pgsql/src/backend/storage/ipc/ipci.c,v 1.23 1999/03/06 21:17:41 tgl Exp $
1111
*
1212
*-------------------------------------------------------------------------
1313
*/
@@ -77,14 +77,12 @@ CreateSharedMemoryAndSemaphores(IPCKey key, int maxBackends)
7777
* Size of the primary shared-memory block is estimated via
7878
* moderately-accurate estimates for the big hogs, plus 100K for
7979
* the stuff that's too small to bother with estimating.
80-
* Then we add 10% for a safety margin.
8180
*/
8281
size=BufferShmemSize()+LockShmemSize(maxBackends);
8382
#ifdefSTABLE_MEMORY_STORAGE
8483
size+=MMShmemSize();
8584
#endif
8685
size+=100000;
87-
size+=size /10;
8886

8987
if (DebugLvl>1)
9088
{

‎src/backend/storage/lmgr/lock.c

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
*
88
*
99
* IDENTIFICATION
10-
* $Header: /cvsroot/pgsql/src/backend/storage/lmgr/lock.c,v 1.45 1999/02/22 06:16:52 tgl Exp $
10+
* $Header: /cvsroot/pgsql/src/backend/storage/lmgr/lock.c,v 1.46 1999/03/06 21:17:44 tgl Exp $
1111
*
1212
* NOTES
1313
* Outside modules can create a lock table and acquire/release
@@ -339,8 +339,8 @@ LockMethodTableInit(char *tabName,
339339
* to find the different locks.
340340
* ----------------------
341341
*/
342-
info.keysize=sizeof(LOCKTAG);
343-
info.datasize=sizeof(LOCK);
342+
info.keysize=SHMEM_LOCKTAB_KEYSIZE;
343+
info.datasize=SHMEM_LOCKTAB_DATASIZE;
344344
info.hash=tag_hash;
345345
hash_flags= (HASH_ELEM |HASH_FUNCTION);
346346

@@ -361,8 +361,8 @@ LockMethodTableInit(char *tabName,
361361
* the same lock, additional information must be saved (locks per tx).
362362
* -------------------------
363363
*/
364-
info.keysize=XID_TAGSIZE;
365-
info.datasize=sizeof(XIDLookupEnt);
364+
info.keysize=SHMEM_XIDTAB_KEYSIZE;
365+
info.datasize=SHMEM_XIDTAB_DATASIZE;
366366
info.hash=tag_hash;
367367
hash_flags= (HASH_ELEM |HASH_FUNCTION);
368368

@@ -1488,13 +1488,18 @@ LockShmemSize(int maxBackends)
14881488

14891489
/* lockHash table */
14901490
size+=hash_estimate_size(NLOCKENTS(maxBackends),
1491-
sizeof(LOCKTAG),
1492-
sizeof(LOCK));
1491+
SHMEM_LOCKTAB_KEYSIZE,
1492+
SHMEM_LOCKTAB_DATASIZE);
14931493

14941494
/* xidHash table */
14951495
size+=hash_estimate_size(maxBackends,
1496-
XID_TAGSIZE,
1497-
sizeof(XIDLookupEnt));
1496+
SHMEM_XIDTAB_KEYSIZE,
1497+
SHMEM_XIDTAB_DATASIZE);
1498+
1499+
/* Since the lockHash entry count above is only an estimate,
1500+
* add 10% safety margin.
1501+
*/
1502+
size+=size /10;
14981503

14991504
returnsize;
15001505
}

‎src/backend/storage/smgr/mm.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
*
1111
*
1212
* IDENTIFICATION
13-
* $Header: /cvsroot/pgsql/src/backend/storage/smgr/Attic/mm.c,v 1.14 1999/02/22 06:16:57 tgl Exp $
13+
* $Header: /cvsroot/pgsql/src/backend/storage/smgr/Attic/mm.c,v 1.15 1999/03/06 21:17:50 tgl Exp $
1414
*
1515
*-------------------------------------------------------------------------
1616
*/
@@ -110,7 +110,7 @@ mminit()
110110
}
111111

112112
info.keysize=sizeof(MMCacheTag);
113-
info.datasize=sizeof(int);
113+
info.datasize=sizeof(MMHashEntry)-sizeof(MMCacheTag);
114114
info.hash=tag_hash;
115115

116116
MMCacheHT= (HTAB*)ShmemInitHash("Main memory store HT",
@@ -124,7 +124,7 @@ mminit()
124124
}
125125

126126
info.keysize=sizeof(MMRelTag);
127-
info.datasize=sizeof(int);
127+
info.datasize=sizeof(MMRelHashEntry)-sizeof(MMRelTag);
128128
info.hash=tag_hash;
129129

130130
MMRelCacheHT= (HTAB*)ShmemInitHash("Main memory rel HT",

‎src/backend/utils/hash/dynahash.c

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
*
88
*
99
* IDENTIFICATION
10-
* $Header: /cvsroot/pgsql/src/backend/utils/hash/dynahash.c,v 1.19 1999/02/22 06:16:47 tgl Exp $
10+
* $Header: /cvsroot/pgsql/src/backend/utils/hash/dynahash.c,v 1.20 1999/03/06 21:17:56 tgl Exp $
1111
*
1212
*-------------------------------------------------------------------------
1313
*/
@@ -373,18 +373,23 @@ hash_estimate_size(long num_entries, long keysize, long datasize)
373373
longsize=0;
374374
longnBuckets,
375375
nSegments,
376+
nDirEntries,
376377
nRecordAllocs,
377378
recordSize;
378379

379380
/* estimate number of buckets wanted */
380381
nBuckets=1L <<my_log2((num_entries-1) /DEF_FFACTOR+1);
381382
/* # of segments needed for nBuckets */
382-
nSegments= (nBuckets-1) /DEF_SEGSIZE+1;
383+
nSegments=1L <<my_log2((nBuckets-1) /DEF_SEGSIZE+1);
384+
/* directory entries */
385+
nDirEntries=DEF_DIRSIZE;
386+
while (nDirEntries<nSegments)
387+
nDirEntries <<=1;/* dir_alloc doubles dsize at each call */
383388

384389
/* fixed control info */
385390
size+=MAXALIGN(sizeof(HHDR));/* but not HTAB, per above */
386-
/* directory, assumed to be of size DEF_DIRSIZE */
387-
size+=MAXALIGN(DEF_DIRSIZE*sizeof(SEG_OFFSET));
391+
/* directory */
392+
size+=MAXALIGN(nDirEntries*sizeof(SEG_OFFSET));
388393
/* segments */
389394
size+=nSegments*MAXALIGN(DEF_SEGSIZE*sizeof(BUCKET_INDEX));
390395
/* records --- allocated in groups of BUCKET_ALLOC_INCR */
@@ -408,9 +413,6 @@ hash_estimate_size(long num_entries, long keysize, long datasize)
408413
void
409414
hash_destroy(HTAB*hashp)
410415
{
411-
/* cannot destroy a shared memory hash table */
412-
Assert(!hashp->segbase);
413-
414416
if (hashp!=NULL)
415417
{
416418
SEG_OFFSETsegNum;
@@ -422,6 +424,13 @@ hash_destroy(HTAB *hashp)
422424
q;
423425
ELEMENT*curr;
424426

427+
/* cannot destroy a shared memory hash table */
428+
Assert(!hashp->segbase);
429+
/* allocation method must be one we know how to free, too */
430+
Assert(hashp->alloc== (dhalloc_ptr)MEM_ALLOC);
431+
432+
hash_stats("destroy",hashp);
433+
425434
for (segNum=0;nsegs>0;nsegs--,segNum++)
426435
{
427436

@@ -435,11 +444,10 @@ hash_destroy(HTAB *hashp)
435444
MEM_FREE((char*)curr);
436445
}
437446
}
438-
free((char*)segp);
447+
MEM_FREE((char*)segp);
439448
}
440449
MEM_FREE((char*)hashp->dir);
441450
MEM_FREE((char*)hashp->hctl);
442-
hash_stats("destroy",hashp);
443451
MEM_FREE((char*)hashp);
444452
}
445453
}

‎src/include/storage/lock.h

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
*
77
* Copyright (c) 1994, Regents of the University of California
88
*
9-
* $Id: lock.h,v 1.23 1999/02/21 01:41:47 tgl Exp $
9+
* $Id: lock.h,v 1.24 1999/03/06 21:17:43 tgl Exp $
1010
*
1111
*-------------------------------------------------------------------------
1212
*/
@@ -57,8 +57,6 @@ typedef int LOCKMETHOD;
5757
#defineUSER_LOCKMETHOD2
5858
#defineMIN_LOCKMETHODDEFAULT_LOCKMETHOD
5959

60-
/*typedef struct LOCK LOCK; */
61-
6260

6361
typedefstructLTAG
6462
{
@@ -174,6 +172,9 @@ typedef struct XIDLookupEnt
174172
SHM_QUEUEqueue;
175173
}XIDLookupEnt;
176174

175+
#defineSHMEM_XIDTAB_KEYSIZE sizeof(XIDTAG)
176+
#defineSHMEM_XIDTAB_DATASIZE (sizeof(XIDLookupEnt) - SHMEM_XIDTAB_KEYSIZE)
177+
177178
#defineXID_TAGSIZE (sizeof(XIDTAG))
178179
#defineXIDENT_LOCKMETHOD(xident) (XIDTAG_LOCKMETHOD((xident).tag))
179180

@@ -210,6 +211,9 @@ typedef struct LOCK
210211
intnActive;
211212
}LOCK;
212213

214+
#defineSHMEM_LOCKTAB_KEYSIZE sizeof(LOCKTAG)
215+
#defineSHMEM_LOCKTAB_DATASIZE (sizeof(LOCK) - SHMEM_LOCKTAB_KEYSIZE)
216+
213217
#defineLOCK_LOCKMETHOD(lock) (LOCKTAG_LOCKMETHOD((lock).tag))
214218

215219
#defineLockGetLock_nHolders(l) l->nHolders

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp