Re: Dudas optimización consultas y funciones

From: Alvaro Herrera <alvherre(at)2ndquadrant(dot)com>
To: Ruben Fitó <r(dot)fito(at)ubiquat(dot)com>
Cc: "pgsql-es-ayuda(at)postgresql(dot)org" <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: Dudas optimización consultas y funciones
Date: 2014-03-13 15:12:57
Message-ID: 20140313151257.GG4744@eldon.alvh.no-ip.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Ruben Fitó escribió:

> - Finalmente, hemos conseguido que el analize de los PREPARE nos
> compute un coste aproximado a cero. En teoría, en este punto hemos
> conseguido optimizar al máximo las consultas de la función, pero
> realmente
> no és asi..... Más adelante os explico

¿cómo haces el EXPLAIN ANALYZE? Para una consulta que das con PREPARE y
EXECUTE, lo que deberías hacer es:

PREPARE consulta AS select ...
EXPLAIN ANALYZE EXECUTE consulta(1, 2, 3)

Es muy diferente que dar simplemente un EXPLAIN ANALYZE select...
El optimizador va a tratar estas cosas como diferentes.

> - Al ver tal desbarajuste, hemos echo un ANALIZE directamente de cada
> una de las QUERY de la función, dándole datos concretos, con la sorpresa
> que el plan a utilizar es diferente segun el valor aportado.

Correcto.

> - Finalmente, hemos hecho la suposición de que la tabla es demasiado
> grande, y como POSTGRES nunca se equivoca, hemos optado por acotar ciertas
> consultas respecto un rango de fechas, con lo que hemos mejorado algunos
> tiempos de respuesta para los valores más problemáticos, pero para los que
> el coste era mínimo, ahora el tiempo de respuesta ha aumentado.

No, la tabla no es demasiado grande, y sí, Postgres sí se equivoca. Es
posible que tengas que cambiar algunos parámetros, como
effective_cache_size, y random_page_cost.

> - Qué tipo de consultas són más lentas que otras??

Las que leen más disco son más lentas que las que leen menos disco. Y
las que leen disco aleatoriamente son peores que las que leen
secuencialmente.

> - Es más óptimo hacer querys des de SRC en vez de encapsular-las en
> funciones de BBDD'??.

Normalmente sí. Encapsular cosas en funciones puede crear "barreras de
optimización".

> - La funciones tienen un plan predefinido en el momento de crear-las, o
> segun se llaman va cambiando?? Y Si está predefinido por defecto, existe la
> manera para que recalcule el plan cada vez que se ejecute??

No, el plan se crea en la primera ejecución, queda en cache y después se
puede reusar. Creo que en 9.2 cambió la cosa, y puede haber un "custom
plan" que significa que cuando el plan en cache no es muy bueno, se crea
un plan específico para los parámetros específicos que esa ejecución
usará.

--
Álvaro Herrera http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Training & Services

-
Enviado a la lista de correo pgsql-es-ayuda (pgsql-es-ayuda(at)postgresql(dot)org)
Para cambiar tu suscripción:
http://www.postgresql.org/mailpref/pgsql-es-ayuda

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Linder Poclaba Lazaro 2014-03-13 16:33:13 Fwd: Ubicar los tipos de datos creados
Previous Message Linder Poclaba Lazaro 2014-03-13 15:02:40 Ubicar los tipos de datos creados