Re: Slow pg_publication_tables with many schemas and tables

From: Edilmar Alves <edilmaralves(at)intersite(dot)com(dot)br>
To: pgsql-performance(at)lists(dot)postgresql(dot)org
Subject: Re: Slow pg_publication_tables with many schemas and tables
Date: 2019-09-27 14:25:24
Message-ID: cf6dc1f6-5336-520a-4c3c-cd23846988c7@intersite.com.br
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-performance

Hi,

Em 26/09/2019 19:11, Tom Lane escreveu:
> Edilmar Alves <edilmaralves(at)intersite(dot)com(dot)br> writes:
>> I use PG 11.5 into CentOS6 server, with 50 schemas, exactly equals in
>> tables structure, and more than 400 tables/schema. Then, there is more
>> than 20000 tables.
> Possibly you should rethink that design, but ...

My design is this because I have a system with 50 enterprises using the
same server.

Before each enterprise used a separated database, and my webapp had a
connection pool

for each database. Then, if for example, my connection pool had
minconn=10 and maxconn=20,

it was totalminconn=500 and totalmaxconn=1000. When I migrated to just
one database and 50

schemas, it was so better to manage just one connection pool, minor
hardware resource usage.

>
>> I changed the original PG view like said in the above thread:
>> CREATE OR REPLACE VIEW pg_catalog.pg_publication_tables AS
>> SELECT
>> P.pubname AS pubname,
>> N.nspname AS schemaname,
>> C.relname AS tablename
>> FROM pg_publication P, pg_class C
>> JOIN pg_namespace N ON (N.oid = C.relnamespace),
>> LATERAL pg_get_publication_tables(P.pubname)
>> WHERE C.oid = pg_get_publication_tables.relid;
>> but the problem continues. It is very slow to process the query used by
>> replication system:
>> SELECT DISTINCT t.schemaname, t.tablename FROM
>> pg_catalog.pg_publication_tables t WHERE t.pubname IN ('mypubschema');
> What do you get from EXPLAIN ANALYZE for that?

The Analyze from original VIEW and the VIEW suggested below

for PGv12 update have a flow diagram very similar, just one

step better in the updated version, for my cenario with 50 schemas.

>
>> After this, I changed the view above to this:
>> CREATE OR REPLACE VIEW pg_catalog.pg_publication_tables AS
>> SELECT p.pubname, c.schemaname, c.tablename
>> FROM pg_publication p
>> JOIN pg_tables c ON p.pubname = c.schemaname;
>> And the query below became very fast:
> As a wise man once said, I can make my program arbitrarily fast
> if it doesn't have to give the right answer ... and this query
> obviously doesn't produce the correct answer, except in the
> contrived special case where the content of a publication is
> exactly the content of a schema. So I don't see what your
> point is here.

I know my VIEW is not a general purpose solution.

I just submitted this message to the group because

in this kind of situation of many schemas and tables/schema,

the original VIEW and the VIEW below suggested to become

the new on in PGv12 run very slow.

>
> Please see
>
> https://wiki.postgresql.org/wiki/Slow_Query_Questions
>
> regarding useful ways to present performance problems.
>
> regards, tom lane
--

In response to

Browse pgsql-performance by date

  From Date Subject
Next Message Mariel Cherkassky 2019-09-29 06:05:15 Re: sequence depends on many tables
Previous Message Olivier Gautherot 2019-09-27 12:36:13 Re: Monitor Postgres database status on Docker