La consulta es esta:

 SELECT a."FECHAPROC" AS fechaproc,
    a."LOCALIDAD" AS localidad,
    a."URBANIZA" AS urbaniza,
    a."CALLE" AS calle,
    a."CLICODFAC" AS clicodfac,
    a."NOMBRE" AS nombre,
    a."NROMUNI" AS nromuni,
    a."MANZCEN" AS manzcen,
    a."LOTECEN" AS lotecen,
    a."TS" AS ts,
    a."EC" AS ec,
    a."ECA" AS eca,
    a."ECD" AS ecd,
    a."TARIFA" AS tarifa,
    a."CMEDI" AS cmedi,
    a."CICLO" AS ciclo,
    b.id,
    b.clvmzna,
    b.lote,
    r.ciclo_comercial AS ciclo_com_gis,
    5000 + rd.trazo_id AS carga,
    rd.numero AS orden_carga,
    row_number() OVER () AS orden_impresion,
    count(d.gid) AS gid,
    string_agg((to_char(d.horaini::interval, 'HH24:MI'::text) || '-'::text)
|| to_char(d.horafin::interval, 'HH24:MI'::text), ', '::text ORDER BY
d.zona) AS hopdes,
    string_agg((d.fechaini::text || '-'::text) || d.fechafin::text, ',
'::text ORDER BY d.zona) AS fechas_inicio_fin,
    sum(d.tiempo) AS horas_servicio_horas,
    sum(d.tiempo_num) AS horcnt,
        CASE
            WHEN length(b.id::text) > 0 THEN '1-Con Horario'::character
varying
            ELSE '2-Sin Horario'::character varying
        END AS tienehorario
   FROM unidos a
     LEFT JOIN (cat_lote b
     LEFT JOIN mag_zonas d ON st_contains(d.the_geom, b.geo_punto) AND
d.vigente = 1
     LEFT JOIN (cat_lote e
     LEFT JOIN rut_detalle rd ON rd.gid = e.gid
     JOIN rut_trazo r ON r.trazo_id = rd.trazo_id) ON b.gid = e.gid AND
r.vigente = 1) ON a."CLICODFAC"::text = b.id::text
  WHERE date_part('year'::text, a."FECHAPROC") >= 2015::double precision
AND a."EC" = 1
  GROUP BY a."FECHAPROC", a."LOCALIDAD", a."URBANIZA", a."CALLE",
a."CLICODFAC", a."NOMBRE", a."NROMUNI", a."MANZCEN", a."LOTECEN", a."TS",
a."EC", a."ECA", a."ECD", a."TARIFA", a."CMEDI", a."CICLO", b.id,
b.clvmzna, b.lote, r.ciclo_comercial, rd.trazo_id, rd.numero
  ORDER BY r.ciclo_comercial, rd.trazo_id, rd.numero


En el explain analyze obtengo esto

"WindowAgg  (cost=9740706.30..9794981.40 rows=374311 width=230)
(actual time=52168.480..65089.359 rows=1122034 loops=1)"
"  ->  GroupAggregate  (cost=9740706.30..9787495.18 rows=374311
width=230) (actual time=52168.457..62914.819 rows=1122034 loops=1)"
"        Group Key: r.ciclo_comercial, rd.trazo_id, rd.numero,
a."FECHAPROC", a."LOCALIDAD", a."URBANIZA", a."CALLE", a."CLICODFAC",
a."NOMBRE", a."NROMUNI", a."MANZCEN", a."LOTECEN", a."TS", a."EC",
a."ECA", a."ECD", a."TARIFA", a."CMEDI", a."CICLO", b.id, (...)"
"        ->  Sort  (cost=9740706.30..9741642.08 rows=374311 width=230)
(actual time=52168.158..53177.792 rows=1122060 loops=1)"
"              Sort Key: r.ciclo_comercial, rd.trazo_id, rd.numero,
a."FECHAPROC", a."LOCALIDAD", a."URBANIZA", a."CALLE", a."CLICODFAC",
a."NOMBRE", a."NROMUNI", a."MANZCEN", a."LOTECEN", a."TS", a."EC",
a."ECA", a."ECD", a."TARIFA", a."CMEDI", a."CICLO",  (...)"
"              *Sort Method: external merge  Disk: 266152kB"*
"              ->  Hash Right Join  (cost=150284.12..9706056.56
rows=374311 width=230) (actual time=3495.335..21677.962 rows=1122060
loops=1)"
"                    Hash Cond: ((b.id)::text = (a."CLICODFAC")::text)"
"                    ->  Merge Left Join  (cost=6233.57..9513169.71
rows=269017 width=99) (actual time=78.767..16777.771 rows=269602
loops=1)"
"                          Merge Cond: (b.gid = e.gid)"
"                          ->  Nested Loop Left Join
(cost=0.42..9494129.99 rows=269017 width=91) (actual
time=1.008..16366.263 rows=269602 loops=1)"
"                                Join Filter: ((d.the_geom &&
b.geo_punto) AND _st_contains(d.the_geom, b.geo_punto))"
"                                Rows Removed by Join Filter: 35379942"
"                                ->  Index Scan using cat_lote_pkey on
cat_lote b  (cost=0.42..83873.24 rows=269017 width=59) (actual
time=0.016..406.860 rows=269590 loops=1)"
"                                ->  Materialize  (cost=0.00..42.42
rows=132 width=902) (actual time=0.000..0.005 rows=132 loops=269590)"
"                                      ->  Seq Scan on mag_zonas d
(cost=0.00..41.76 rows=132 width=902) (actual time=0.064..0.667
rows=132 loops=1)"
"                                            Filter: (vigente = 1)"
"                                            Rows Removed by Filter: 9"
"                          ->  Materialize  (cost=6233.15..17834.78
rows=42592 width=16) (actual time=77.755..286.031 rows=101567
loops=1)"
"                                ->  Merge Join
(cost=6233.15..17728.30 rows=42592 width=16) (actual
time=77.751..263.574 rows=101565 loops=1)"
"                                      Merge Cond: (rd.gid = e.gid)"
"                                      ->  Sort
(cost=6123.95..6230.43 rows=42592 width=16) (actual
time=77.341..91.721 rows=101565 loops=1)"
"                                            Sort Key: rd.gid"
"                                            Sort Method: quicksort
Memory: 7833kB"
"                                            ->  Hash Join
(cost=76.55..2848.99 rows=42592 width=16) (actual time=0.992..44.744
rows=101565 loops=1)"
"                                                  Hash Cond:
(rd.trazo_id = r.trazo_id)"
"                                                  ->  Seq Scan on
rut_detalle rd  (cost=0.00..1965.65 rows=101565 width=12) (actual
time=0.030..18.360 rows=101565 loops=1)"
"                                                  ->  Hash
(cost=76.39..76.39 rows=13 width=8) (actual time=0.934..0.934 rows=13
loops=1)"
"                                                        Buckets: 1024
 Batches: 1  Memory Usage: 1kB"
"                                                        ->  Seq Scan
on rut_trazo r  (cost=0.00..76.39 rows=13 width=8) (actual
time=0.023..0.926 rows=13 loops=1)"
"                                                              Filter:
(vigente = 1)"
"                                                              Rows
Removed by Filter: 18"
"                                      ->  Index Only Scan using
cat_lote_pkey on cat_lote e  (cost=0.42..10403.68 rows=269017 width=4)
(actual time=0.236..100.399 rows=269590 loops=1)"
"                                            Heap Fetches: 17732"
"                    ->  Hash  (cost=139371.66..139371.66 rows=374311
width=131) (actual time=3415.655..3415.655 rows=1122035 loops=1)"
"                          Buckets: 65536  Batches: 1  Memory Usage: 185529kB"
"                          ->  Seq Scan on unidos a
(cost=0.00..139371.66 rows=374311 width=131) (actual
time=0.045..2683.709 rows=1122035 loops=1)"
"                                Filter: (("EC" = 1) AND
(date_part('year'::text, ("FECHAPROC")::timestamp without time zone)
>= 2015::double precision))"
"                                Rows Removed by Filter: 47815"
"Planning time: 13.085 ms"
"Execution time: 65367.274 ms"

Estoy corriendo sobre postgres 9.4 en windows server 2008

mis parametros son los de la instalacion por defecto solo he tocado estos
dos:

shared_buffers = 512MB            # min 128kB
work_mem = 384MB                # min 64kB

Solo modifique el work_mem a raiz de que vi esta linea en el explain
analyze

*Sort Method: external merge  Disk: 266152kB"*

lo subi a 384MB pero obtuve lo mismo me podrian sugerir que se podria hacer
para mejorar.

Creo que el problema esta aqui

"WindowAgg  (cost=9740706.30..9794981.40 rows=374311 width=230)
(actual time=52168.480..65089.359 rows=1122034 loops=1)"
"  ->  GroupAggregate  (cost=9740706.30..9787495.18 rows=374311
width=230) (actual time=52168.457..62914.819 rows=1122034 loops=1)"

donde el cost esta muy diferente del rows pero no tengo una idea de
como poder arreglarlo



-- 
José Mercedes Venegas Acevedo
cel claro 940180540

mails: jvenegasp...@gmail.com

Responder a