Re: [HACKERS] [WIP] Effective storage of duplicates in B-tree index.
Alexander Korotkov <a.korotkov@postgrespro.ru>
On Thu, Jul 11, 2019 at 7:53 AM Peter Geoghegan <pg@bowt.ie> wrote: > Anyway, I think that *hundreds* or even *thousands* of rows are > effectively locked all at once when a bitmap index needs to be updated > in these other systems -- and I mean a heavyweight lock that lasts > until the xact commits or aborts, like a Postgres row lock. As I said, > this is necessary simply because the transaction might need to roll > back. Of course, your patch never needs to do anything like that -- > the only risk is that buffer lock contention will be increased. Maybe > VACUUM isn't so bad after all! > > Doing deduplication adaptively and automatically in nbtree seems like > it might play to the strengths of Postgres, while also ameliorating > its weaknesses. As the same paper goes on to say, it's actually quite > unusual that PostgreSQL has *transactional* full text search built in > (using GIN), and offers transactional, high concurrency spatial > indexing (using GiST). Actually, this is an additional advantages of > our "pure" approach to MVCC -- we can add new high concurrency, > transactional access methods relatively easily. Good finding, thank you! BTW, I think deduplication could cause some small performance degradation in some particular cases, because page-level locks became more coarse grained once pages hold more tuples. However, this doesn't seem like something we should much care about. Providing an option to turn deduplication off looks enough for me. Regarding bitmap indexes itself, I think our BRIN could provide them. However, it would be useful to have opclass parameters to make them tunable. ------ Alexander Korotkov 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