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

Commit139abc2

Browse files
author
Neil Conway
committed
Make LocalRefCount and PrivateRefCount arrays of int32, rather than long.
This saves a small amount of per-backend memory for LP64 machines.
1 parent2ff4e44 commit139abc2

File tree

4 files changed

+46
-36
lines changed

4 files changed

+46
-36
lines changed

‎src/backend/storage/buffer/buf_init.c

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
*
99
*
1010
* IDENTIFICATION
11-
* $PostgreSQL: pgsql/src/backend/storage/buffer/buf_init.c,v 1.64 2004/04/21 18:06:30 tgl Exp $
11+
* $PostgreSQL: pgsql/src/backend/storage/buffer/buf_init.c,v 1.65 2004/04/22 07:21:55 neilc Exp $
1212
*
1313
*-------------------------------------------------------------------------
1414
*/
@@ -21,7 +21,7 @@
2121
BufferDesc*BufferDescriptors;
2222
Block*BufferBlockPointers;
2323

24-
long*PrivateRefCount;/* also used in freelist.c */
24+
int32*PrivateRefCount;/* also used in freelist.c */
2525
bits8*BufferLocks;/* flag bits showing locks I have set */
2626

2727
/* statistics counters */
@@ -176,9 +176,11 @@ InitBufferPoolAccess(void)
176176
/*
177177
* Allocate and zero local arrays of per-buffer info.
178178
*/
179-
BufferBlockPointers= (Block*)calloc(NBuffers,sizeof(Block));
180-
PrivateRefCount= (long*)calloc(NBuffers,sizeof(long));
181-
BufferLocks= (bits8*)calloc(NBuffers,sizeof(bits8));
179+
BufferBlockPointers= (Block*)calloc(NBuffers,
180+
sizeof(*BufferBlockPointers));
181+
PrivateRefCount= (int32*)calloc(NBuffers,
182+
sizeof(*PrivateRefCount));
183+
BufferLocks= (bits8*)calloc(NBuffers,sizeof(*BufferLocks));
182184

183185
/*
184186
* Convert shmem offsets into addresses as seen by this process. This

‎src/backend/storage/buffer/bufmgr.c

Lines changed: 27 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
*
99
*
1010
* IDENTIFICATION
11-
* $PostgreSQL: pgsql/src/backend/storage/buffer/bufmgr.c,v 1.162 2004/04/21 18:06:30 tgl Exp $
11+
* $PostgreSQL: pgsql/src/backend/storage/buffer/bufmgr.c,v 1.163 2004/04/22 07:21:55 neilc Exp $
1212
*
1313
*-------------------------------------------------------------------------
1414
*/
@@ -59,7 +59,7 @@
5959
boolzero_damaged_pages= false;
6060

6161
#ifdefNOT_USED
62-
intShowPinTrace=0;
62+
boolShowPinTrace=false;
6363
#endif
6464

6565
intBgWriterDelay=200;
@@ -843,7 +843,7 @@ AtEOXact_Buffers(bool isCommit)
843843
if (isCommit)
844844
elog(WARNING,
845845
"buffer refcount leak: [%03d] "
846-
"(rel=%u/%u, blockNum=%u, flags=0x%x, refcount=%d %ld)",
846+
"(rel=%u/%u, blockNum=%u, flags=0x%x, refcount=%u %d)",
847847
i,
848848
buf->tag.rnode.tblNode,buf->tag.rnode.relNode,
849849
buf->tag.blockNum,buf->flags,
@@ -1225,7 +1225,7 @@ DropRelFileNodeBuffers(RelFileNode rnode, bool istemp)
12251225
{
12261226
/* the sole pin should be ours */
12271227
if (bufHdr->refcount!=1||PrivateRefCount[i-1]==0)
1228-
elog(FATAL,"block %u of %u/%u is still referenced (private %ld, global %d)",
1228+
elog(FATAL,"block %u of %u/%u is still referenced (private %d, global %u)",
12291229
bufHdr->tag.blockNum,
12301230
bufHdr->tag.rnode.tblNode,
12311231
bufHdr->tag.rnode.relNode,
@@ -1330,8 +1330,9 @@ PrintBufferDescs(void)
13301330
LWLockAcquire(BufMgrLock,LW_EXCLUSIVE);
13311331
for (i=0;i<NBuffers;++i,++buf)
13321332
{
1333-
elog(LOG,"[%02d] (freeNext=%d, freePrev=%d, rel=%u/%u, \
1334-
blockNum=%u, flags=0x%x, refcount=%d %ld)",
1333+
elog(LOG,
1334+
"[%02d] (freeNext=%d, freePrev=%d, rel=%u/%u, "
1335+
"blockNum=%u, flags=0x%x, refcount=%u %d)",
13351336
i,buf->freeNext,buf->freePrev,
13361337
buf->tag.rnode.tblNode,buf->tag.rnode.relNode,
13371338
buf->tag.blockNum,buf->flags,
@@ -1344,7 +1345,7 @@ blockNum=%u, flags=0x%x, refcount=%d %ld)",
13441345
/* interactive backend */
13451346
for (i=0;i<NBuffers;++i,++buf)
13461347
{
1347-
printf("[%-2d] (%u/%u, %u) flags=0x%x,refcnt=%d %ld)\n",
1348+
printf("[%-2d] (%u/%u, %u) flags=0x%x,refcount=%u %d)\n",
13481349
i,buf->tag.rnode.tblNode,buf->tag.rnode.relNode,
13491350
buf->tag.blockNum,
13501351
buf->flags,buf->refcount,PrivateRefCount[i]);
@@ -1364,8 +1365,9 @@ PrintPinnedBufs(void)
13641365
for (i=0;i<NBuffers;++i,++buf)
13651366
{
13661367
if (PrivateRefCount[i]>0)
1367-
elog(WARNING,"[%02d] (freeNext=%d, freePrev=%d, rel=%u/%u, \
1368-
blockNum=%u, flags=0x%x, refcount=%d %ld)",
1368+
elog(WARNING,
1369+
"[%02d] (freeNext=%d, freePrev=%d, rel=%u/%u, "
1370+
"blockNum=%u, flags=0x%x, refcount=%u %d)",
13691371
i,buf->freeNext,buf->freePrev,
13701372
buf->tag.rnode.tblNode,buf->tag.rnode.relNode,
13711373
buf->tag.blockNum,buf->flags,
@@ -1458,7 +1460,7 @@ FlushRelationBuffers(Relation rel, BlockNumber firstDelBlock)
14581460
}
14591461
if (LocalRefCount[i]>0)
14601462
{
1461-
elog(WARNING,"FlushRelationBuffers(\"%s\" (local), %u): block %u is referenced (%ld)",
1463+
elog(WARNING,"FlushRelationBuffers(\"%s\" (local), %u): block %u is referenced (%d)",
14621464
RelationGetRelationName(rel),firstDelBlock,
14631465
bufHdr->tag.blockNum,LocalRefCount[i]);
14641466
return (-2);
@@ -1507,7 +1509,7 @@ FlushRelationBuffers(Relation rel, BlockNumber firstDelBlock)
15071509
if (bufHdr->refcount!=0)
15081510
{
15091511
LWLockRelease(BufMgrLock);
1510-
elog(WARNING,"FlushRelationBuffers(\"%s\", %u): block %u is referenced (private %ld, global %d)",
1512+
elog(WARNING,"FlushRelationBuffers(\"%s\", %u): block %u is referenced (private %d, global %u)",
15111513
RelationGetRelationName(rel),firstDelBlock,
15121514
bufHdr->tag.blockNum,
15131515
PrivateRefCount[i],bufHdr->refcount);
@@ -1565,8 +1567,9 @@ IncrBufferRefCount_Debug(char *file, int line, Buffer buffer)
15651567
{
15661568
BufferDesc*buf=&BufferDescriptors[buffer-1];
15671569

1568-
fprintf(stderr,"PIN(Incr) %d rel = %u/%u, blockNum = %u, \
1569-
refcount = %ld, file: %s, line: %d\n",
1570+
fprintf(stderr,
1571+
"PIN(Incr) %d rel = %u/%u, blockNum = %u, "
1572+
"refcount = %d, file: %s, line: %d\n",
15701573
buffer,
15711574
buf->tag.rnode.tblNode,buf->tag.rnode.relNode,
15721575
buf->tag.blockNum,
@@ -1584,8 +1587,9 @@ ReleaseBuffer_Debug(char *file, int line, Buffer buffer)
15841587
{
15851588
BufferDesc*buf=&BufferDescriptors[buffer-1];
15861589

1587-
fprintf(stderr,"UNPIN(Rel) %d rel = %u/%u, blockNum = %u, \
1588-
refcount = %ld, file: %s, line: %d\n",
1590+
fprintf(stderr,
1591+
"UNPIN(Rel) %d rel = %u/%u, blockNum = %u, "
1592+
"refcount = %d, file: %s, line: %d\n",
15891593
buffer,
15901594
buf->tag.rnode.tblNode,buf->tag.rnode.relNode,
15911595
buf->tag.blockNum,
@@ -1612,8 +1616,9 @@ ReleaseAndReadBuffer_Debug(char *file,
16121616
{
16131617
BufferDesc*buf=&BufferDescriptors[buffer-1];
16141618

1615-
fprintf(stderr,"UNPIN(Rel&Rd) %d rel = %u/%u, blockNum = %u, \
1616-
refcount = %ld, file: %s, line: %d\n",
1619+
fprintf(stderr,
1620+
"UNPIN(Rel&Rd) %d rel = %u/%u, blockNum = %u, "
1621+
"refcount = %d, file: %s, line: %d\n",
16171622
buffer,
16181623
buf->tag.rnode.tblNode,buf->tag.rnode.relNode,
16191624
buf->tag.blockNum,
@@ -1623,8 +1628,9 @@ refcount = %ld, file: %s, line: %d\n",
16231628
{
16241629
BufferDesc*buf=&BufferDescriptors[b-1];
16251630

1626-
fprintf(stderr,"PIN(Rel&Rd) %d rel = %u/%u, blockNum = %u, \
1627-
refcount = %ld, file: %s, line: %d\n",
1631+
fprintf(stderr,
1632+
"PIN(Rel&Rd) %d rel = %u/%u, blockNum = %u, "
1633+
"refcount = %d, file: %s, line: %d\n",
16281634
b,
16291635
buf->tag.rnode.tblNode,buf->tag.rnode.relNode,
16301636
buf->tag.blockNum,
@@ -1819,15 +1825,15 @@ LockBufferForCleanup(Buffer buffer)
18191825
{
18201826
/* There should be exactly one pin */
18211827
if (LocalRefCount[-buffer-1]!=1)
1822-
elog(ERROR,"incorrect local pin count: %ld",
1828+
elog(ERROR,"incorrect local pin count: %d",
18231829
LocalRefCount[-buffer-1]);
18241830
/* Nobody else to wait for */
18251831
return;
18261832
}
18271833

18281834
/* There should be exactly one local pin */
18291835
if (PrivateRefCount[buffer-1]!=1)
1830-
elog(ERROR,"incorrect local pin count: %ld",
1836+
elog(ERROR,"incorrect local pin count: %d",
18311837
PrivateRefCount[buffer-1]);
18321838

18331839
bufHdr=&BufferDescriptors[buffer-1];

‎src/backend/storage/buffer/localbuf.c

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
*
1010
*
1111
* IDENTIFICATION
12-
* $PostgreSQL: pgsql/src/backend/storage/buffer/localbuf.c,v 1.53 2004/04/21 18:06:30 tgl Exp $
12+
* $PostgreSQL: pgsql/src/backend/storage/buffer/localbuf.c,v 1.54 2004/04/22 07:21:55 neilc Exp $
1313
*
1414
*-------------------------------------------------------------------------
1515
*/
@@ -28,7 +28,7 @@ intNLocBuffer = 64;
2828

2929
BufferDesc*LocalBufferDescriptors=NULL;
3030
Block*LocalBufferBlockPointers=NULL;
31-
long*LocalRefCount=NULL;
31+
int32*LocalRefCount=NULL;
3232

3333
staticintnextFreeLocalBuf=0;
3434

@@ -195,10 +195,12 @@ InitLocalBuffer(void)
195195
/*
196196
* these aren't going away. I'm not gonna use palloc.
197197
*/
198-
LocalBufferDescriptors=
199-
(BufferDesc*)calloc(NLocBuffer,sizeof(BufferDesc));
200-
LocalBufferBlockPointers= (Block*)calloc(NLocBuffer,sizeof(Block));
201-
LocalRefCount= (long*)calloc(NLocBuffer,sizeof(long));
198+
LocalBufferDescriptors= (BufferDesc*)
199+
calloc(NLocBuffer,sizeof(*LocalBufferDescriptors));
200+
LocalBufferBlockPointers= (Block*)
201+
calloc(NLocBuffer,sizeof(*LocalBufferBlockPointers));
202+
LocalRefCount= (int32*)
203+
calloc(NLocBuffer,sizeof(*LocalRefCount));
202204
nextFreeLocalBuf=0;
203205

204206
for (i=0;i<NLocBuffer;i++)
@@ -233,7 +235,7 @@ AtEOXact_LocalBuffers(bool isCommit)
233235

234236
if (isCommit)
235237
elog(WARNING,
236-
"local buffer leak: [%03d] (rel=%u/%u, blockNum=%u, flags=0x%x, refcount=%d %ld)",
238+
"local buffer leak: [%03d] (rel=%u/%u, blockNum=%u, flags=0x%x, refcount=%u %d)",
237239
i,
238240
buf->tag.rnode.tblNode,buf->tag.rnode.relNode,
239241
buf->tag.blockNum,buf->flags,

‎src/include/storage/bufmgr.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
* Portions Copyright (c) 1996-2003, PostgreSQL Global Development Group
88
* Portions Copyright (c) 1994, Regents of the University of California
99
*
10-
* $PostgreSQL: pgsql/src/include/storage/bufmgr.h,v 1.76 2004/04/21 18:06:30 tgl Exp $
10+
* $PostgreSQL: pgsql/src/include/storage/bufmgr.h,v 1.77 2004/04/22 07:21:55 neilc Exp $
1111
*
1212
*-------------------------------------------------------------------------
1313
*/
@@ -35,12 +35,12 @@ extern intBgWriterMaxpages;
3535

3636
/* in buf_init.c */
3737
externDLLIMPORTBlock*BufferBlockPointers;
38-
externlong*PrivateRefCount;
38+
externint32*PrivateRefCount;
3939

4040
/* in localbuf.c */
4141
externDLLIMPORTintNLocBuffer;
4242
externDLLIMPORTBlock*LocalBufferBlockPointers;
43-
externlong*LocalRefCount;
43+
externint32*LocalRefCount;
4444

4545
/* special pageno for bget */
4646
#defineP_NEWInvalidBlockNumber/* grow the file to get a new page */

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp