Re: Decoding speculative insert with toast leaks memory
Amit Kapila <amit.kapila16@gmail.com>
From: Amit Kapila <amit.kapila16@gmail.com>
To: Dilip Kumar <dilipbalaut@gmail.com>
Cc: Andres Freund <andres@anarazel.de>,
Ashutosh Bapat <ashutosh.bapat.oss@gmail.com>, Peter Eisentraut <peter.eisentraut@2ndquadrant.com>, Petr Jelinek <petr.jelinek@enterprisedb.com>, PostgreSQL Hackers <pgsql-hackers@lists.postgresql.org>, Tomas Vondra <tomas.vondra@enterprisedb.com>
Date: 2021-06-01T04:51:35Z
Lists: pgsql-hackers
On Tue, Jun 1, 2021 at 9:59 AM Dilip Kumar <dilipbalaut@gmail.com> wrote: > > On Tue, Jun 1, 2021 at 9:53 AM Amit Kapila <amit.kapila16@gmail.com> wrote: > > > > On Mon, May 31, 2021 at 8:12 PM Dilip Kumar <dilipbalaut@gmail.com> wrote: > > > > > > On Mon, May 31, 2021 at 6:32 PM Dilip Kumar <dilipbalaut@gmail.com> wrote: > > > > > > > > I missed to do the test for streaming. I will to that tomorrow and reply back. > > > > > > For streaming transactions this issue is not there. Because this > > > problem will only occur if the last change is *SPEC INSERT * and after > > > that there is no other UPDATE/INSERT change because on that change we > > > are resetting the toast table. Now, if the transaction has only *SPEC > > > INSERT* without SPEC CONFIRM or any other INSERT/UPDATE then we will > > > not stream it. And if we get any next INSERT/UPDATE then only we can > > > select this for stream but in that case toast will be reset. So as of > > > today for streaming mode we don't have this problem. > > > > > > > What if the next change is a different SPEC_INSERT > > (REORDER_BUFFER_CHANGE_INTERNAL_SPEC_INSERT)? I think in that case we > > will stream but won't free the toast memory. > > But if the next change is again the SPEC INSERT then we will keep the > PARTIAL change flag set and we will not select this transaction for > stream right? > Right, I think you can remove the change related to stream xact and probably write some comments on why we don't need it for streamed transactions. But, now I have another question related to fixing the non-streamed case. What if after the missing spec_confirm we get the delete operation in the transaction? It seems ReorderBufferToastReplace always expects Insert/Update if we have toast hash active in the transaction. -- With Regards, Amit Kapila.
Commits
-
Fix ABI break introduced by commit 4daa140a2f.
- e95f617acc48 11.13 landed
- 72b51e214a2c 12.8 landed
- 56e366f6757d 13.4 landed
-
Fix valgrind issue in pgoutput.c.
- 357cb8f07f95 13.4 landed
-
Fix decoding of speculative aborts.
- 43acadfcebec 9.6.23 landed
- 35f56c124a7a 10.18 landed
- 1f8a934e0a86 11.13 landed
- 40ad7ebff6ca 12.8 landed
- 602a32a685e4 13.4 landed
- 4daa140a2f50 14.0 landed
-
pgoutput: Fix memory leak due to RelationSyncEntry.map.
- d2505681211b 13.4 cited
-
Fix initialization of RelationSyncEntry for streaming transactions.
- 69bd60672af6 14.0 cited
-
Implement streaming mode in ReorderBuffer.
- 7259736a6e5b 14.0 cited