mirror of
https://github.com/postgres/postgres.git
synced 2025-10-25 13:17:41 +03:00
Fix leaking of small spilled subtransactions during logical decoding.
When, during logical decoding, a transaction gets too big, it's
contents get spilled to disk. Not just the top-transaction gets
spilled, but *also* all of its subtransactions, even if they're not
that large themselves. Unfortunately we didn't clean up
such small spilled subtransactions from disk.
Fix that, by keeping better track of whether a transaction has been
spilled to disk.
Author: Andres Freund
Reported-By: Dmitriy Sarafannikov, Fabrízio de Royes Mello
Discussion:
https://postgr.es/m/1457621358.355011041@f382.i.mail.ru
https://postgr.es/m/CAFcNs+qNMhNYii4nxpO6gqsndiyxNDYV0S=JNq0v_sEE+9PHXg@mail.gmail.com
Backpatch: 9.4-, where logical decoding was introduced
This commit is contained in:
@@ -212,6 +212,15 @@ typedef struct ReorderBufferTXN
|
||||
*/
|
||||
uint64 nentries_mem;
|
||||
|
||||
/*
|
||||
* Has this transaction been spilled to disk? It's not always possible to
|
||||
* deduce that fact by comparing nentries with nentries_mem, because
|
||||
* e.g. subtransactions of a large transaction might get serialized
|
||||
* together with the parent - if they're restored to memory they'd have
|
||||
* nentries_mem == nentries.
|
||||
*/
|
||||
bool serialized;
|
||||
|
||||
/*
|
||||
* List of ReorderBufferChange structs, including new Snapshots and new
|
||||
* CommandIds
|
||||
|
||||
Reference in New Issue
Block a user