Re: postgres_fdw batching vs. (re)creating the tuple slots
Tom Lane <tgl@sss.pgh.pa.us>
From: Tom Lane <tgl@sss.pgh.pa.us>
To: Andres Freund <andres@anarazel.de>
Cc: Tomas Vondra <tomas.vondra@enterprisedb.com>,
PostgreSQL-development <pgsql-hackers@postgresql.org>
Date: 2021-05-30T21:10:59Z
Lists: pgsql-hackers
Andres Freund <andres@anarazel.de> writes: > On 2021-05-30 22:22:10 +0200, Tomas Vondra wrote: >> The other problem is that ResourceArrayAdd/Remove seem to behave a bit >> poorly with very many elements - I'm not sure if it's O(N^2) or worse, >> but growing the array and linear searches seem to be a bit expensive. > Hm. I assume this is using the hashed representation of a resowner array > most of the time, not the array one? I suspect the problem is that > pretty quickly the ResourceArrayRemove() degrades to a linear search, > because all of the resowner entries are the same, so the hashing doesn't > help us at all. The peril of a simplistic open-coded hash table :( Not only does ResourceArrayRemove degrade, but so does ResourceArrayAdd. > I think in this specific situation the easiest workaround is to use a > copy of the tuple desc, instead of the one in the relcache - the copy > won't be refcounted. Probably. There's no obvious reason why these transient slots need a long-lived tupdesc. But it does seem like the hashing scheme somebody added to resowners is a bit too simplistic. It ought to be able to cope with lots of refs to the same object, or at least not be extra-awful for that case. regards, tom lane
Commits
-
Fix copying data into slots with FDW batching
- 99cea49d6525 14.0 landed
-
Optimize creation of slots for FDW bulk inserts
- b676ac443b6a 14.0 landed
-
Adjust batch size in postgres_fdw to not use too many parameters
- cb92703384e2 14.0 cited