Re: Como sé si mi hardware ya no me permite ejecutar más rapidamente una setencia SELECT en PostgreSQL

From: Alfredo Rico <alfredorico(at)gmail(dot)com>
To: Alvaro Herrera <alvherre(at)2ndquadrant(dot)com>
Cc: Martín Marqués <martin(at)2ndquadrant(dot)com>, pgsql-es-ayuda <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: Como sé si mi hardware ya no me permite ejecutar más rapidamente una setencia SELECT en PostgreSQL
Date: 2014-05-05 23:20:22
Message-ID: CAGWUuq3wmw1LX9NCLX3S-y3OQdG2MGtN6+mcn4b6kOqketTVSw@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Alvaro, ¿será que la función de ventana será el gran cuello de botella?

saldo_contable * tasa_interes / (sum(saldo_contable) over ())

Será que creando una función que calcule este valor en una variable y luego
en otra consulta dividir contra el valor calculado presentará una
mejoria??..

En definitiva creo que deberá materializar la vista como indicas.. Estoy en
postgres 9.1 y no puedo actualizar a 9.3 para usar este feature.. :(

2014-05-05 13:51 GMT-04:30 Alvaro Herrera <alvherre(at)2ndquadrant(dot)com>:

> Alfredo Rico escribió:
> > Alvaro muchas gracias por tu respuesta, en efecto el tiempo se reduce en
> > prácticamente 1 segundo con el query propuesto.
> >
> > QUERY PLAN
> >
> >
> --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
> > Aggregate (cost=121401.96..121401.98 rows=1 width=38) (actual
> > time=3331.908..3331.908 rows=1 loops=1)
> > -> WindowAgg (cost=0.00..106689.35 rows=980841 width=11) (actual
> > time=1323.382..2522.707 rows=1037011 loops=1)
> > -> Index Scan using idx_rm_cuentas_vistas_fecha_snapshot on
> > rm_cuentas_vistas (cost=0.00..89524.63 rows=980841 width=11) (actual
> > time=0.037..428.830 rows=1037011 loops=1)
> > Index Cond: (fecha_snapshot = '2014-03-11'::date)
> > Total runtime: 3333.872 ms
> >
> > Por que el CTE resultará más lento que el subselect?..
>
> Porque tiene que "materializar" el resultado, es decir escribirlo a
> disco (en un "tuplestore"), y luego el CTE scan tiene que leerlo desde
> el tuplestore.
>
> Acá en el explain se ve que el indexscan te lleva 0,4 segundos, pero el
> windowAgg empieza a contar desde 1,3 segundos ... ni idea dónde estará
> ese 0,9 segundo faltante; y el Aggregate empieza a contar desde 3,3
> segundos pero el WindowAgg termina de contar a los 2,5 segundos: otros
> 0,8 segundos que están sin explicar. Seguro que ambos tienen
> explicaciones perfectamente razonables ...
>
> Si este tipo de reporte es frecuente ¿no te convendrá hacer una vista
> materializada (VM) con los resultados? Si grabaras la salida del
> WindowAgg, la consulta con el aggregate sería muy rápida. Podrías tener
> una VM para cada fecha.
>
> --
> Álvaro Herrera http://www.2ndQuadrant.com/
> PostgreSQL Development, 24x7 Support, Training & Services
>

--
Saludos Cordiales.-
Alfredo Rico.
San Cristóbal - Venezuela.

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Alvaro Herrera 2014-05-06 00:27:03 Re: Como sé si mi hardware ya no me permite ejecutar más rapidamente una setencia SELECT en PostgreSQL
Previous Message Martín Marqués 2014-05-05 23:03:47 Re: creando backup con barman