Re: Should pg 11 use a lot more memory building an spgist index?
Tom Lane <tgl@sss.pgh.pa.us>
From: Tom Lane <tgl@sss.pgh.pa.us>
To: Bruno Wolff III <bruno@wolff.to>
Cc: pgsql-general@lists.postgresql.org, pgsql-hackers@lists.postgresql.org
Date: 2018-10-26T09:16:09Z
Lists: pgsql-hackers
Bruno Wolff III <bruno@wolff.to> writes: > I have something that seems to produce it on rhel7. Fedora isn't working > well either, but the difference may be due to postgresql.conf being > different or some difference in the Fedora build. Hmm, in my hands this produces the same size leak (~28GB) in either v10 or v11. In HEAD, somebody's made it even worse (~43GB). So this is certainly pretty broken, but I'm not sure why it seems worse to you in v11 than before. The core of the problem I see is that check_exclusion_or_unique_constraint does index_beginscan/index_rescan/index_endscan in a long-lived context, while spgendscan seems to have employed dice while deciding which of spgbeginscan's allocations it would bother to pfree. This is ancient, though the specific case you have here can only be tested back to v10 because the inet SPGIST opclass wasn't there before. A quick review of the other index AM endscan methods seems to indicate that they all try to clean up their mess. So maybe we should just make spgendscan do likewise. Alternatively, we could decide that requiring endscan methods to free storage is not very safe, in which case it would be incumbent on check_exclusion_or_unique_constraint to make a temporary context to run the scan in. But if we're going to do the latter, I think we oughta go full in and remove the retail pfree's from all the *endscan functions. We'd also have to review other callers of index_beginscan/index_endscan to see which ones might also need their own temp contexts. So that would surely end up being more invasive than just adding some pfree's to spgendscan would be. Maybe in the long run it'd be worth it, but probably not in the short run, or for back-patching. Thoughts? regards, tom lane
Commits
Same data as JSON:
GET /api/v1/messages/:b64id/commits
the thread's linked commits as JSON, with link sources.
API reference →
-
Fix memory leak in repeated SPGIST index scans.
- 696b0c5fd0a8 12.0 landed
- 95015b1f8e8e 9.4.20 landed
- 92e371f9b143 10.6 landed
- 82dd1c271492 9.3.25 landed
- 558571afc7c4 9.6.11 landed
- 156a737a6b73 9.5.15 landed
- 2493e2c2d167 11.1 landed
-
Add support for nearest-neighbor (KNN) searches to SP-GiST
- 2a6368343ff4 12.0 cited