Re: Force streaming every change in logical decoding
Peter Smith <smithpb2250@gmail.com>
From: Peter Smith <smithpb2250@gmail.com>
To: "shiy.fnst@fujitsu.com" <shiy.fnst@fujitsu.com>
Cc: PostgreSQL Hackers <pgsql-hackers@lists.postgresql.org>
Date: 2022-12-13T05:45:00Z
Lists: pgsql-hackers
On Tue, Dec 13, 2022 at 2:33 PM Peter Smith <smithpb2250@gmail.com> wrote: > > On Tue, Dec 6, 2022 at 5:23 PM shiy.fnst@fujitsu.com > <shiy.fnst@fujitsu.com> wrote: > > > > Hi hackers, > > > > In logical decoding, when logical_decoding_work_mem is exceeded, the changes are > > sent to output plugin in streaming mode. But there is a restriction that the > > minimum value of logical_decoding_work_mem is 64kB. I tried to add a GUC to > > allow sending every change to output plugin without waiting until > > logical_decoding_work_mem is exceeded. > > > > This helps to test streaming mode. For example, to test "Avoid streaming the > > transaction which are skipped" [1], it needs many XLOG_XACT_INVALIDATIONS > > messages. With the new option, it can be tested with fewer changes and in less > > time. Also, this new option helps to test more scenarios for "Perform streaming > > logical transactions by background workers" [2]. > > > > [1] https://www.postgresql.org/message-id/CAFiTN-tHK=7LzfrPs8fbT2ksrOJGQbzywcgXst2bM9-rJJAAUg@mail.gmail.com > > [2] https://www.postgresql.org/message-id/flat/CAA4eK1%2BwyN6zpaHUkCLorEWNx75MG0xhMwcFhvjqm2KURZEAGw%40mail.gmail.com > > > > Hi, I've been doing some testing that makes use of this new developer > GUC `force_stream_mode`. > > IIUC this GUC is used by the walsender during the logic of the > ReorderBufferCheckMemoryLimit(). Also, AFAIK the only way that the > walsender is going to know this GUC value is by inheritance from the > parent publisher at the time the walsender process gets launched. > > I may be overthinking this. Isn't there potential for this to become > quite confusing depending on the timing of when this GUC is modified? > > E.g.1 When the walsender is launched, it will use whatever is the > current value of this GUC. > E.g.2 But if the GUC is changed after the walsender is already > launched, then that will have no effect on the already running > walsender. > > Is that understanding correct? > I think I was mistaken above. It looks like even the already-launched walsender gets the updated GUC value via a SIGHUP on the parent publisher. 2022-12-13 16:31:33.453 AEDT [1902] LOG: received SIGHUP, reloading configuration files 2022-12-13 16:31:33.455 AEDT [1902] LOG: parameter "force_stream_mode" changed to "true" Sorry for the noise. ------ Kind Regards, Peter Smith. Fujitsu Australia
Commits
-
Add 'logical_decoding_mode' GUC.
- 5de94a041ed7 16.0 landed
-
Clean up some inconsistencies with GUC declarations
- d9d873bac670 16.0 cited