Re: logical decoding : exceeded maxAllocatedDescs for .spill files
Tomas Vondra <tomas.vondra@2ndquadrant.com>
From: Tomas Vondra <tomas.vondra@2ndquadrant.com>
To: Tom Lane <tgl@sss.pgh.pa.us>
Cc: Amit Kapila <amit.kapila16@gmail.com>, Noah Misch <noah@leadboat.com>, Amit Khandekar <amitdkhan.pg@gmail.com>, Alvaro Herrera from 2ndQuadrant <alvherre@alvh.no-ip.org>, Andres Freund <andres@anarazel.de>, Juan José Santamaría Flecha <juanjo.santamaria@gmail.com>, PostgreSQL Hackers <pgsql-hackers@lists.postgresql.org>, Robert Haas <robertmhaas@gmail.com>, Thomas Munro <thomas.munro@gmail.com>
Date: 2020-01-12T04:10:08Z
Lists: pgsql-hackers
Commits
Same data as JSON:
GET /api/v1/messages/:b64id/commits
the thread's linked commits as JSON, with link sources.
API reference →
-
When a TAP file has non-zero exit status, retain temporary directories.
- 048c7ccd7d6d 9.6.17 landed
- d8efc5900f7c 10.12 landed
- 887657d183fc 11.7 landed
- 78a26c3edd85 12.2 landed
- bf989aaf3561 13.0 landed
-
Fix running out of file descriptors for spill files.
- 1ad47e8757bb 9.4.26 landed
- a6f4f407ada0 9.5.21 landed
- 27b5f48c79f7 10.12 landed
- 3e3a79735235 11.7 landed
- f8a6d8e71b17 12.2 landed
- d20703805383 13.0 landed
- ba5b4e506489 9.6.17 landed
-
Track statistics for spilling of changes from ReorderBuffer.
- 9290ad198b15 13.0 cited
-
Handle ReadFile() EOF correctly on Windows.
- 2189f49c420f 12.2 landed
- 6969deeb8d39 13.0 landed
-
Add logical_decoding_work_mem to limit ReorderBuffer memory usage.
- cec2edfa7859 13.0 cited
-
Generational memory allocator
- a4ccc1cef5a0 11.0 cited
-
Support retaining data dirs on successful TAP tests
- 90627cf98a8e 11.0 cited
On Sat, Jan 11, 2020 at 10:53:57PM -0500, Tom Lane wrote: >Tomas Vondra <tomas.vondra@2ndquadrant.com> writes: >> On Thu, Jan 09, 2020 at 07:40:12PM -0500, Tom Lane wrote: >>> It seems reasonably likely to me that this result is telling us about >>> an actual bug, ie, faulty back-patching of one or more of those fixes >>> into v10 and perhaps earlier branches. > >> Well, one thing we did in 11 is introduction of the Generation context. >> In 10 we're still stashing all tuple data into the main AllocSet. I >> wonder if backporting a4ccc1cef5a04cc054af83bc4582a045d5232cb3 and a >> couple of follow-up fixes would make the issue go away. > >Hm. I'm loath to back-port Generation contexts. Yeah, I agree. My suggestion was to try backpatching it and see if it resolves the issue. >But looking at >a4ccc1cef5a04cc054af83bc4582a045d5232cb3, I see that (a) the >commit message mentions space savings, but (b) the replaced code >in reorderbuffer.c doesn't look like it really would move the needle >much in that regard. The old code had a one-off slab allocator >that we got rid of, but I don't see any actual leak there ... >remind me where the win came from, exactly? > Well, the problem is that in 10 we allocate tuple data in the main memory ReorderBuffer context, and when the transaction gets decoded we pfree() it. But in AllocSet that only moves the data to the freelists, it does not release it entirely. So with the right allocation pattern (sufficiently diverse chunk sizes) this can easily result in allocation of large amount of memory that is never released. I don't know if this is what's happening in this particular test, but I wouldn't be surprised by it. regards -- Tomas Vondra http://www.2ndQuadrant.com PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services