Hi,

Debug symbols can only be enabled during configure? How about when
Postgresql is running?

Regards,
Richard Lee

On Fri, Nov 2, 2018 at 9:55 PM Tomas Vondra <tomas.von...@2ndquadrant.com>
wrote:

> On 11/02/2018 10:36 AM, Richard Lee wrote:
> > Hi,
> >
> > I'm running a performance test for our application and encountered a
> > particular query with high planning time compared to the execution.
> > Please refer to attached explain.out for the explain analyze output.
> >
> > Formatted explain: https://explain.depesz.com/s/R834
> >
> > The test was performed with Jmeter sending requests to the database,
> > query was generated by Hibernate which consists of a 133 table UNION.
> > Also attached are some diagnostic info (database version, database
> > settings, table definitions and maintenance related information).
> >
> > Due to the extremely large query text, I'm choosing to provide
> > information via attachments instead of pasting in the email body.
> >
> > Below are some additional OS information on the database server:
> > CPU: 8
> > RAM: 24GB
> > Disk: SSD
> > OS: CentOS Linux release 7.4.1708 (Core)
> >
> > [root@kvrh7os202 ~]# uname -a
> > Linux kvrh7os202.comptel.com <http://kvrh7os202.comptel.com>
> > 3.10.0-693.21.1.el7.x86_64 #1 SMP Wed Mar 7 19:03:37 UTC 2018 x86_64
> > x86_64 x86_64 GNU/Linux
> > [root@kvrh7os202 ~]#
> >
> > Things I tried:
> > 1. Setting random_page_cost = 1.1 and effective_io_concurrency = 200 -
> > no effect on planning time
> > 2. Create materialized view for big UNION query - planning time reduced
> > significantly but not a viable solution
> >
>
> Those changes likely affect the query costing and execution, but the
> number of plans to consider is probably not going to change much. So
> planning taking about the same time is kinda expected here.
>
> > What are my other options to improve the query planning time?
> >
>
> Can you do a bit of profiling, to determine which part of the query
> planning process is slow here? That is:
>
> 1) make sure you have the debug symbols installed
> 2) do `perf record`
> 3) run the benchmark for a while (a minute or so)
> 4) stop the perf record using Ctrl-C
> 5) generate a profile using `perf report` and share the result
>
> Possibly do the same thing with `perf record -g` to collect call-graph
> information, but that's probably going way larger.
>
> regards
>
> --
> Tomas Vondra                  http://www.2ndQuadrant.com
> PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services
>

Reply via email to