Re: performance of sql and plpgsql functions

Поиск
Список
Период
Сортировка
От Tom Lane
Тема Re: performance of sql and plpgsql functions
Дата
Msg-id 3174751.1718634247@sss.pgh.pa.us
обсуждение исходный текст
Ответ на performance of sql and plpgsql functions  (Julius Tuskenis <julius.tuskenis@gmail.com>)
Ответы Re: performance of sql and plpgsql functions
Список pgsql-performance
Julius Tuskenis <julius.tuskenis@gmail.com> writes:
> EXPLAIN (ANALYZE, BUFFERS, VERBOSE)
>    SELECT
>      COALESCE(sum(mok_nepadengta), 0)
>    FROM
>      public.b_pardavimai
>      JOIN public.b_mokejimai ON (mok_pardavimas = pard_id)
>    WHERE
>      (pard_tipas = ANY('{1, 2, 6, 7}'))
>      AND (mok_saskaita = 7141968)

I believe that the SQL-language function executor always uses generic
plans for parameterized queries (which is bad, but nobody's gotten
round to improving it).  So the above is a poor way of investigating
what will happen, because it corresponds to a custom plan for the
value 7141968.  You should try something like

PREPARE p(integer) AS
  SELECT COALESCE ...
  ... AND (mok_saskaita = $1);

SET plan_cache_mode TO force_generic_plan;

EXPLAIN ANALYZE EXECUTE p(7141968);

What I suspect is that the statistics for mok_saskaita are
highly skewed and so with a generic plan the planner will
not risk using a plan that depends on the parameter value
being infrequent, as the one you're showing does.

            regards, tom lane



В списке pgsql-performance по дате отправления:

Предыдущее
От: Pavel Stehule
Дата:
Сообщение: Re: performance of sql and plpgsql functions
Следующее
От: Julius Tuskenis
Дата:
Сообщение: Re: performance of sql and plpgsql functions