Re: Speed up transaction completion faster after many relations areaccessed in a transaction - Mailing list pgsql-hackers
From | David Rowley |
---|---|
Subject | Re: Speed up transaction completion faster after many relations areaccessed in a transaction |
Date | |
Msg-id | CAKJS1f_ycJ-6QTKC70pZRYdwsAwUo+t0_CV0eXC=J-b5A2MegQ@mail.gmail.com Whole thread Raw |
In response to | Re: Speed up transaction completion faster after many relations areaccessed in a transaction (David Rowley <david.rowley@2ndquadrant.com>) |
Responses |
RE: Speed up transaction completion faster after many relations areaccessed in a transaction
Re: Speed up transaction completion faster after many relations areaccessed in a transaction |
List | pgsql-hackers |
On Thu, 18 Jul 2019 at 14:53, David Rowley <david.rowley@2ndquadrant.com> wrote: > Is anyone particularly concerned about the worst-case slowdown here > being about 1.54%? The best case, and arguably a more realistic case > above showed a 34% speedup for the best case. I took a bit more time to test the performance on this. I thought I might have been a bit unfair on the patch by giving it completely empty tables to look at. It just seems too unrealistic to have a large number of completely empty partitions. I decided to come up with a more realistic case where there are 140 partitions but we're performing an index scan to find a record that can exist in only 1 of the 140 partitions. create table hp (a int, b int) partition by hash(a); select 'create table hp'||x||' partition of hp for values with (modulus 140, remainder ' || x || ');' from generate_series(0,139)x; create index on hp (b); insert into hp select x,x from generate_series(1, 140000) x; analyze hp; select3.sql: select * from hp where b = 1 Master: $ pgbench -n -f select3.sql -T 60 -M prepared postgres tps = 2124.591367 (excluding connections establishing) tps = 2158.754837 (excluding connections establishing) tps = 2146.348465 (excluding connections establishing) tps = 2148.995800 (excluding connections establishing) tps = 2154.223600 (excluding connections establishing) Patched: $ pgbench -n -f select3.sql -T 60 -M prepared postgres tps = 2002.480729 (excluding connections establishing) tps = 1997.272944 (excluding connections establishing) tps = 1992.527079 (excluding connections establishing) tps = 1995.789367 (excluding connections establishing) tps = 2001.195760 (excluding connections establishing) so it turned out it's even slower, and not by a small amount either! Patched is 6.93% slower on average with this case :-( I went back to the drawing board on this and I've added some code that counts the number of times we've seen the table to be oversized and just shrinks the table back down on the 1000th time. 6.93% / 1000 is not all that much. Of course, not all the extra overhead might be from rebuilding the table, so here's a test with the updated patch. $ pgbench -n -f select3.sql -T 60 -M prepared postgres tps = 2142.414323 (excluding connections establishing) tps = 2139.666899 (excluding connections establishing) tps = 2138.744789 (excluding connections establishing) tps = 2138.300299 (excluding connections establishing) tps = 2137.346278 (excluding connections establishing) Just a 0.34% drop. Pretty hard to pick that out the noise. Testing the original case that shows the speedup: create table ht (a int primary key, b int, c int) partition by hash (a); select 'create table ht' || x::text || ' partition of ht for values with (modulus 8192, remainder ' || (x)::text || ');' from generate_series(0,8191) x; \gexec select.sql: \set p 1 select * from ht where a = :p Master: $ pgbench -n -f select.sql -T 60 -M prepared postgres tps = 10172.035036 (excluding connections establishing) tps = 10192.780529 (excluding connections establishing) tps = 10331.306003 (excluding connections establishing) Patched: $ pgbench -n -f select.sql -T 60 -M prepared postgres tps = 15080.765549 (excluding connections establishing) tps = 14994.404069 (excluding connections establishing) tps = 14982.923480 (excluding connections establishing) That seems fine, 46% faster. v6 is attached. I plan to push this in a few days unless someone objects. -- David Rowley http://www.2ndQuadrant.com/ PostgreSQL Development, 24x7 Support, Training & Services
Attachment
pgsql-hackers by date: