Re: [HACKERS] [WIP] Effective storage of duplicates in B-tree index.
Anastasia Lubennikova <a.lubennikova@postgrespro.ru>
Attachments
- v18-0001-Add-deduplication-to-nbtree.patch (text/x-patch) patch v18-0001
24.09.2019 3:13, Peter Geoghegan wrote: > On Wed, Sep 18, 2019 at 7:25 PM Peter Geoghegan <pg@bowt.ie> wrote: >> I attach version 16. This revision merges your recent work on WAL >> logging with my recent work on simplifying _bt_dedup_one_page(). See >> my e-mail from earlier today for details. > I attach version 17. This version has changes that are focussed on > further polishing certain things, including fixing some minor bugs. It > seemed worth creating a new version for that. (I didn't get very far > with the space utilization stuff I talked about, so no changes there.) Attached is v18. In this version bt_dedup_one_page() is refactored so that: - no temp page is used, all updates are applied to the original page. - each posting tuple wal logged separately. This also allowed to simplify btree_xlog_dedup significantly. > Another infrastructure thing that the patch needs to handle to be committable: > > We still haven't added an "off" switch to deduplication, which seems > necessary. I suppose that this should look like GIN's "fastupdate" > storage parameter. It's not obvious how to do this in a way that's > easy to work with, though. Maybe we could do something like copy GIN's > GinGetUseFastUpdate() macro, but the situation with nbtree is actually > quite different. There are two questions for nbtree when it comes to > deduplication within an inde: 1) Does the user want to use > deduplication, because that will help performance?, and 2) Is it > safe/possible to use deduplication at all? I'll send another version with dedup option soon. > I think that we should probably stash this information (deduplication > is both possible and safe) in the metapage. Maybe we can copy it over > to our insertion scankey, just like the "heapkeyspace" field -- that > information also comes from the metapage (it's based on the nbtree > version). The "heapkeyspace" field is a bit ugly, so maybe we > shouldn't go further by adding something similar, but I don't see any > great alternative right now. > Why is it necessary to save this information somewhere but rel->rd_options, while we can easily access this field from _bt_findinsertloc() and _bt_load(). -- Anastasia Lubennikova Postgres Professional: http://www.postgrespro.com The Russian Postgres Company
Commits
-
Teach pageinspect about nbtree deduplication.
- 93ee38eade1b 13.0 landed
-
Doc: Fix deduplicate_items index term.
- e537aed61db7 13.0 landed
-
Revise BTP_HAS_GARBAGE nbtree VACUUM comments.
- 4b25f5d0ba01 13.0 cited
-
Remove unneeded "pin scan" nbtree VACUUM code.
- 9f83468b3536 13.0 landed
-
Cleanup code in reloptions.h regarding reloption handling
- 50d22de9325f 13.0 cited
-
Catch invalid typlens in a couple of places
- 8557a6f10ca6 13.0 cited
-
Compute XID horizon for page level index vacuum on primary.
- 558a9165e081 12.0 cited
-
Make heap TID a tiebreaker nbtree index column.
- dd299df8189b 12.0 cited
-
Avoid pin scan for replay of XLOG_BTREE_VACUUM in all cases
- 3e4b7d87988f 9.6.0 cited
-
Revert buggy optimization of index scans
- c7111d11b188 9.6.0 cited
-
Restructure index access method API to hide most of it at the C level.
- 65c5fcd353a8 9.6.0 cited
-
Reduce pinning and buffer content locking for btree scans.
- 2ed5b87f96d4 9.5.0 cited
-
Avoid scanning nulls at the beginning of a btree index scan.
- 1a77f8b63d15 9.2.0 cited