Re: Conflict detection for update_deleted in logical replication
Dilip Kumar <dilipbalaut@gmail.com>
On Wed, Dec 11, 2024 at 2:32 PM Zhijie Hou (Fujitsu) <houzj.fnst@fujitsu.com> wrote: > > Attach the V16 patch set which addressed above comments. > > There is a new 0002 patch where I tried to dynamically adjust the interval for > advancing the transaction ID. Instead of always waiting for > wal_receiver_status_interval, we can start with a short interval and increase > it if there is no activity (no xid assigned on subscriber), but not beyond > wal_receiver_status_interval. > > The intention is to more effectively advance xid to avoid retaining too much > dead tuples. My colleague will soon share detailed performance data and > analysis related to this enhancement. I am starting to review the patches, and trying to understand the concept that how you are preventing vacuum to remove the dead tuple which might required by the concurrent remote update, so I was looking at the commit message which explains the idea quite clearly but I have one question The process of advancing the non-removable transaction ID in the apply worker involves: == copied from commit message of 0001 start== 1) Call GetOldestActiveTransactionId() to take oldestRunningXid as the candidate xid. 2) Send a message to the walsender requesting the publisher status, which includes the latest WAL write position and information about transactions that are in the commit phase. 3) Wait for the status from the walsender. After receiving the first status, do not proceed if there are concurrent remote transactions that are still in the commit phase. These transactions might have been assigned an earlier commit timestamp but have not yet written the commit WAL record. Continue to request the publisher status until all these transactions have completed. 4) Advance the non-removable transaction ID if the current flush location has reached or surpassed the last received WAL position. == copied from commit message of 0001 start== So IIUC in step 2) we send the message and get the list of all the transactions which are in the commit phase? What do you exactly mean by a transaction which is in the commit phase? Can I assume transactions which are currently running on the publisher? And in step 3) we wait for all the transactions to get committed which we saw running (or in the commit phase) and we anyway don't worry about the newly started transactions as they would not be problematic for us. And in step 4) we would wait for all the flush location to reach "last received WAL position", here my question is what exactly will be the "last received WAL position" I assume it would be the position somewhere after the position of the commit WAL of all the transaction we were interested on the publisher? At high level the overall idea looks promising to me but wanted to put more thought on lower level details about what transactions exactly we are waiting for and what WAL LSN we are waiting to get flushed. -- Regards, Dilip Kumar EnterpriseDB: http://www.enterprisedb.com
Commits
-
Fix intermittent BF failures in 035_conflicts.
- 0f42206531b3 19 (unreleased) landed
-
Resume conflict-relevant data retention automatically.
- 0d48d393d465 19 (unreleased) landed
-
Fix intermittent test failure introduced in 6456c6e2c4.
- 01d793698f59 19 (unreleased) landed
-
Fix Coverity issue reported in commit a850be2fe.
- 5ac3c1ac22cb 19 (unreleased) landed
-
Add test to prevent premature removal of conflict-relevant data.
- 6456c6e2c4ad 19 (unreleased) landed
-
Post-commit review fixes for 228c370868.
- 1f7e9ba3ac4e 19 (unreleased) landed
-
Add max_retention_duration option to subscriptions.
- a850be2fe653 19 (unreleased) landed
-
Detect and report update_deleted conflicts.
- fd5a1a0c3e56 19 (unreleased) landed
-
Preserve conflict-relevant data during logical replication.
- 228c37086855 19 (unreleased) landed
-
Integrate FullTransactionIds deeper into two-phase code
- 62a17a92833d 19 (unreleased) cited
-
Improve checks for GUC recovery_target_timeline
- fd7d7b719137 19 (unreleased) cited
-
Prevent excessive delays before launching new logrep workers.
- fd519419c948 18.0 cited
-
Keep WAL segments by slot's last saved restart LSN
- ca307d5cec90 18.0 cited
-
Rework some code handling pg_subscription data in psql and pg_dump
- 08691ea958c2 18.0 cited
-
Use generateClonedIndexStmt to propagate CREATE INDEX to partitions.
- 68dfecbef210 18.0 cited