From: | Melih Mutlu <m(dot)melihmutlu(at)gmail(dot)com> |
---|---|
To: | Euler Taveira <euler(at)eulerto(dot)com> |
Cc: | Andres Freund <andres(at)anarazel(dot)de>, Amit Kapila <amit(dot)kapila16(at)gmail(dot)com>, Marcos Pegoraro <marcos(at)f10(dot)com(dot)br>, pgsql-hackers <pgsql-hackers(at)postgresql(dot)org>, smithpb2250(at)gmail(dot)com |
Subject: | Re: logical replication restrictions |
Date: | 2022-07-13 17:34:36 |
Message-ID: | CAGPVpCQgE1e0JQFHbxSpfj82HQfAqGmhG=yru3mX2tcmbfqHYA@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
Hi Euler,
I've some comments/questions about the latest version (v4) of your patch.
Firstly, I think the patch needs a rebase. CI currently cannot apply it [1].
22. src/test/subscription/t/032_apply_delay.pl
>
> I received the following error when trying to run these 'subscription'
> tests:
>
> t/032_apply_delay.pl ............... No such class log_location at
> t/032_apply_delay.pl line 49, near "my log_location"
> syntax error at t/032_apply_delay.pl line 49, near "my log_location ="
>
I'm having these errors too. Seems like some declarations are missing.
+ specified amount of time. If this value is specified without
>> units,
>
> + it is taken as milliseconds. The default is zero, adding no
>> delay.
>
> + </para>
>
> I'm also having an issue when I give min_apply_delay parameter without
units.
I expect that if I set min_apply_delay to 5000 (without any unit), it will
be interpreted as 5000 ms.
I tried:
postgres=# CREATE SUBSCRIPTION testsub CONNECTION 'dbname=postgres
port=5432' PUBLICATION testpub WITH (min_apply_delay=5000);
And logs showed:
2022-07-13 20:26:52.231 +03 [5422] LOG: logical replication apply delay:
4999999 ms
2022-07-13 20:26:52.231 +03 [5422] CONTEXT: processing remote data for
replication origin "pg_18126" during "BEGIN" in transaction 3152 finished
at 0/465D7A0
Looks like it starts from 5000000 ms instead of 5000 ms for me. If I state
the unit as ms, then it works correctly.
Lastly, I have a question about this delay during tablesync.
It's stated here that apply delays are not for initial tablesync.
<para>
>
> + The delay occurs only on WAL records for transaction begins and
>> after
>
> + the initial table synchronization. It is possible that the
>
> + replication delay between publisher and subscriber exceeds the
>> value
>
> + of this parameter, in which case no delay is added. Note that
>> the
>
> + delay is calculated between the WAL time stamp as written on
>
> + publisher and the current time on the subscriber. Delays in
>> logical
>
> + decoding and in transfer the transaction may reduce the actual
>> wait
>
> + time. If the system clocks on publisher and subscriber are not
>
> + synchronized, this may lead to apply changes earlier than
>> expected.
>
> + This is not a major issue because a typical setting of this
>> parameter
>
> + are much larger than typical time deviations between servers.
>
> + </para>
>
>
There might be a case where tablesync workers are in SYNCWAIT state and
waiting for apply worker to tell them to CATCHUP.
And if apply worker is waiting in apply_delay function, tablesync workers
will be stuck at SYNCWAIT state and this might delay tablesync at least
"min_apply_delay" amount of time or more.
Is it something we would want? What do you think?
[1] http://cfbot.cputube.org/patch_38_3581.log
Best,
Melih
From | Date | Subject | |
---|---|---|---|
Next Message | Tom Lane | 2022-07-13 17:41:35 | Re: make update-po@master stops at pg_upgrade |
Previous Message | Justin Pryzby | 2022-07-13 17:30:00 | Re: fix stats_fetch_consistency value in postgresql.conf.sample |