mirror of
https://git.postgresql.org/git/postgresql.git
synced 2025-01-18 18:44:06 +08:00
Improve handling of dead tuples in hash indexes.
When squeezing a bucket during vacuum, it's not necessary to retain any tuples already marked as dead, so ignore them when deciding which tuples must be moved in order to empty a bucket page. Similarly, when splitting a bucket, relocating dead tuples to the new bucket is a waste of effort; instead, just ignore them. Amit Kapila, reviewed by me. Testing help provided by Ashutosh Sharma.
This commit is contained in:
parent
650b967076
commit
f0e72a25b0
@ -656,6 +656,10 @@ _hash_squeezebucket(Relation rel,
|
||||
IndexTuple itup;
|
||||
Size itemsz;
|
||||
|
||||
/* skip dead tuples */
|
||||
if (ItemIdIsDead(PageGetItemId(rpage, roffnum)))
|
||||
continue;
|
||||
|
||||
itup = (IndexTuple) PageGetItem(rpage,
|
||||
PageGetItemId(rpage, roffnum));
|
||||
itemsz = IndexTupleDSize(*itup);
|
||||
|
@ -811,6 +811,10 @@ _hash_splitbucket(Relation rel,
|
||||
Size itemsz;
|
||||
Bucket bucket;
|
||||
|
||||
/* skip dead tuples */
|
||||
if (ItemIdIsDead(PageGetItemId(opage, ooffnum)))
|
||||
continue;
|
||||
|
||||
/*
|
||||
* Fetch the item's hash key (conveniently stored in the item) and
|
||||
* determine which bucket it now belongs in.
|
||||
|
Loading…
Reference in New Issue
Block a user