Re: Minimal logical decoding on standbys
bdrouvotAWS <bdrouvot@amazon.com>
Commits
GET /api/v1/messages/:b64id/commits
the thread's linked commits as JSON, with link sources.
API reference →
-
Reduce the log level in 035_standby_logical_decoding.pl.
- 3034dc56ef4b 16.0 landed
-
035_standby_logical_decoding: Add missing waits for replication
- 57411c82ce86 16.0 landed
-
For cascading replication, wake physical and logical walsenders separately
- e101dfac3a53 16.0 landed
-
Handle logical slot conflicts on standby
- 26669757b6a7 16.0 landed
-
Support invalidating replication slots due to horizon and wal_level
- be87200efd93 16.0 landed
-
Prevent use of invalidated logical slot in CreateDecodingContext()
- 4397abd0a2af 16.0 landed
-
Replace replication slot's invalidated_at LSN with an enum
- 15f8203a5975 16.0 landed
-
Pass down table relation into more index relation functions
- 61b313e47eb9 16.0 landed
-
Assert only valid flag bits are passed to visibilitymap_set()
- a88a18b1250b 16.0 landed
-
Remove unused _bt_delitems_delete() argument.
- dc43492e46c7 14.0 cited
-
Add xl_btree_delete optimization.
- d2e5e20e5711 13.0 cited
Hi,
On 9/17/21 10:32 PM, Fabrízio de Royes Mello wrote:
>
> On Wed, Sep 15, 2021 at 8:36 AM Drouvot, Bertrand <bdrouvot@amazon.com
> <mailto:bdrouvot@amazon.com>> wrote:
> >
> > Another rebase attached.
> >
> > The patch proposal to address Andre's walsender corner cases is
> still a dedicated commit (as i think it may be easier to discuss).
> >
>
> Did one more battery of tests and everything went well...
Thanks for looking at it!
>
> But doing some manually tests:
>
> 1. Setup master/replica (wal_level=logical, hot_standby_feedback=on, etc)
> 2. Initialize the master instance: "pgbench -i -s10 on master"
> 3. Terminal1: execute "pgbench -c20 -T 2000"
> 4. Terminal2: create the logical replication slot:
>
> 271480 (replica) fabrizio=# select * from
> pg_create_logical_replication_slot('test_logical', 'test_decoding');
> -[ RECORD 1 ]-----------
> slot_name | test_logical
> lsn | 1/C7C59E0
>
> Time: 37658.725 ms (00:37.659)
>
>
> Even with activity on primary the creation of the logical replication
> slot took ~38s. Can we do something related to it or should we need to
> clarify even more the documentation?
>
For the logical slot creation on the standby, as we can not do WAL
writes, we have to wait for xl_running_xact to be logged on the primary
and be replayed on the standby.
So we are somehow dependent on the checkpoints on the primary and
LOG_SNAPSHOT_INTERVAL_MS.
If we want to get rid of this, what i could think of is the standby
having to ask the primary to log a standby snapshot (until we get one we
are happy with).
Or, we may just want to mention in the doc:
+ For a logical slot to be created, it builds a historic snapshot,
for which
+ information of all the currently running transactions is essential. On
+ primary, this information is available, but on standby, this
information
+ has to be obtained from primary. So, creating a logical slot on
standby
+ may take a noticeable time.
Instead of:
+ For a logical slot to be created, it builds a historic snapshot,
for which
+ information of all the currently running transactions is essential. On
+ primary, this information is available, but on standby, this
information
+ has to be obtained from primary. So, slot creation may wait for some
+ activity to happen on the primary. If the primary is idle, creating a
+ logical slot on standby may take a noticeable time.
What do you think?
Thanks
Bertrand