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

Commit54af876

Browse files
committed
Replace ReadBuffer to ReadBufferWithStrategy in all vacuum-involved places
to implement limited-size "ring" of buffers for VACUUM for GIN & GIST
1 parent71fb7b9 commit54af876

File tree

2 files changed

+21
-16
lines changed

2 files changed

+21
-16
lines changed

‎src/backend/access/gin/ginvacuum.c

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
* Portions Copyright (c) 1994, Regents of the University of California
99
*
1010
* IDENTIFICATION
11-
*$PostgreSQL: pgsql/src/backend/access/gin/ginvacuum.c,v 1.12 2007/02/01 04:16:08 neilc Exp $
11+
*$PostgreSQL: pgsql/src/backend/access/gin/ginvacuum.c,v 1.13 2007/05/31 14:03:09 teodor Exp $
1212
*-------------------------------------------------------------------------
1313
*/
1414

@@ -28,6 +28,7 @@ typedef struct
2828
IndexBulkDeleteCallbackcallback;
2929
void*callback_state;
3030
GinStateginstate;
31+
BufferAccessStrategystrategy;
3132
}GinVacuumState;
3233

3334

@@ -152,7 +153,7 @@ xlogVacuumPage(Relation index, Buffer buffer)
152153
staticbool
153154
ginVacuumPostingTreeLeaves(GinVacuumState*gvs,BlockNumberblkno,boolisRoot,Buffer*rootBuffer)
154155
{
155-
Bufferbuffer=ReadBuffer(gvs->index,blkno);
156+
Bufferbuffer=ReadBufferWithStrategy(gvs->index,blkno,gvs->strategy);
156157
Pagepage=BufferGetPage(buffer);
157158
boolhasVoidPage= FALSE;
158159

@@ -238,9 +239,10 @@ static void
238239
ginDeletePage(GinVacuumState*gvs,BlockNumberdeleteBlkno,BlockNumberleftBlkno,
239240
BlockNumberparentBlkno,OffsetNumbermyoff,boolisParentRoot)
240241
{
241-
BufferdBuffer=ReadBuffer(gvs->index,deleteBlkno);
242-
BufferlBuffer= (leftBlkno==InvalidBlockNumber) ?InvalidBuffer :ReadBuffer(gvs->index,leftBlkno);
243-
BufferpBuffer=ReadBuffer(gvs->index,parentBlkno);
242+
BufferdBuffer=ReadBufferWithStrategy(gvs->index,deleteBlkno,gvs->strategy);
243+
BufferlBuffer= (leftBlkno==InvalidBlockNumber) ?
244+
InvalidBuffer :ReadBufferWithStrategy(gvs->index,leftBlkno,gvs->strategy);
245+
BufferpBuffer=ReadBufferWithStrategy(gvs->index,parentBlkno,gvs->strategy);
244246
Pagepage,
245247
parentPage;
246248

@@ -390,7 +392,7 @@ ginScanToDelete(GinVacuumState *gvs, BlockNumber blkno, bool isRoot, DataPageDel
390392
me=parent->child;
391393
}
392394

393-
buffer=ReadBuffer(gvs->index,blkno);
395+
buffer=ReadBufferWithStrategy(gvs->index,blkno,gvs->strategy);
394396
page=BufferGetPage(buffer);
395397

396398
Assert(GinPageIsData(page));
@@ -574,9 +576,10 @@ ginbulkdelete(PG_FUNCTION_ARGS)
574576
gvs.result=stats;
575577
gvs.callback=callback;
576578
gvs.callback_state=callback_state;
579+
gvs.strategy=info->strategy;
577580
initGinState(&gvs.ginstate,index);
578581

579-
buffer=ReadBuffer(index,blkno);
582+
buffer=ReadBufferWithStrategy(index,blkno,info->strategy);
580583

581584
/* find leaf page */
582585
for (;;)
@@ -607,8 +610,8 @@ ginbulkdelete(PG_FUNCTION_ARGS)
607610
blkno=GinItemPointerGetBlockNumber(&(itup)->t_tid);
608611
Assert(blkno!=InvalidBlockNumber);
609612

610-
LockBuffer(buffer,GIN_UNLOCK);
611-
buffer=ReleaseAndReadBuffer(buffer,index,blkno);
613+
UnlockReleaseBuffer(buffer);
614+
buffer=ReadBufferWithStrategy(index,blkno,info->strategy);
612615
}
613616

614617
/* right now we found leftmost page in entry's BTree */
@@ -650,7 +653,7 @@ ginbulkdelete(PG_FUNCTION_ARGS)
650653
if (blkno==InvalidBlockNumber)/* rightmost page */
651654
break;
652655

653-
buffer=ReadBuffer(index,blkno);
656+
buffer=ReadBufferWithStrategy(index,blkno,info->strategy);
654657
LockBuffer(buffer,GIN_EXCLUSIVE);
655658
}
656659

@@ -713,7 +716,7 @@ ginvacuumcleanup(PG_FUNCTION_ARGS)
713716

714717
vacuum_delay_point();
715718

716-
buffer=ReadBuffer(index,blkno);
719+
buffer=ReadBufferWithStrategy(index,blkno,info->strategy);
717720
LockBuffer(buffer,GIN_SHARE);
718721
page= (Page)BufferGetPage(buffer);
719722

‎src/backend/access/gist/gistvacuum.c

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
* Portions Copyright (c) 1994, Regents of the University of California
99
*
1010
* IDENTIFICATION
11-
* $PostgreSQL: pgsql/src/backend/access/gist/gistvacuum.c,v 1.29 2007/01/05 22:19:22 momjian Exp $
11+
* $PostgreSQL: pgsql/src/backend/access/gist/gistvacuum.c,v 1.30 2007/05/31 14:03:09 teodor Exp $
1212
*
1313
*-------------------------------------------------------------------------
1414
*/
@@ -35,6 +35,7 @@ typedef struct
3535
Relationindex;
3636
MemoryContextopCtx;
3737
GistBulkDeleteResult*result;
38+
BufferAccessStrategystrategy;
3839
}GistVacuum;
3940

4041
typedefstruct
@@ -83,7 +84,7 @@ gistDeleteSubtree(GistVacuum *gv, BlockNumber blkno)
8384
Bufferbuffer;
8485
Pagepage;
8586

86-
buffer=ReadBuffer(gv->index,blkno);
87+
buffer=ReadBufferWithStrategy(gv->index,blkno,gv->strategy);
8788
LockBuffer(buffer,GIST_EXCLUSIVE);
8889
page= (Page)BufferGetPage(buffer);
8990

@@ -303,7 +304,7 @@ gistVacuumUpdate(GistVacuum *gv, BlockNumber blkno, bool needunion)
303304

304305
vacuum_delay_point();
305306

306-
buffer=ReadBuffer(gv->index,blkno);
307+
buffer=ReadBufferWithStrategy(gv->index,blkno,gv->strategy);
307308
LockBuffer(buffer,GIST_EXCLUSIVE);
308309
gistcheckpage(gv->index,buffer);
309310
page= (Page)BufferGetPage(buffer);
@@ -550,6 +551,7 @@ gistvacuumcleanup(PG_FUNCTION_ARGS)
550551
initGISTstate(&(gv.giststate),rel);
551552
gv.opCtx=createTempGistContext();
552553
gv.result=stats;
554+
gv.strategy=info->strategy;
553555

554556
/* walk through the entire index for update tuples */
555557
res=gistVacuumUpdate(&gv,GIST_ROOT_BLKNO, false);
@@ -600,7 +602,7 @@ gistvacuumcleanup(PG_FUNCTION_ARGS)
600602

601603
vacuum_delay_point();
602604

603-
buffer=ReadBuffer(rel,blkno);
605+
buffer=ReadBufferWithStrategy(rel,blkno,info->strategy);
604606
LockBuffer(buffer,GIST_SHARE);
605607
page= (Page)BufferGetPage(buffer);
606608

@@ -704,7 +706,7 @@ gistbulkdelete(PG_FUNCTION_ARGS)
704706

705707
while (stack)
706708
{
707-
Bufferbuffer=ReadBuffer(rel,stack->blkno);
709+
Bufferbuffer=ReadBufferWithStrategy(rel,stack->blkno,info->strategy);
708710
Pagepage;
709711
OffsetNumberi,
710712
maxoff;

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp