Re: Historic snapshot doesn't track txns committed in BUILDING_SNAPSHOT state

Поиск
Список
Период
Сортировка
От cca5507
Тема Re: Historic snapshot doesn't track txns committed in BUILDING_SNAPSHOT state
Дата
Msg-id tencent_7FA4F0A916374550860AEFF280CC6E2A7405@qq.com
обсуждение исходный текст
Ответ на Re: Historic snapshot doesn't track txns committed in BUILDING_SNAPSHOT state  (Ajin Cherian <itsajin@gmail.com>)
Список pgsql-hackers
Hi,

If I understand correctly, this may break the basic principle:

The aim is to build a snapshot that behaves the same as a freshly taken MVCC snapshot would have at the time the XLogRecord was generated.

--
Regards,
ChangAo Chen

------------------ Original ------------------
From: "Ajin Cherian" <itsajin@gmail.com>;
Date: Fri, Jun 27, 2025 06:29 PM
To: "cca5507"<cca5507@qq.com>;
Cc: "Bertrand Drouvot"<bertranddrouvot.pg@gmail.com>;"Michael Paquier"<michael@paquier.xyz>;"pgsql-hackers"<pgsql-hackers@lists.postgresql.org>;
Subject: Re: Historic snapshot doesn't track txns committed in BUILDING_SNAPSHOT state

On Fri, Jun 27, 2025 at 3:48 PM cca5507 <cca5507@qq.com> wrote:
>
> Hi,
>
> I refactor the code and fix the git apply warning according to [1].
>
> Here are the new version patches.
>
> --
> Regards,
> ChangAo Chen
>
> [1] https://www.postgresql.org/message-id/Zrmh7X8jYCbFYXjH%40ip-10-97-1-34.eu-west-3.compute.internal

I see this problem is similar to the bug reported in [1], and your fix
also addresses the issue reported there. Although I like your approach
of tracking changes starting from the BUILDING_SNAPSHOT state, I’d
like to suggest an alternative.

While debugging that issue, my plan was not to track catalog changes
prior to SNAPBUILD_CONSISTENT, but instead to ensure we don’t use
snapshots built before SNAPBUILD_CONSISTENT, since we don’t track
catalog changes in those states. We should discard previously built
snapshots and rebuild them once we reach the SNAPBUILD_CONSISTENT
state. At that point, all necessary transactions would have been
committed, and builder->xmin would have advanced enough to decode all
transactions from then on.

The problem is that previously built snapshots hang around without the
latest xmin and xmax, and we tend to reuse them. We should ensure that
all txn->base_snapshot and builder->snapshot snapshots built in the
SNAPBUILD_FULL_SNAPSHOT state are rebuilt once we reach
SNAPBUILD_CONSISTENT. For this, we need to track when the snapshot was
built. There is already a field in ReorderBufferTXN -
'base_snapshot_lsn' which we can use. If base_snapshot_lsn <
builder->start_decoding_at, then we should rebuild the snapshot. Just
a thought.

regards,
Ajin Cherian
Fujitsu Australia

[1] - https://www.postgresql.org/message-id/18509-983f064d174ea880%40postgresql.org

В списке pgsql-hackers по дате отправления: