On Sun, Mar 8, 2020 at 9:24 PM James Coleman <jtc...@gmail.com> wrote: > > On Saturday, March 7, 2020, Dilip Kumar <dilipbal...@gmail.com> wrote: >> >> On Sat, Mar 7, 2020 at 9:59 AM Dilip Kumar <dilipbal...@gmail.com> wrote: >> > >> > On Sat, Mar 7, 2020 at 12:30 AM Andres Freund <and...@anarazel.de> wrote: >> > > >> > > Hi, >> > > >> > > On 2020-01-08 18:06:52 +0530, Dilip Kumar wrote: >> > > > On Wed, 8 Jan 2020 at 5:28 PM, Heikki Linnakangas <hlinn...@iki.fi> >> > > > wrote: >> > > > >> > > > > On 25/11/2019 05:52, Dilip Kumar wrote: >> > > > > > In logical decoding, while sending the changes to the output >> > > > > > plugin we >> > > > > > need to arrange them in the LSN order. But, if there is only one >> > > > > > transaction which is a very common case then we can avoid building >> > > > > > the >> > > > > > binary heap. A small patch is attached for the same. >> > > > > >> > > > > Does this make any measurable performance difference? Building a >> > > > > one-element binary heap seems pretty cheap. >> > > > >> > > > >> > > > I haven’t really measured the performance for this. I will try to do >> > > > that >> > > > next week. Thanks for looking into this. >> > > >> > > Did you do that? >> > >> > I tried once in my local machine but could not produce consistent >> > results. I will try this once again in the performance machine and >> > report back. >> >> I have tried to decode changes for the 100,000 small transactions and >> measured the time with head vs patch. I did not observe any >> significant gain. >> >> Head >> ------- >> 519ms >> 500ms >> 487ms >> 501ms >> >> patch >> ------ >> 501ms >> 492ms >> 486ms >> 489ms >> >> IMHO, if we conclude that because there is no performance gain so we >> don't want to add one extra path in the code then we might want to >> remove that TODO from the code so that we don't spend time for >> optimizing this in the future. > > > Would you be able to share your test setup? It seems like it’d helpful to get > a larger sample size to better determine if it’s measurable or not. Visually > those 4 runs look to me like it’s possible, but objectively I’m not sure we > can yet conclude one way or the other.
Yeah, my test is very simple CREATE TABLE t1 (a int, b int); SELECT * FROM pg_create_logical_replication_slot('regression_slot', 'test_decoding'); --run 100,000 small transactions with pgbench ./pgbench -f test.sql -c 1 -j 1 -t 100000 -P 1 postgres; --measure time to decode the changes time ./psql -d postgres -c "select count(*) from pg_logical_slot_get_changes('regression_slot', NULL,NULL); *test.sql is just one insert query like below insert into t1 values(1,1); I guess this should be the best case to test this patch because we are decoding a lot of small transactions but it seems the time taken for creating the binary heap is quite small. -- Regards, Dilip Kumar EnterpriseDB: http://www.enterprisedb.com