Re: speed up a logical replica setup

Amit Kapila <amit.kapila16@gmail.com>

From: Amit Kapila <amit.kapila16@gmail.com>
To: "Hayato Kuroda (Fujitsu)" <kuroda.hayato@fujitsu.com>
Cc: Tom Lane <tgl@sss.pgh.pa.us>, Alexander Lakhin <exclusion@gmail.com>, Peter Eisentraut <peter@eisentraut.org>, Euler Taveira <euler@eulerto.com>, Shlok Kyal <shlok.kyal.oss@gmail.com>, Tomas Vondra <tomas.vondra@enterprisedb.com>, Bharath Rupireddy <bharath.rupireddyforpostgres@gmail.com>, "pgsql-hackers@lists.postgresql.org" <pgsql-hackers@lists.postgresql.org>, Michael Paquier <michael@paquier.xyz>, Andres Freund <andres@anarazel.de>, Ashutosh Bapat <ashutosh.bapat.oss@gmail.com>, Fabrízio de Royes Mello <fabriziomello@gmail.com>, vignesh C <vignesh21@gmail.com>
Date: 2024-07-03T05:57:50Z
Lists: pgsql-hackers

Commits

Same data as JSON: GET /api/v1/messages/:b64id/commits the thread's linked commits as JSON, with link sources. API reference →
  1. pg_createsubscriber: Remove obsolete comment

  2. pg_createsubscriber: Fix an unpredictable recovery wait time.

  3. Fix unstable test in 040_pg_createsubscriber.

  4. Fix the testcase introduced in commit 81d20fbf7a.

  5. Further weaken new pg_createsubscriber test on Windows.

  6. Temporarily(?) weaken new pg_createsubscriber test on Windows.

  7. Make pg_createsubscriber warn if publisher has two-phase commit enabled.

  8. Make pg_createsubscriber more wary about quoting connection parameters.

  9. pg_createsubscriber: Remove failover replication slots on subscriber

  10. pg_createsubscriber: Remove replication slot check on primary

  11. pg_createsubscriber: Only --recovery-timeout controls the end of recovery process

  12. pg_createsubscriber: creates a new logical replica from a standby server

  13. Add some const decorations

  14. Add option force_initdb to PostgreSQL::Test::Cluster:init()

  15. Remove MSVC scripts

On Wed, Jul 3, 2024 at 9:21 AM Hayato Kuroda (Fujitsu)
<kuroda.hayato@fujitsu.com> wrote:
>
> Dear Amit,
>
> > IIUC, the problem is that the consistent_lsn value returned by
> > setup_publisher() is the "end +1" location of the required LSN whereas
> > the recovery_target_lsn used in wait_for_end_recovery() expects the
> > LSN value to be "start" location of required LSN.
>
> Yeah, right. It is same as my understanding.
>
> > This sounds like an ugly hack to me and don't know if we can use it.
>
> I also think it is hacky, but I could not find better solutions.
>
> > The ideal way to fix this is to get the start_lsn from the
> > create_logical_slot functionality or have some parameter like
> > recover_target_end_lsn but I don't know if this is a good time to
> > extend such a functionality.
>
> I felt that such approach might be used for HEAD, but not suitable for PG17.
> Alternative approach I came up with was to insert a tuple while waiting the
> promotion. It can generate a WAL record so that standby can finish after the
> application. But I'm not sure how do we do and it seems to lead an additional
> timing issue. Also, this does not improve the behavior of the command - normal
> user may have to wait some time by the command.
>

BTW, I think the time required by standby to reach a consistent state
after startup is any way unpredictable. For example, if we consider
that in real-world scenarios between the time we have stopped standby
and restarted it, there could be many transactions on primary that
need to be replicated before we reach recover_target_lsn.

I don't think adding additional (dummy) WAL records is a good solution
but it is better to hear from others.

> Do you have any other idea?
>

The other idea could be that we use the minimum restart_lsn of all the
slots created by this tool as a consistent_lsn. We can probably get
that value by using pg_get_replication_slots() but this idea needs
further evaluation as to whether it will lead to a consistent
subscriber.

-- 
With Regards,
Amit Kapila.