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

Commit12179c9

Browse files
committed
Marginal hack to merge adjacent ReleaseBuffer/ReadBuffer calls into
ReleaseAndReadBuffer during GIST index searches. We already did thisin btree and rtree, might as well do it here too.
1 parent11635c3 commit12179c9

File tree

1 file changed

+22
-16
lines changed

1 file changed

+22
-16
lines changed

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

Lines changed: 22 additions & 16 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/gistget.c,v 1.43 2004/12/31 21:59:10 pgsql Exp $
11+
* $PostgreSQL: pgsql/src/backend/access/gist/gistget.c,v 1.44 2005/02/05 19:38:58 tgl Exp $
1212
*
1313
*-------------------------------------------------------------------------
1414
*/
@@ -60,10 +60,11 @@ gistfirst(IndexScanDesc s, ScanDirection dir)
6060
BlockNumberblk;
6161
IndexTupleit;
6262

63+
so= (GISTScanOpaque)s->opaque;
64+
6365
b=ReadBuffer(s->indexRelation,GISTP_ROOT);
6466
p=BufferGetPage(b);
6567
po= (GISTPageOpaque)PageGetSpecialPointer(p);
66-
so= (GISTScanOpaque)s->opaque;
6768

6869
for (;;)
6970
{
@@ -75,12 +76,14 @@ gistfirst(IndexScanDesc s, ScanDirection dir)
7576

7677
while (n<FirstOffsetNumber||n>maxoff)
7778
{
78-
ReleaseBuffer(b);
79-
if (so->s_stack==NULL)
79+
stk=so->s_stack;
80+
if (stk==NULL)
81+
{
82+
ReleaseBuffer(b);
8083
return false;
84+
}
8185

82-
stk=so->s_stack;
83-
b=ReadBuffer(s->indexRelation,stk->gs_blk);
86+
b=ReleaseAndReadBuffer(b,s->indexRelation,stk->gs_blk);
8487
p=BufferGetPage(b);
8588
po= (GISTPageOpaque)PageGetSpecialPointer(p);
8689
maxoff=PageGetMaxOffsetNumber(p);
@@ -89,6 +92,7 @@ gistfirst(IndexScanDesc s, ScanDirection dir)
8992
n=OffsetNumberPrev(stk->gs_child);
9093
else
9194
n=OffsetNumberNext(stk->gs_child);
95+
9296
so->s_stack=stk->gs_parent;
9397
pfree(stk);
9498

@@ -116,8 +120,7 @@ gistfirst(IndexScanDesc s, ScanDirection dir)
116120
it= (IndexTuple)PageGetItem(p,PageGetItemId(p,n));
117121
blk=ItemPointerGetBlockNumber(&(it->t_tid));
118122

119-
ReleaseBuffer(b);
120-
b=ReadBuffer(s->indexRelation,blk);
123+
b=ReleaseAndReadBuffer(b,s->indexRelation,blk);
121124
p=BufferGetPage(b);
122125
po= (GISTPageOpaque)PageGetSpecialPointer(p);
123126
}
@@ -137,6 +140,8 @@ gistnext(IndexScanDesc s, ScanDirection dir)
137140
BlockNumberblk;
138141
IndexTupleit;
139142

143+
so= (GISTScanOpaque)s->opaque;
144+
140145
blk=ItemPointerGetBlockNumber(&(s->currentItemData));
141146
n=ItemPointerGetOffsetNumber(&(s->currentItemData));
142147

@@ -148,7 +153,6 @@ gistnext(IndexScanDesc s, ScanDirection dir)
148153
b=ReadBuffer(s->indexRelation,blk);
149154
p=BufferGetPage(b);
150155
po= (GISTPageOpaque)PageGetSpecialPointer(p);
151-
so= (GISTScanOpaque)s->opaque;
152156

153157
for (;;)
154158
{
@@ -157,20 +161,23 @@ gistnext(IndexScanDesc s, ScanDirection dir)
157161

158162
while (n<FirstOffsetNumber||n>maxoff)
159163
{
160-
ReleaseBuffer(b);
161-
if (so->s_stack==NULL)
164+
stk=so->s_stack;
165+
if (stk==NULL)
166+
{
167+
ReleaseBuffer(b);
162168
return false;
169+
}
163170

164-
stk=so->s_stack;
165-
b=ReadBuffer(s->indexRelation,stk->gs_blk);
171+
b=ReleaseAndReadBuffer(b,s->indexRelation,stk->gs_blk);
166172
p=BufferGetPage(b);
167-
maxoff=PageGetMaxOffsetNumber(p);
168173
po= (GISTPageOpaque)PageGetSpecialPointer(p);
174+
maxoff=PageGetMaxOffsetNumber(p);
169175

170176
if (ScanDirectionIsBackward(dir))
171177
n=OffsetNumberPrev(stk->gs_child);
172178
else
173179
n=OffsetNumberNext(stk->gs_child);
180+
174181
so->s_stack=stk->gs_parent;
175182
pfree(stk);
176183

@@ -198,8 +205,7 @@ gistnext(IndexScanDesc s, ScanDirection dir)
198205
it= (IndexTuple)PageGetItem(p,PageGetItemId(p,n));
199206
blk=ItemPointerGetBlockNumber(&(it->t_tid));
200207

201-
ReleaseBuffer(b);
202-
b=ReadBuffer(s->indexRelation,blk);
208+
b=ReleaseAndReadBuffer(b,s->indexRelation,blk);
203209
p=BufferGetPage(b);
204210
po= (GISTPageOpaque)PageGetSpecialPointer(p);
205211

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp