On Mon, Mar 2, 2020 at 9:01 AM Dilip Kumar <dilipbal...@gmail.com> wrote: > > On Sat, Nov 9, 2019 at 7:29 AM Euler Taveira <eu...@timbira.com.br> wrote: > > > > Em seg., 21 de out. de 2019 às 21:20, Jeff Janes > > <jeff.ja...@gmail.com> escreveu: > > > > > > After setting up logical replication of a slowly changing table using the > > > built in pub/sub facility, I noticed way more network traffic than made > > > sense. Looking into I see that every transaction in that database on the > > > master gets sent to the replica. 99.999+% of them are empty transactions > > > ('B' message and 'C' message with nothing in between) because the > > > transactions don't touch any tables in the publication, only > > > non-replicated tables. Is doing it this way necessary for some reason? > > > Couldn't we hold the transmission of 'B' until something else comes > > > along, and then if that next thing is 'C' drop both of them? > > > > > That is not optimal. Those empty transactions is a waste of bandwidth. > > We can suppress them if no changes will be sent. test_decoding > > implements "skip empty transaction" as you described above and I did > > something similar to it. Patch is attached. > > I think this significantly reduces the network bandwidth for empty > transactions. I have briefly reviewed the patch and it looks good to > me. >
One thing that is not clear to me is how will we advance restart_lsn if we don't send any empty xact in a system where there are many such xacts? IIRC, the restart_lsn is advanced based on confirmed_flush lsn sent by subscriber. After this change, the subscriber won't be able to send the confirmed_flush and for a long time, we won't be able to advance restart_lsn. Is that correct, if so, why do we think that is acceptable? One might argue that restart_lsn will be advanced as soon as we send the first non-empty xact, but not sure if that is good enough. What do you think? -- With Regards, Amit Kapila. EnterpriseDB: http://www.enterprisedb.com