Re: PATCH: logical_work_mem and logical streaming of large in-progress transactions
Amit Kapila <[email protected]>
| Newsgroups | gmane.comp.db.postgresql.devel.general |
|---|---|
| Message-ID | <CAA4eK1+OhaQpc3tqsAHkbJY7CGh+uB7hputB5V+zroz6O1WmtQ@mail.gmail.com> |
On Mon, Jan 6, 2020 at 3:56 PM Dilip Kumar <[email protected]> wrote: > > On Mon, Jan 6, 2020 at 2:11 PM Amit Kapila <[email protected]> wrote: > > > > 3. > > +static void > > +ReorderBufferStreamTXN(ReorderBuffer *rb, ReorderBufferTXN *txn) > > { > > .. > > + /* > > + * If this is a subxact, we need to stream the top-level transaction > > + * instead. > > + */ > > + if (txn->toptxn) > > + { > > + > > ReorderBufferStreamTXN(rb, txn->toptxn); > > + return; > > + } > > > > Is it ever possible that we reach here for subtransaction, if not, > > then it should be Assert rather than if condition? > > ReorderBufferCheckMemoryLimit, can call it either for the > subtransaction or for the main transaction, depends upon in which > ReorderBufferTXN you are adding the current change. > That function has code like below: ReorderBufferCheckMemoryLimit() { .. if (ReorderBufferCanStream(rb)) { /* * Pick the largest toplevel transaction and evict it from memory by * streaming the already decoded part. */ txn = ReorderBufferLargestTopTXN(rb); /* we know there has to be one, because the size is not zero */ Assert(txn && !txn->toptxn); .. ReorderBufferStreamTXN(rb, txn); .. } How can it ReorderBufferTXN pass for subtransaction? -- With Regards, Amit Kapila. EnterpriseDB: http://www.enterprisedb.com