Hey guys, thanks a lot.

This is really helping. I am learning a lot. BTW, I changed CTE into
subquery and it improved the performance by miles. I am getting the result
in less than 3 seconds, though I am using a 24 GB ram server. It is still a
great turnaround time as compared to  previous execution time.

Now I will look into the bigger query. I read explain analyze and that
helped a lot. I will be coming up with more questions tomorrow as bigger
query still has got some problems.
On 16 Mar 2015 23:55, "Tomas Vondra" <tomas.von...@2ndquadrant.com> wrote:

> On 16.3.2015 18:49, Marc Mamin wrote:
> >
> >> Hi Team,
> >>
> >> This is the EXPLAIN ANALYZE for one of the view :
> S_V_D_CAMPAIGN_HIERARCHY:
>
> FWIW, this is a somewhat more readable version of the plan:
>
>     http://explain.depesz.com/s/nbB
>
> In the future, please do two things:
>
> (1) Attach the plan as a text file, because the mail clients tend to
>     screw things up (wrapping long lines). Unless the plan is trivial,
>     of course - but pgsql-performance usually deals with complex stuff.
>
> (2) Put the plan on explain.depesz.com helps too, because it's
>     considerably more readable (but always do 1, because resorces
>     placed somewhere else tends to disappear, and the posts then make
>     very little sense, which is bad when searching in the archives)
>
> (3) Same for stuff pasted somewhere else - always attach it to the
>     message. For example I'd like to give you more accurate advice, but
>     I can't as http://pgsql.privatepaste.com/41207bea45 is unavailable.
>
> >
> >
> >       >Rows Removed by Join Filter: 3577676116
> >
> >       That's quite a lot.
> >       You're possibly missing a clause in a join, resulting in a cross
> join.
> >       It is also helpful to put your result here:
> >       http://explain.depesz.com/
> >       regards,
>
> IMHO this is merely a consequence of using the CTE, which produces 52997
> rows and is scanned 67508x as the inner relation of a nested loop. That
> gives you 3577721476 tuples in total, and only 45360 are kept (hence
> 3577676116 are removed).
>
> This is a prime example of why CTEs are not just aliases for subqueries,
> but may actually cause serious trouble.
>
> There are other issues (e.g. the row count estimate of the CTE is
> seriously off, most likely because of the HashAggregate in the outer
> branch), but that's a secondary issue IMHO.
>
> Vivekanand, try this (in the order of intrusiveness):
>
> (1) Get rid of the CTE, and just replace it with subselect in the FROM
>     part of the query, so instead of this:
>
>     WITH valid_executions AS (...)
>     SELECT ... FROM ... JOIN valid_executions ON (...)
>
>     you'll have something like this:
>
>     SELECT ... FROM ... JOIN (...) AS valid_executions ON (...)
>
>     This way the subselect will optimized properly.
>
>
> (2) Replace the CTE with a materialized view, or a temporary table.
>     This has both advantages and disadvantages - the main advantage is
>     that you can create indexes, collect statistics. Disadvantage is
>     you have to refresh the MV, fill temporary table etc.
>
> I expect (1) to improve the performance significantly, and (2) might
> improve it even further by fixing the misestimates.
>
>
> regards
>
> --
> Tomas Vondra                http://www.2ndQuadrant.com/
> PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services
>
>
> --
> Sent via pgsql-performance mailing list (pgsql-performance@postgresql.org)
> To make changes to your subscription:
> http://www.postgresql.org/mailpref/pgsql-performance
>

Reply via email to