RE: Conflict detection for update_deleted in logical replication
Zhijie Hou (Fujitsu) <houzj.fnst@fujitsu.com>
Attachments
- v28-0003-Add-a-retain_conflict_info-option-to-subscriptio.patch (application/octet-stream) patch v28-0003
- v28-0004-Introduce-a-new-GUC-max_conflict_retention_durat.patch (application/octet-stream) patch v28-0004
- v28-0005-Re-create-the-replication-slot-if-the-conflict-r.patch (application/octet-stream) patch v28-0005
- v28-0006-Add-a-tap-test-to-verify-the-management-of-the-n.patch (application/octet-stream) patch v28-0006
- v28-0007-Support-the-conflict-detection-for-update_delete.patch (application/octet-stream) patch v28-0007
- v28-0001-Maintain-the-oldest-non-removeable-tranasction-I.patch (application/octet-stream) patch v28-0001
- v28-0002-Maintain-the-replication-slot-in-logical-launche.patch (application/octet-stream) patch v28-0002
On Friday, February 7, 2025 1:47 PM Amit Kapila <amit.kapila16@gmail.com> wrote: > > On Fri, Feb 7, 2025 at 2:18 AM Masahiko Sawada <sawada.mshk@gmail.com> > wrote: > > > > I'd like to confirm what users would expect of this > > max_conflict_retention_duration option and it works as expected. IIUC > > users would want to use this option when they want to balance between > > the reliable update_deleted conflict detection and the performance. I > > think they want to detect updated_deleted reliably as much as possible > > but, at the same time, would like to avoid a huge performance dip > > caused by it. IOW, once the apply lag becomes larger than the limit, > > they would expect to prioritize the performance (recovery) over the > > reliable update_deleted conflict detection. > > > > Yes, this understanding is correct. > > > With the subscription-level max_conflict_retention_duration, users can > > set it to '5min' to a subscription, SUB1, while not setting it to > > another subscription, SUB2, (assuming here that both subscriptions set > > retain_conflict_info = true). This setting works fine if SUB2 could > > easily catch up while SUB1 is delaying, because in this case, SUB1 > > would stop updating its xmin when delaying for 5 min or longer so the > > slot's xmin can advance based only on SUB2's xmin. Which is good > > because it ultimately allow vacuum to remove dead tuples and > > contributes to better performance. On the other hand, in cases where > > SUB2 is as delayed as or more than SUB1, even if SUB1 stopped updating > > its xmin, the slot's xmin would not be able to advance. IIUC > > pg_conflict_detection slot won't be invalidated as long as there is at > > least one subscription that sets retain_conflict_info = true and > > doesn't set max_conflict_retention_duration, even if other > > subscriptions set max_conflict_retention_duration. > > > > Right. > > > I'm not really sure that these behaviors are the expected behavior of > > users who set max_conflict_retention_duration to some subscriptions. > > Or I might have set the wrong expectation or assumption on this > > parameter. I'm fine with a subscription-level > > max_conflict_retention_duration if it's clear this option works as > > expected by users who want to use it. > > Here is the v28 patch set, which converts the subscription option max_conflict_retention_duration into a GUC. Other logic remains unchanged. Best Regards, Hou zj
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