Re: A few patches to clarify snapshot management

From: Heikki Linnakangas <hlinnaka(at)iki(dot)fi>
To: Nathan Bossart <nathandbossart(at)gmail(dot)com>
Cc: "pgsql-hackers(at)postgresql(dot)org" <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: A few patches to clarify snapshot management
Date: 2025-01-06 21:30:33
Message-ID: c7562e2e-29c9-41b8-baf4-b35d7f19c239@iki.fi
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

On 20/12/2024 19:31, Heikki Linnakangas wrote:
>> /*
>>  * Struct representing all kind of possible snapshots.
>>  *
>>  * There are several different kinds of snapshots:
>>  * * Normal MVCC snapshots
>>  * * MVCC snapshots taken during recovery (in Hot-Standby mode)
>>  * * Historic MVCC snapshots used during logical decoding
>>  * * snapshots passed to HeapTupleSatisfiesDirty()
>>  * * snapshots passed to HeapTupleSatisfiesNonVacuumable()
>>  * * snapshots used for SatisfiesAny, Toast, Self where no members are
>>  *     accessed.
>>  *
>>  * TODO: It's probably a good idea to split this struct using a NodeTag
>>  * similar to how parser and executor nodes are handled, with one type
>> for
>>  * each different kind of snapshot to avoid overloading the meaning of
>>  * individual fields.
>>  */
>> typedef struct SnapshotData
>
> I'm thinking of implementing that TODO, splitting SnapshotData into
> separate structs like MVCCSnapshotData, SnapshotDirtyData, etc. It seems
> to me most places can assume that you're dealing with MVCC snapshots,
> and if we had separate types for them, could be using MVCCSnapshot
> instead of the generic Snapshot. Only the table and index AM functions
> need to deal with non-MVCC snapshots.

Here's a draft of that. Going through this exercise clarified a few
things to me that I didn't realize before:

- The executor only deals with MVCC snapshots. Special snapshots are
only for the lower-level AM interfaces.
- Only MVCC snapshots can be pushed to the active stack
- Only MVCC or historic MVCC snapshots can be registered with a resource
owner

Thoughts?

--
Heikki Linnakangas
Neon (https://neon.tech)

Attachment Content-Type Size
v1-0001-Add-comment-with-more-details-on-active-snapshots.patch text/x-patch 3.7 KB
v1-0002-Add-assertions.patch text/x-patch 1.4 KB
v1-0003-wip-Split-SnapshotData-into-multiple-structs.patch text/x-patch 135.1 KB

In response to

Browse pgsql-hackers by date

  From Date Subject
Next Message Andres Freund 2025-01-06 21:40:26 Re: AIO v2.2
Previous Message Tom Lane 2025-01-06 21:29:37 Re: allow changing autovacuum_max_workers without restarting