mirror of
https://github.com/postgres/postgres.git
synced 2025-07-27 12:41:57 +03:00
Improve comment on why we need ctid->(cmin,cmax) mapping.
Combocids are only part of the problem. Explain the problem in more detail. Reviewed-by: Andres Freund Discussion: https://www.postgresql.org/message-id/1ba2899e-77f8-7866-79e5-f3b7d1251a3e@iki.fi
This commit is contained in:
@ -41,10 +41,15 @@
|
|||||||
* transactions we need Snapshots that see intermediate versions of the
|
* transactions we need Snapshots that see intermediate versions of the
|
||||||
* catalog in a transaction. During normal operation this is achieved by using
|
* catalog in a transaction. During normal operation this is achieved by using
|
||||||
* CommandIds/cmin/cmax. The problem with that however is that for space
|
* CommandIds/cmin/cmax. The problem with that however is that for space
|
||||||
* efficiency reasons only one value of that is stored
|
* efficiency reasons, the cmin and cmax are not included in WAL records. We
|
||||||
* (cf. combocid.c). Since combo CIDs are only available in memory we log
|
* cannot read the cmin/cmax from the tuple itself, either, because it is
|
||||||
* additional information which allows us to get the original (cmin, cmax)
|
* reset on crash recovery. Even if we could, we could not decode combocids
|
||||||
* pair during visibility checks. Check the reorderbuffer.c's comment above
|
* which are only tracked in the original backend's memory. To work around
|
||||||
|
* that, heapam writes an extra WAL record (XLOG_HEAP2_NEW_CID) every time a
|
||||||
|
* catalog row is modified, which includes the cmin and cmax of the
|
||||||
|
* tuple. During decoding, we insert the ctid->(cmin,cmax) mappings into the
|
||||||
|
* reorder buffer, and use them at visibility checks instead of the cmin/cmax
|
||||||
|
* on the tuple itself. Check the reorderbuffer.c's comment above
|
||||||
* ResolveCminCmaxDuringDecoding() for details.
|
* ResolveCminCmaxDuringDecoding() for details.
|
||||||
*
|
*
|
||||||
* To facilitate all this we need our own visibility routine, as the normal
|
* To facilitate all this we need our own visibility routine, as the normal
|
||||||
|
Reference in New Issue
Block a user