Re: logical decoding and replication of sequences, take 2
Tomas Vondra <tomas.vondra@enterprisedb.com>
From: Tomas Vondra <tomas.vondra@enterprisedb.com>
To: Andres Freund <andres@anarazel.de>, Robert Haas <robertmhaas@gmail.com>
Cc: PostgreSQL Hackers <pgsql-hackers@lists.postgresql.org>
Date: 2023-01-11T21:30:42Z
Lists: pgsql-hackers
Commits
Same data as JSON:
GET /api/v1/messages/:b64id/commits
the thread's linked commits as JSON, with link sources.
API reference →
-
Migrate logical slots to the new node during an upgrade.
- 29d0a77fa660 17.0 cited
-
Make test_decoding ddl.out shorter
- d6677b93c79b 17.0 landed
- c5c5832600e9 14.9 landed
- b1dc946eee3d 16.0 landed
- 3bb8b9342f8a 15.4 landed
-
Fix snapshot handling in logicalmsg_decode
- 949ac32e1267 15.3 landed
- 8b9cbd42b61f 14.8 landed
- 4df581fa0f4b 13.11 landed
- 497f863f0598 12.15 landed
- 8de91ebf2ac1 11.20 landed
- 7fe1aa991b62 16.0 landed
-
doc: Adjust a few more references to "postmaster"
- 17e72ec45d31 16.0 cited
-
Revert "Logical decoding of sequences"
- 2c7ea57e56ca 15.0 cited
On 1/11/23 21:58, Andres Freund wrote: > Hi, > > On 2023-01-11 15:41:45 -0500, Robert Haas wrote: >> I wonder, then, what happens if somebody wants to do parallel apply. That >> would seem to require some relaxation of this rule, but then doesn't that >> break what this patch wants to do? > > I don't think it'd pose a direct problem - presumably you'd only parallelize > applying changes, not committing the transactions containing them. You'd get a > lot of inconsistencies otherwise. > Right. It's the commit order that matters - as long as that's maintained, the result should be consistent etc. There's plenty of other hard problems, though - for example it's trivial for the apply workers to apply the changes in the incorrect order (contradicting commit order) and then a deadlock. And the deadlock detector may easily keep aborting the incorrect worker (the oldest one), so that the replication grinds down to a halt. I was wondering recently how far would we get by just doing prefetch for logical apply - instead of applying the changes, just try doing a lookup on he replica identity values, and then simple serial apply. > If you're thinking of decoding changes in parallel (rather than streaming out > large changes before commit when possible), you'd only be able to do that in > cases when transaction haven't performed catalog changes, I think. In which > case there'd also be no issue wrt transactional sequence changes. > Perhaps, although it's not clear to me how would you know that in advance? I mean, you could start decoding changes in parallel, and then you find one of the earlier transactions touched a catalog. Bu maybe I misunderstand what "decoding" refers to - don't we need the snapshot only in reorderbuffer? In which case all the other stuff could be parallelized (not sure if that's really expensive). Anyway, all of this is far out of scope of this patch. regards -- Tomas Vondra EnterpriseDB: http://www.enterprisedb.com The Enterprise PostgreSQL Company