From: Neil Conway Date: Wed, 17 Nov 2004 03:13:38 +0000 (+0000) Subject: Micro-optimization of markpos() and restrpos() in btree and hash indexes. X-Git-Url: http://git.postgresql.org/gitweb/static/gitweb.js?a=commitdiff_plain;h=770704cb985cf38a8a0aa61d22f67e4f5ce51cbb;p=users%2Fbernd%2Fpostgres.git Micro-optimization of markpos() and restrpos() in btree and hash indexes. Rather than using ReadBuffer() to increment the reference count on an already-pinned buffer, we should use IncrBufferRefCount() as it is faster and does not require acquiring the BufMgrLock. --- diff --git a/src/backend/access/hash/hash.c b/src/backend/access/hash/hash.c index de4058a0f6..56233426ea 100644 --- a/src/backend/access/hash/hash.c +++ b/src/backend/access/hash/hash.c @@ -397,9 +397,8 @@ hashmarkpos(PG_FUNCTION_ARGS) /* bump pin count on currentItemData and copy to currentMarkData */ if (ItemPointerIsValid(&(scan->currentItemData))) { - so->hashso_mrkbuf = _hash_getbuf(rel, - BufferGetBlockNumber(so->hashso_curbuf), - HASH_NOLOCK); + IncrBufferRefCount(so->hashso_curbuf); + so->hashso_mrkbuf = so->hashso_curbuf; scan->currentMarkData = scan->currentItemData; } @@ -425,9 +424,8 @@ hashrestrpos(PG_FUNCTION_ARGS) /* bump pin count on currentMarkData and copy to currentItemData */ if (ItemPointerIsValid(&(scan->currentMarkData))) { - so->hashso_curbuf = _hash_getbuf(rel, - BufferGetBlockNumber(so->hashso_mrkbuf), - HASH_NOLOCK); + IncrBufferRefCount(so->hashso_mrkbuf); + so->hashso_curbuf = so->hashso_mrkbuf; scan->currentItemData = scan->currentMarkData; } diff --git a/src/backend/access/nbtree/nbtree.c b/src/backend/access/nbtree/nbtree.c index bbf6d6c949..43475359a5 100644 --- a/src/backend/access/nbtree/nbtree.c +++ b/src/backend/access/nbtree/nbtree.c @@ -477,8 +477,8 @@ btmarkpos(PG_FUNCTION_ARGS) /* bump pin on current buffer for assignment to mark buffer */ if (ItemPointerIsValid(&(scan->currentItemData))) { - so->btso_mrkbuf = ReadBuffer(scan->indexRelation, - BufferGetBlockNumber(so->btso_curbuf)); + IncrBufferRefCount(so->btso_curbuf); + so->btso_mrkbuf = so->btso_curbuf; scan->currentMarkData = scan->currentItemData; so->mrkHeapIptr = so->curHeapIptr; } @@ -509,8 +509,8 @@ btrestrpos(PG_FUNCTION_ARGS) /* bump pin on marked buffer */ if (ItemPointerIsValid(&(scan->currentMarkData))) { - so->btso_curbuf = ReadBuffer(scan->indexRelation, - BufferGetBlockNumber(so->btso_mrkbuf)); + IncrBufferRefCount(so->btso_mrkbuf); + so->btso_curbuf = so->btso_mrkbuf; scan->currentItemData = scan->currentMarkData; so->curHeapIptr = so->mrkHeapIptr; }