Re: [WIP] Effective storage of duplicates in B-tree index.
Anastasia Lubennikova <a.lubennikova@postgrespro.ru>
29.01.2016 20:43, Thom Brown: > On 29 January 2016 at 16:50, Anastasia Lubennikova > <a.lubennikova@postgrespro.ru> wrote: >> 29.01.2016 19:01, Thom Brown: >>> On 29 January 2016 at 15:47, Aleksander Alekseev >>> <a.alekseev@postgrespro.ru> wrote: >>>> I tested this patch on x64 and ARM servers for a few hours today. The >>>> only problem I could find is that INSERT works considerably slower after >>>> applying a patch. Beside that everything looks fine - no crashes, tests >>>> pass, memory doesn't seem to leak, etc. >> Thank you for testing. I rechecked that, and insertions are really very very >> very slow. It seems like a bug. >> >>>>> Okay, now for some badness. I've restored a database containing 2 >>>>> tables, one 318MB, another 24kB. The 318MB table contains 5 million >>>>> rows with a sequential id column. I get a problem if I try to delete >>>>> many rows from it: >>>>> # delete from contacts where id % 3 != 0 ; >>>>> WARNING: out of shared memory >>>>> WARNING: out of shared memory >>>>> WARNING: out of shared memory >>>> I didn't manage to reproduce this. Thom, could you describe exact steps >>>> to reproduce this issue please? >>> Sure, I used my pg_rep_test tool to create a primary (pg_rep_test >>> -r0), which creates an instance with a custom config, which is as >>> follows: >>> >>> shared_buffers = 8MB >>> max_connections = 7 >>> wal_level = 'hot_standby' >>> cluster_name = 'primary' >>> max_wal_senders = 3 >>> wal_keep_segments = 6 >>> >>> Then create a pgbench data set (I didn't originally use pgbench, but >>> you can get the same results with it): >>> >>> createdb -p 5530 pgbench >>> pgbench -p 5530 -i -s 100 pgbench >>> >>> And delete some stuff: >>> >>> thom@swift:~/Development/test$ psql -p 5530 pgbench >>> Timing is on. >>> psql (9.6devel) >>> Type "help" for help. >>> >>> >>> ➤ psql://thom@[local]:5530/pgbench >>> >>> # DELETE FROM pgbench_accounts WHERE aid % 3 != 0; >>> WARNING: out of shared memory >>> WARNING: out of shared memory >>> WARNING: out of shared memory >>> WARNING: out of shared memory >>> WARNING: out of shared memory >>> WARNING: out of shared memory >>> WARNING: out of shared memory >>> ... >>> WARNING: out of shared memory >>> WARNING: out of shared memory >>> DELETE 6666667 >>> Time: 22218.804 ms >>> >>> There were 358 lines of that warning message. I don't get these >>> messages without the patch. >>> >>> Thom >> Thank you for this report. >> I tried to reproduce it, but I couldn't. Debug will be much easier now. >> >> I hope I'll fix these issueswithin the next few days. >> >> BTW, I found a dummy mistake, the previous patch contains some unrelated >> changes. I fixed it in the new version (attached). > Thanks. Well I've tested this latest patch, and the warnings are no > longer generated. However, the index sizes show that the patch > doesn't seem to be doing its job, so I'm wondering if you removed too > much from it. Huh, this patch seems to be enchanted) It works fine for me. Did you perform "make distclean"? Anyway, I'll send a new version soon. I just write here to say that I do not disappear and I do remember about the issue. I even almost fixed the insert speed problem. But I'm very very busy this week. I'll send an updated patch next week as soon as possible. Thank you for attention to this work. -- 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