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 |
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 |