Re: Can we get rid of repeated queries from pg_dump?
Tom Lane <tgl@sss.pgh.pa.us>
From: Tom Lane <tgl@sss.pgh.pa.us>
To: Laurenz Albe <laurenz.albe@cybertec.at>
Cc: depesz@depesz.com, pgsql-general <pgsql-general@lists.postgresql.org>
Date: 2021-08-27T21:23:23Z
Lists: pgsql-hackers, pgsql-general
Attachments
- avoid-repeated-format_type-queries-0.1.patch (text/x-diff) patch
Laurenz Albe <laurenz.albe@cybertec.at> writes:
> On Thu, 2021-08-26 at 18:06 +0200, hubert depesz lubaczewski wrote:
>> In total, there were 5000 queries:
>> SELECT pg_catalog.format_type('[0-9]+'::pg_catalog.oid, NULL)
>> But there were only 83 separate oids that were scanned.
> That is a strong argument for using a hash table to cache the types.
Those queries are coming from getFormattedTypeName(), which is used
for function arguments and the like. I'm not quite sure why Hubert
is seeing 5000 such calls in a database with only ~100 functions;
surely they don't all have an average of 50 arguments?
I experimented with the attached, very quick-n-dirty patch to collect
format_type results during the initial scan of pg_type, instead. On the
regression database in HEAD, it reduces the number of queries pg_dump
issues from 3260 to 2905; but I'm having a hard time detecting any net
performance change.
(This is not meant for commit as-is; notably, I didn't bother to fix
getTypes' code paths for pre-9.6 servers. It should be fine for
performance testing though.)
regards, tom lane
Commits
-
In pg_dump, avoid doing per-table queries for RLS policies.
- dd3105286bd8 9.6.24 landed
- db11b4a3db5f 13.5 landed
- bd3611db5a6f 15.0 landed
- ba8f1a0be583 10.19 landed
- a60860ff33fb 11.14 landed
- a20a9f26cefc 14.0 landed
- 6b9667392d81 12.9 landed
-
Cache the results of format_type() queries in pg_dump.
- c4b298ee15aa 11.14 landed
- 0e7bdc722c65 10.19 landed
- 904ce45bfa88 13.5 landed
- 2f1ed9d98c38 12.9 landed
- 9407dbbcb5b5 14.0 landed
- 6c450a861f1a 15.0 landed
- 4645997c8ab7 9.6.24 landed