Re: [HACKERS] [WIP] Effective storage of duplicates in B-tree index.
Peter Geoghegan <pg@bowt.ie>
Attachments
- v21-0001-Teach-datum_image_eq-about-cstring-datums.patch (application/x-patch) patch v21-0001
- v21-0003-DEBUG-Add-pageinspect-instrumentation.patch (application/x-patch) patch v21-0003
- v21-0002-Add-deduplication-to-nbtree.patch (application/x-patch) patch v21-0002
On Mon, Sep 30, 2019 at 7:39 PM Peter Geoghegan <pg@bowt.ie> wrote: > Attached is v20, which adds a custom strategy for the checkingunique > (unique index) case to _bt_dedup_one_page(). It also makes > deduplication the default for both unique and non-unique indexes. I > simply altered your new BtreeDefaultDoDedup() macro from v19 to make > nbtree use deduplication wherever it is safe to do so. This default > may not be the best one in the end, though deduplication in unique > indexes now looks very compelling. Attached is v21, which fixes some bitrot -- v20 of the patch was made totally unusable by today's commit 8557a6f1. Other changes: * New datum_image_eq() patch fixes up datum_image_eq() to work with cstring/name columns, which we rely on. No need for a Valgrind suppressions anymore. The suppression was only needed to paper over the fact that datum_image_eq() would not really work properly with cstring datums (the suppression was papering over a legitimate complaint, but we fix the underlying problem with 8557a6f1 and the v21-0001-* patch). * New nbtdedup.c file added. This has all of the functions that dealt with deduplication and posting lists that were previously in nbtinsert.c and nbtutils.c. I think that this separation is somewhat cleaner. * Additional tweaks to the custom checkingunique algorithm used by deduplication. This is based on further tuning from benchmarking. This is certainly not final yet. * Greatly simplified the code for unique index LP_DEAD killing in _bt_check_unique(). This was pretty sloppy in v20 of the patch (it had two "goto" labels). Now it works with the existing loop conditions that advance to the next equal item on the page. * Additional adjustments to the nbtree.h comments about the on-disk format. Can you take a quick look at the first patch (the v21-0001-* patch), Anastasia? I would like to get that one out of the way soon. -- Peter Geoghegan
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