Re: Making all nbtree entries unique by having heap TIDs participate in comparisons
Peter Geoghegan <pg@bowt.ie>
From: Peter Geoghegan <pg@bowt.ie>
To: Heikki Linnakangas <hlinnaka@iki.fi>
Cc: Dmitry Dolgov <9erthalion6@gmail.com>,
Robert Haas <robertmhaas@gmail.com>, Peter Eisentraut <peter.eisentraut@2ndquadrant.com>, PostgreSQL Hackers <pgsql-hackers@postgresql.org>, Alexander Korotkov <a.korotkov@postgrespro.ru>,
Thomas Munro <thomas.munro@enterprisedb.com>, Claudio Freire <klaussfreire@gmail.com>, Anastasia Lubennikova <a.lubennikova@postgrespro.ru>, "Andrey V. Lepikhov" <a.lepikhov@postgrespro.ru>
Date: 2019-03-16T21:07:28Z
Lists: pgsql-hackers
On Sat, Mar 16, 2019 at 2:01 PM Peter Geoghegan <pg@bowt.ie> wrote: > > On Sat, Mar 16, 2019 at 1:47 PM Peter Geoghegan <pg@bowt.ie> wrote: > > I agree that it's always true that the high key is also in the parent, > > and we could cross-check that within the child. Actually, I should > > probably figure out a way of arranging for the Bloom filter used > > within bt_relocate_from_root() (which has been around since PG v11) to > > include the key itself when fingerprinting. That would probably > > necessitate that we don't truncate "negative infinity" items (it was > > actually that way about 18 years ago), just for the benefit of > > verification. > > Clarification: You'd fingerprint an entire pivot tuple -- key, block > number, everything. Then, you'd probe the Bloom filter for the high > key one level down, with the downlink block in the high key set to > point to the current sibling on the same level (the child level). As I > said, I think that the only reason that that cannot be done at present > is because of the micro-optimization of truncating the first item on > the right page to zero attributes during an internal page split. (We > can retain the key without getting rid of the hard-coded logic for > negative infinity within _bt_compare()). > > bt_relocate_from_root() already has smarts around interrupted page > splits (with the incomplete split bit set). Clarification to my clarification: I meant bt_downlink_missing_check(), not bt_relocate_from_root(). The former really has been around since v11, unlike the latter, which is part of this new amcheck patch we're discussing. -- Peter Geoghegan
Commits
-
Add "split after new tuple" nbtree optimization.
- f21668f328c8 12.0 landed
-
Add nbtree high key "continuescan" optimization.
- 29b64d1de7c7 12.0 landed
-
Allow amcheck to re-find tuples using new search.
- c1afd175b5b2 12.0 landed
-
Consider secondary factors during nbtree splits.
- fab250243387 12.0 landed
-
Make heap TID a tiebreaker nbtree index column.
- dd299df8189b 12.0 landed
-
Refactor nbtree insertion scankeys.
- e5adcb789d80 12.0 landed
-
Redesign the partition dependency mechanism.
- 1d92a0c9f7dd 12.0 cited
-
Avoid unnecessary palloc overhead in _bt_first(). The temporary
- d961a5689966 8.1.0 cited