Re: PATCH: logical_work_mem and logical streaming of large in-progress transactions

From: Tomas Vondra <tomas(dot)vondra(at)2ndquadrant(dot)com>
To: Dilip Kumar <dilipbalaut(at)gmail(dot)com>
Cc: Amit Kapila <amit(dot)kapila16(at)gmail(dot)com>, Michael Paquier <michael(at)paquier(dot)xyz>, Peter Eisentraut <peter(dot)eisentraut(at)2ndquadrant(dot)com>, PostgreSQL Hackers <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: PATCH: logical_work_mem and logical streaming of large in-progress transactions
Date: 2019-12-28 16:03:27
Message-ID: 20191228160327.u5ttzrpawh3widyc@development
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-hackers

On Tue, Dec 10, 2019 at 10:23:19AM +0530, Dilip Kumar wrote:
>On Tue, Dec 10, 2019 at 9:52 AM Amit Kapila <amit(dot)kapila16(at)gmail(dot)com> wrote:
>> On Mon, Dec 2, 2019 at 2:02 PM Dilip Kumar <dilipbalaut(at)gmail(dot)com> wrote:
>> >
>> > On Sun, Dec 1, 2019 at 7:58 AM Michael Paquier <michael(at)paquier(dot)xyz> wrote:
>> > >
>> > > On Fri, Nov 22, 2019 at 01:18:11PM +0530, Dilip Kumar wrote:
>> > > > I have rebased the patch on the latest head and also fix the issue of
>> > > > "concurrent abort handling of the (sub)transaction." and attached as
>> > > > (v1-0013-Extend-handling-of-concurrent-aborts-for-streamin) along with
>> > > > the complete patch set. I have added the version number so that we
>> > > > can track the changes.
>> > >
>> > > The patch has rotten a bit and does not apply anymore. Could you
>> > > please send a rebased version? I have moved it to next CF, waiting on
>> > > author.
>> >
>> > I have rebased the patch set on the latest head.
>> >
>> > Apart from this, there is one issue reported by my colleague Vignesh.
>> > The issue is that if we use more than two relations in a transaction
>> > then there is an error on standby (no relation map entry for remote
>> > relation ID 16390). After analyzing I have found that for the
>> > streaming transaction an "is_schema_sent" flag is kept in
>> > ReorderBufferTXN. And, I think that is done so that we can send the
>> > schema for each transaction stream so that if any subtransaction gets
>> > aborted we don't lose the logical WAL for that schema. But, this
>> > solution has induced a very basic issue that if a transaction operate
>> > on more than 1 relation then after sending the schema for the first
>> > relation it will mark the flag true and the schema for the subsequent
>> > relations will never be sent.
>> >
>> How about keeping a list of top-level xids in each RelationSyncEntry?
>> Basically, whenever we send the schema for any transaction, we note
>> that in RelationSyncEntry and at abort time we can remove xid from the
>> list. Now, whenever, we check whether to send schema for any
>> operation in a transaction, we will check if our xid is present in
>> that list for a particular RelationSyncEntry and take an action based
>> on that (if xid is present, then we won't send the schema, otherwise,
>> send it).
>The idea make sense to me. I will try to write a patch for this and test.

Yeah, the "is_schema_sent" flag in ReorderBufferTXN does not work - it
needs to be in the RelationSyncEntry. In fact, I already have code for
that in my private repository - I thought the patches I sent here do
include this, but apparently I forgot to include this bit :-(

Attached is a rebased patch series, fixing this. It's essentially v2
with a couple of patches (0003, 0008, 0009 and 0012) replacing the
is_schema_sent with correct handling.

0003 - removes an is_schema_sent reference added prematurely (it's added
by a later patch, causing compile failure)

0008 - adds the is_schema_sent back (essentially reverting 0003)

0009 - removes is_schema_sent entirely

0012 - adds the correct handling of schema flags in pgoutput

I don't know what other changes you've made since v2, so this way it
should be possible to just take 0003, 0008, 0009 and 0012 and slip them
in with minimal hassle.

FWIW thanks to everyone (and Amit and Dilip in particular) working on
this patch series. There's been a lot of great reviews and improvements
since I abandoned this thread for a while. I expect to be able to spend
more time working on this in January.


Tomas Vondra
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

Attachment Content-Type Size
0001-Immediately-WAL-log-assignments-v3.patch text/plain 10.2 KB
0002-Issue-individual-invalidations-with-wal_level-log-v3.patch text/plain 15.7 KB
0003-fixup-is_schema_sent-set-too-early-v3.patch text/plain 860 bytes
0004-Extend-the-output-plugin-API-with-stream-methods-v3.patch text/plain 34.8 KB
0005-Cleaning-up-of-flags-in-ReorderBufferTXN-structur-v3.patch text/plain 8.1 KB
0006-Gracefully-handle-concurrent-aborts-of-uncommitte-v3.patch text/plain 12.5 KB
0007-Implement-streaming-mode-in-ReorderBuffer-v3.patch text/plain 44.3 KB
0008-fixup-add-is_schema_sent-back-v3.patch text/plain 856 bytes
0009-fixup-get-rid-of-is_schema_sent-entirely-v3.patch text/plain 3.5 KB
0010-Support-logical_decoding_work_mem-set-from-create-v3.patch text/plain 13.1 KB
0011-Add-support-for-streaming-to-built-in-replication-v3.patch text/plain 89.5 KB
0012-fixup-add-proper-schema-tracking-v3.patch text/plain 3.3 KB
0013-Track-statistics-for-streaming-v3.patch text/plain 11.7 KB
0014-Enable-streaming-for-all-subscription-TAP-tests-v3.patch text/plain 14.8 KB
0015-BUGFIX-set-final_lsn-for-subxacts-before-cleanup-v3.patch text/plain 1015 bytes
0016-Add-TAP-test-for-streaming-vs.-DDL-v3.patch text/plain 4.4 KB
0017-Extend-handling-of-concurrent-aborts-for-streamin-v3.patch text/plain 3.7 KB

In response to


Browse pgsql-hackers by date

  From Date Subject
Next Message David Fetter 2019-12-28 16:29:42 Re: Allow WHEN in INSTEAD OF triggers
Previous Message Fabien COELHO 2019-12-28 15:02:12 Re: [PATCH v1] pg_ls_tmpdir to show directories