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
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 |