Re: logical decoding : exceeded maxAllocatedDescs for .spill files
Amit Kapila <amit.kapila16@gmail.com>
From: Amit Kapila <amit.kapila16@gmail.com>
To: Tom Lane <tgl@sss.pgh.pa.us>
Cc: 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>, Tomas Vondra <tomas.vondra@2ndquadrant.com>
Date: 2020-01-10T04:01:31Z
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 Fri, Jan 10, 2020 at 6:10 AM Tom Lane <tgl@sss.pgh.pa.us> wrote: > > I wrote: > > ReorderBuffer: 223302560 total in 26995 blocks; 7056 free (3 chunks); 223295504 used > > > The test case is only inserting 50K fairly-short rows, so this seems > > like an unreasonable amount of memory to be consuming for that; and > > even if you think it's reasonable, it clearly isn't going to scale > > to large production transactions. > > > Now, the good news is that v11 and later get through > > 006_logical_decoding.pl just fine under the same restriction. > > So we did something in v11 to fix this excessive memory consumption. > > However, unless we're willing to back-port whatever that was, this > > test case is clearly consuming excessive resources for the v10 branch. > > I dug around a little in the git history for backend/replication/logical/, > and while I find several commit messages mentioning memory leaks and > faulty spill logic, they all claim to have been back-patched as far > as 9.4. > > 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. > I think it would be good to narrow down this problem, but it seems we can do this separately. I think to avoid forgetting about this, can we track it somewhere as an open issue (In Older Bugs section of PostgreSQL 12 Open Items or some other place)? It seems to me that this test has found a problem in back-branches, so we might want to keep it after removing the max_files_per_process restriction. However, unless we narrow down this memory leak it is not a good idea to keep it at least not in v10. So, we have the below options: (a) remove this test entirely from all branches and once we found the memory leak problem in back-branches, then consider adding it again without max_files_per_process restriction. (b) keep this test without max_files_per_process restriction till v11 and once the memory leak issue in v10 is found, we can back-patch to v10 as well. Suggestions? > If I have to do so to prove my point, I will set up a buildfarm member > that uses USE_NAMED_POSIX_SEMAPHORES, and then insist that the patch > cope with that. > Shall we document that under USE_NAMED_POSIX_SEMAPHORES, we consume additional fd? I thought about it because the minimum limit for max_files_per_process is 25 and the system won't even start if someone has used a platform where USE_NAMED_POSIX_SEMAPHORES is enabled. Also, if it would have been explicitly mentioned, then I think this test wouldn't have tried to become so optimistic about max_files_per_process. -- With Regards, Amit Kapila. EnterpriseDB: http://www.enterprisedb.com