RE: Consulta complejas

Lists: pgsql-es-ayuda
From: Victor Báez <vibasoft(at)gmail(dot)com>
To: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Consulta complejas
Date: 2012-04-12 14:08:26
Message-ID: CACVDCF3xeyq5o1D42_6-NZbjomy1OwA=6-8cAjDr9aCFHe9ZpQ@mail.gmail.com
Views: Whole Thread | Raw Message | Download mbox | Resend email
Lists: pgsql-es-ayuda

Disculpa ayer sin darme cuenta respondi directamente a un correo personal

El EXPLAIN ANALYSE me saca esto que es de mi servidor

"GroupAggregate (cost=1357401.68..1357402.84 rows=16 width=394) (actual
time=88399.505..89086.558 rows=123 loops=1)"
" -> Sort (cost=1357401.68..1357401.72 rows=16 width=394) (actual
time=88399.477..88565.019 rows=225748 loops=1)"
" Sort Key: e.idsucursales, e.iddepositos, e.codigo, e.codigopre,
e.fh_inventario, e.cantinventario, p.descripciones, p.barra, p.codigo_ref,
(''::character varying(30))"
" Sort Method: external merge Disk: 48880kB"
" -> Hash Left Join (cost=1329344.23..1357401.36 rows=16
width=394) (actual time=22555.475..80682.289 rows=225748 loops=1)"
" Hash Cond: ((e.idsucursales = fd.idsucursales) AND
(e.iddepositos = fd.iddepositos) AND ((e.codigo)::text = (fd.codigo)::text)
AND (btrim((e.codigopre)::text) = btrim((fd.codigopre)::text)))"
" Join Filter: (f.fecha_emision >= (e.fh_inventario)::date)"
" -> Hash Left Join (cost=1029.59..1071.21 rows=2 width=387)
(actual time=40.444..42.895 rows=657 loops=1)"
" Hash Cond: ((e.idsucursales = ptrd.idsucursales) AND
(e.iddepositos = ptrd.iddepositos) AND ((e.codigo)::text =
(ptrd.codigo)::text) AND (btrim((e.codigopre)::text) =
btrim((ptrd.codigopre)::text)))"
" -> Hash Left Join (cost=884.00..924.64 rows=2
width=373) (actual time=38.429..39.742 rows=123 loops=1)"
" Hash Cond: ((e.idsucursales = c.idsucursales)
AND (e.iddepositos = c.iddepositos) AND ((e.codigo)::text =
(cd.codigo)::text) AND (btrim((e.codigopre)::text) =
btrim((cd.codigopre)::text)))"
" Join Filter: (c.fecha_recepcion >=
(e.fh_inventario)::date)"
" -> Hash Join (cost=675.59..715.30 rows=2
width=366) (actual time=36.065..37.240 rows=123 loops=1)"
" Hash Cond: (((p.codigo)::text =
(e.codigo)::text) AND (btrim(((''::character varying(5)))::text) =
btrim((e.codigopre)::text)))"
" -> Sort (cost=601.63..603.10 rows=588
width=1449) (actual time=35.765..36.079 rows=1227 loops=1)"
" Sort Key: pb.iddivisiones,
p.codigobase, ((btrim((p.codigo)::text))::character(20))"
" Sort Method: quicksort Memory:
1698kB"
" -> HashAggregate
(cost=568.70..574.58 rows=588 width=1449) (actual time=24.708..26.233
rows=1227 loops=1)"
" -> Append
(cost=23.63..461.39 rows=588 width=1449) (actual time=0.445..16.636
rows=1227 loops=1)"
" -> Hash Join
(cost=23.63..192.26 rows=326 width=1365) (actual time=0.444..7.255
rows=765 loops=1)"
" Hash Cond:
(p.iddepositos = d.iddepositos)"
" -> Hash Join
(cost=22.34..184.86 rows=326 width=1337) (actual time=0.415..6.050
rows=765 loops=1)"
" Hash Cond:
(p.idmarcas = m.idmarcas)"
" -> Hash
Join (cost=21.16..179.20 rows=326 width=1229) (actual time=0.396..5.424
rows=765 loops=1)"
" Hash
Cond: (p.idlineasp = l.idlineasp)"
" ->
Hash Join (cost=15.74..169.29 rows=326 width=1183) (actual
time=0.298..4.704 rows=765 loops=1)"
"
Hash Cond: (pb.iddivisiones = dv.iddivisiones)"
"
-> Hash Join (cost=14.67..163.74 rows=326 width=1137) (actual
time=0.283..4.080 rows=765 loops=1)"
"
Hash Cond: (p.idfamiliasp = fm.idfamiliasp)"
"
-> Hash Join (cost=10.47..155.05 rows=329 width=1091) (actual
time=0.212..3.392 rows=765 loops=1)"
"
Hash Cond: ((p.codigobase)::bpchar = pb.codigobase)"
"
-> Hash Join (cost=2.54..142.58 rows=334 width=1041) (actual
time=0.053..2.507 rows=765 loops=1)"
"
Hash Cond: (p.idrubros = r.idrubros)"
"
-> Hash Join (cost=1.14..136.52 rows=352 width=933)
(actual time=0.029..1.898 rows=765 loops=1)"
"
Hash Cond: (p.idsecciones = s.idsecciones)"
"
-> Seq Scan on productos p (cost=0.00..129.66
rows=587 width=825) (actual time=0.008..1.073 rows=765 loops=1)"
"
Filter: ((estado = 1) AND (disp_stock = 1))"
"
-> Hash (cost=1.06..1.06 rows=6 width=112) (actual
time=0.010..0.010 rows=10 loops=1)"
"
Buckets: 1024 Batches: 1 Memory Usage: 1kB"
"
-> Seq Scan on secciones s (cost=0.00..1.06
rows=6 width=112) (actual time=0.003..0.005 rows=10 loops=1)"
"
-> Hash (cost=1.18..1.18 rows=18 width=112) (actual
time=0.014..0.014 rows=20 loops=1)"
"
Buckets: 1024 Batches: 1 Memory Usage: 2kB"
"
-> Seq Scan on rubros r (cost=0.00..1.18 rows=18
width=112) (actual time=0.002..0.007 rows=20 loops=1)"
"
-> Hash (cost=5.19..5.19 rows=219 width=71) (actual
time=0.149..0.149 rows=222 loops=1)"
"
Buckets: 1024 Batches: 1 Memory Usage: 23kB"
"
-> Seq Scan on productosb pb (cost=0.00..5.19 rows=219
width=71) (actual time=0.004..0.064 rows=222 loops=1)"
"
-> Hash (cost=2.98..2.98 rows=98 width=50) (actual time=0.061..0.061
rows=100 loops=1)"
"
Buckets: 1024 Batches: 1 Memory Usage: 9kB"
"
-> Seq Scan on familiasp fm (cost=0.00..2.98 rows=98 width=50)
(actual time=0.004..0.028 rows=100 loops=1)"
"
-> Hash (cost=1.03..1.03 rows=3 width=50) (actual time=0.005..0.005
rows=4 loops=1)"
"
Buckets: 1024 Batches: 1 Memory Usage: 1kB"
"
-> Seq Scan on divisiones dv (cost=0.00..1.03 rows=3 width=50)
(actual time=0.002..0.003 rows=4 loops=1)"
" ->
Hash (cost=3.52..3.52 rows=152 width=50) (actual time=0.088..0.088
rows=152 loops=1)"
"
Buckets: 1024 Batches: 1 Memory Usage: 13kB"
"
-> Seq Scan on lineasp l (cost=0.00..3.52 rows=152 width=50) (actual
time=0.004..0.040 rows=152 loops=1)"
" -> Hash
(cost=1.08..1.08 rows=8 width=112) (actual time=0.008..0.008 rows=8
loops=1)"
"
Buckets: 1024 Batches: 1 Memory Usage: 1kB"
" ->
Seq Scan on marcas m (cost=0.00..1.08 rows=8 width=112) (actual
time=0.003..0.005 rows=8 loops=1)"
" -> Hash
(cost=1.13..1.13 rows=13 width=32) (actual time=0.016..0.016 rows=18
loops=1)"
" Buckets:
1024 Batches: 1 Memory Usage: 2kB"
" -> Seq Scan
on depositos d (cost=0.00..1.13 rows=13 width=32) (actual
time=0.005..0.009 rows=18 loops=1)"
" -> Hash Join
(cost=168.10..263.25 rows=262 width=1554) (actual time=3.819..8.991
rows=462 loops=1)"
" Hash Cond:
(pb.iddivisiones = dv.iddivisiones)"
" -> Hash Join
(cost=167.03..253.34 rows=262 width=1508) (actual time=3.785..7.655
rows=462 loops=1)"
" Hash Cond:
(pp.iddepositos = d.iddepositos)"
" -> Hash
Join (cost=165.74..248.44 rows=262 width=1480) (actual time=3.761..7.261
rows=462 loops=1)"
" Hash
Cond: (p.idlineasp = l.idlineasp)"
" ->
Hash Join (cost=160.32..239.42 rows=262 width=1434) (actual
time=3.662..6.781 rows=462 loops=1)"
"
Hash Cond: (p.idmarcas = m.idmarcas)"
"
-> Hash Join (cost=159.14..234.63 rows=262 width=1326) (actual
time=3.644..6.399 rows=462 loops=1)"
"
Hash Cond: (pp.idformaspre = f.idformaspre)"
"
-> Hash Join (cost=157.96..229.85 rows=262 width=1248) (actual
time=3.624..6.013 rows=462 loops=1)"
"
Hash Cond: (p.idfamiliasp = fm.idfamiliasp)"
"
-> Hash Join (cost=153.75..222.03 rows=265 width=1202) (actual
time=3.554..5.569 rows=462 loops=1)"
"
Hash Cond: ((p.codigobase)::bpchar = pb.codigobase)"
"
-> Hash Join (cost=145.82..210.46 rows=268 width=1152)
(actual time=3.233..4.780 rows=462 loops=1)"
"
Hash Cond: (p.idrubros = r.idrubros)"
"
-> Hash Join (cost=144.42..205.32 rows=283
width=1044) (actual time=3.204..4.358 rows=462 loops=1)"
"
Hash Cond: ((pp.codigo)::text =
(p.codigo)::text)"
"
-> Seq Scan on productosp pp
(cost=0.00..56.30 rows=471 width=469) (actual time=0.007..0.528 rows=462
loops=1)"
"
Filter: ((estado = 1) AND (disp_stock =
1))"
"
-> Hash (cost=136.08..136.08 rows=667
width=575) (actual time=3.183..3.183 rows=1112 loops=1)"
"
Buckets: 1024 Batches: 1 Memory Usage:
333kB"
"
-> Hash Join (cost=1.14..136.08
rows=667 width=575) (actual time=0.024..1.772 rows=1112 loops=1)"
"
Hash Cond: (p.idsecciones =
s.idsecciones)"
"
-> Seq Scan on productos p
(cost=0.00..124.11 rows=1111 width=467) (actual time=0.003..0.349
rows=1112 loops=1)"
"
-> Hash (cost=1.06..1.06 rows=6
width=112) (actual time=0.009..0.009 rows=10 loops=1)"
"
Buckets: 1024 Batches: 1
Memory Usage: 1kB"
"
-> Seq Scan on secciones s
(cost=0.00..1.06 rows=6 width=112) (actual time=0.002..0.004 rows=10
loops=1)"
"
-> Hash (cost=1.18..1.18 rows=18 width=112)
(actual time=0.016..0.016 rows=20 loops=1)"
"
Buckets: 1024 Batches: 1 Memory Usage: 2kB"
"
-> Seq Scan on rubros r (cost=0.00..1.18
rows=18 width=112) (actual time=0.003..0.008 rows=20 loops=1)"
"
-> Hash (cost=5.19..5.19 rows=219 width=71) (actual
time=0.309..0.309 rows=222 loops=1)"
"
Buckets: 1024 Batches: 1 Memory Usage: 23kB"
"
-> Seq Scan on productosb pb (cost=0.00..5.19
rows=219 width=71) (actual time=0.003..0.064 rows=222 loops=1)"
"
-> Hash (cost=2.98..2.98 rows=98 width=50) (actual
time=0.060..0.060 rows=100 loops=1)"
"
Buckets: 1024 Batches: 1 Memory Usage: 9kB"
"
-> Seq Scan on familiasp fm (cost=0.00..2.98 rows=98
width=50) (actual time=0.003..0.026 rows=100 loops=1)"
"
-> Hash (cost=1.08..1.08 rows=8 width=82) (actual time=0.009..0.009
rows=8 loops=1)"
"
Buckets: 1024 Batches: 1 Memory Usage: 1kB"
"
-> Seq Scan on formaspre f (cost=0.00..1.08 rows=8 width=82)
(actual time=0.003..0.005 rows=8 loops=1)"
"
-> Hash (cost=1.08..1.08 rows=8 width=112) (actual time=0.008..0.008
rows=8 loops=1)"
"
Buckets: 1024 Batches: 1 Memory Usage: 1kB"
"
-> Seq Scan on marcas m (cost=0.00..1.08 rows=8 width=112) (actual
time=0.002..0.004 rows=8 loops=1)"
" ->
Hash (cost=3.52..3.52 rows=152 width=50) (actual time=0.088..0.088
rows=152 loops=1)"
"
Buckets: 1024 Batches: 1 Memory Usage: 13kB"
"
-> Seq Scan on lineasp l (cost=0.00..3.52 rows=152 width=50) (actual
time=0.004..0.039 rows=152 loops=1)"
" -> Hash
(cost=1.13..1.13 rows=13 width=32) (actual time=0.014..0.014 rows=18
loops=1)"
"
Buckets: 1024 Batches: 1 Memory Usage: 2kB"
" ->
Seq Scan on depositos d (cost=0.00..1.13 rows=13 width=32) (actual
time=0.003..0.007 rows=18 loops=1)"
" -> Hash
(cost=1.03..1.03 rows=3 width=50) (actual time=0.006..0.006 rows=4
loops=1)"
" Buckets:
1024 Batches: 1 Memory Usage: 1kB"
" -> Seq Scan
on divisiones dv (cost=0.00..1.03 rows=3 width=50) (actual
time=0.002..0.003 rows=4 loops=1)"
" -> Hash (cost=71.84..71.84 rows=142
width=46) (actual time=0.224..0.224 rows=125 loops=1)"
" Buckets: 1024 Batches: 1 Memory
Usage: 11kB"
" -> Bitmap Heap Scan on existencias
e (cost=9.71..71.84 rows=142 width=46) (actual time=0.044..0.128 rows=125
loops=1)"
" Recheck Cond: ((idsucursales =
1) AND (iddepositos = 1))"
" -> Bitmap Index Scan on
pk_existencias (cost=0.00..9.67 rows=142 width=0) (actual
time=0.035..0.035 rows=126 loops=1)"
" Index Cond:
((idsucursales = 1) AND (iddepositos = 1))"
" -> Hash (cost=196.19..196.19 rows=611
width=46) (actual time=2.343..2.343 rows=437 loops=1)"
" Buckets: 1024 Batches: 1 Memory Usage:
35kB"
" -> Hash Join (cost=70.06..196.19
rows=611 width=46) (actual time=1.243..1.998 rows=437 loops=1)"
" Hash Cond: (cd.idcompras =
c.idcompras)"
" -> Seq Scan on compras cd
(cost=0.00..110.47 rows=2547 width=38) (actual time=0.009..0.625 rows=2564
loops=1)"
" -> Hash (cost=66.31..66.31
rows=300 width=16) (actual time=0.613..0.613 rows=435 loops=1)"
" Buckets: 1024 Batches: 1
Memory Usage: 21kB"
" -> Seq Scan on compra c
(cost=0.00..66.31 rows=300 width=16) (actual time=0.007..0.479 rows=435
loops=1)"
" Filter: ((idsucursales =
1) AND (iddepositos = 1))"
" -> Hash (cost=132.93..132.93 rows=633 width=49)
(actual time=2.000..2.000 rows=622 loops=1)"
" Buckets: 1024 Batches: 1 Memory Usage: 52kB"
" -> Hash Join (cost=13.62..132.93 rows=633
width=49) (actual time=0.173..1.510 rows=622 loops=1)"
" Hash Cond: (ptrd.idtransferencia =
ptr.idtransferencia)"
" -> Seq Scan on prod_transfd ptrd
(cost=0.00..110.61 rows=633 width=53) (actual time=0.023..1.016 rows=622
loops=1)"
" Filter: ((idsucursales = 1) AND
(iddepositos = 1))"
" -> Hash (cost=9.94..9.94 rows=294
width=4) (actual time=0.139..0.139 rows=244 loops=1)"
" Buckets: 1024 Batches: 1 Memory
Usage: 9kB"
" -> Seq Scan on prod_transf ptr
(cost=0.00..9.94 rows=294 width=4) (actual time=0.005..0.073 rows=244
loops=1)"
" -> Hash (cost=1249934.84..1249934.84 rows=2722540
width=46) (actual time=22512.774..22512.774 rows=3013145 loops=1)"
" Buckets: 65536 Batches: 256 (originally 8) Memory
Usage: 42648kB"
" -> Merge Join (cost=1171706.88..1249934.84
rows=2722540 width=46) (actual time=13165.345..19788.234 rows=3013145
loops=1)"
" Merge Cond: ((f.factura = fd.factura) AND
(f.sucursal = fd.sucursal) AND (f.dpto = fd.dpto))"
" -> Sort (cost=254001.36..257851.13
rows=1539906 width=16) (actual time=2432.206..3013.906 rows=1531487
loops=1)"
" Sort Key: f.factura, f.sucursal, f.dpto"
" Sort Method: external merge Disk:
38912kB"
" -> Seq Scan on factura f
(cost=0.00..69422.06 rows=1539906 width=16) (actual time=0.051..649.125
rows=1532097 loops=1)"
" -> Materialize (cost=917703.98..932878.72
rows=3034948 width=54) (actual time=10733.121..14303.299 rows=3013145
loops=1)"
" -> Sort (cost=917703.98..925291.35
rows=3034948 width=54) (actual time=10733.109..13163.308 rows=3013145
loops=1)"
" Sort Key: fd.factura, fd.sucursal,
fd.dpto"
" Sort Method: external merge Disk:
194264kB"
" -> Seq Scan on facturas fd
(cost=0.00..487206.16 rows=3034948 width=54) (actual time=0.292..5495.427
rows=3013145 loops=1)"
" Filter: ((idsucursales = 1)
AND (iddepositos = 1))"
"Total runtime: 89114.732 ms"


From: Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org>
To: Victor Báez <vibasoft(at)gmail(dot)com>
Cc: Ayuda <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: Consulta complejas
Date: 2012-04-12 14:17:04
Message-ID: [email protected]
Views: Whole Thread | Raw Message | Download mbox | Resend email
Lists: pgsql-es-ayuda


Excerpts from Victor Báez's message of jue abr 12 11:08:26 -0300 2012:
> Disculpa ayer sin darme cuenta respondi directamente a un correo personal
>
> El EXPLAIN ANALYSE me saca esto que es de mi servidor

Esto es bien ilegible. Creo que deberías subirlo, mejor, a
http://explain.depesz.com (¿o es .org?)

--
Álvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org>


From: Gilberto Castillo Martínez <gilberto(dot)castillo(at)etecsa(dot)cu>
To: Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org>
Cc: Victor Báez <vibasoft(at)gmail(dot)com>, Ayuda <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: Consulta complejas
Date: 2012-04-12 14:28:08
Message-ID: [email protected]
Views: Whole Thread | Raw Message | Download mbox | Resend email
Lists: pgsql-es-ayuda

El jue, 12-04-2012 a las 11:17 -0300, Alvaro Herrera escribió:
>
> Excerpts from Victor Báez's message of jue abr 12 11:08:26 -0300 2012:
> > Disculpa ayer sin darme cuenta respondi directamente a un correo personal
> >
> > El EXPLAIN ANALYSE me saca esto que es de mi servidor
>
> Esto es bien ilegible. Creo que deberías subirlo, mejor, a
> http://explain.depesz.com (¿o es .org?)
>
Sí es eso el enlace.

--
Saludos,
Gilberto Castillo
ETECSA, La Habana.Cuba.

Attachment Content-Type Size
unknown_filename text/plain 179 bytes

From: Marcos Ortiz <mlortiz(at)uci(dot)cu>
To: ViBaSoft <vibasoft(at)gmail(dot)com>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Consulta complejas
Date: 2012-04-12 14:50:04
Message-ID: [email protected]
Views: Whole Thread | Raw Message | Download mbox | Resend email
Lists: pgsql-es-ayuda

Bueno, según veo en el reporte, lo que más se está tardando en el plan
de ejecución son los
nodos de tipo Hash y el Hash Left join, que constituye el 65,2 % de la
consulta.

Fíjate en tu consulta cuando hiciste el EXPLAIN ANALYZE donde es que
están estos Hash, que me imagino
que debe ser en los JOINS, y trata de cambiar la secuencia de los
mismos, o sea, la tabla que más tiene
datos debería estar a la izquierda:
Ej.: WHERE tablagrande.id = tablachiquita.id

Luego, haz un ALTER TABLE tablagrande SET STATISTICS 1000;
para que se actulizen las estadístiscas en esa tabla.

Ahora, según vemos, las tablas factura y facturas son las que más se
demoran. ¿Podrías enviar esta información?

SELECT relname,
relkind,
reltuples,
relpages
FROM pg_class
WHERE relname LIKE 'factura%';

Esto nos dará el número total de entradas en la tablas e índices que
comienzen con
factura, así como el número de bloques en disco ocupados por cada tabla
e índice de factura.

Recomiendo también que hagas un VACUUM ANALYZE sobre esas tablas
Saludos

On 04/12/2012 10:33 PM, ViBaSoft wrote:
>
> Per node type stats
>
> node type
>
>
>
> count
>
>
>
> sum of times
>
>
>
> % of query
>
> Append
>
>
>
> 1
>
>
>
> 0.390 ms
>
>
>
> 0.0 %
>
> Bitmap Heap Scan
>
>
>
> 1
>
>
>
> 0.093 ms
>
>
>
> 0.0 %
>
> Bitmap Index Scan
>
>
>
> 1
>
>
>
> 0.035 ms
>
>
>
> 0.0 %
>
> GroupAggregate
>
>
>
> 1
>
>
>
> 521.539 ms
>
>
>
> 0.6 %
>
> Hash
>
>
>
> 24
>
>
>
> 2727.631 ms
>
>
>
> 3.1 %
>
> Hash Join
>
>
>
> 21
>
>
>
> 14.067 ms
>
>
>
> 0.0 %
>
> Hash Left Join
>
>
>
> 3
>
>
>
> 58127.932 ms
>
>
>
> 65.2 %
>
> HashAggregate
>
>
>
> 1
>
>
>
> 9.597 ms
>
>
>
> 0.0 %
>
> Materialize
>
>
>
> 1
>
>
>
> 1139.991 ms
>
>
>
> 1.3 %
>
> Merge Join
>
>
>
> 1
>
>
>
> 2471.029 ms
>
>
>
> 2.8 %
>
> Seq Scan
>
>
>
> 26
>
>
>
> 6149.016 ms
>
>
>
> 6.9 %
>
> Sort
>
>
>
> 4
>
>
>
> 17925.238 ms
>
>
>
> 20.1 %
>
> Per table stats
>
> Table name
>
>
>
> Scan count
>
>
>
> Total time
>
>
>
> % of query
>
> scan type
>
>
>
> count
>
>
>
> sum of times
>
>
>
> % of table
>
> compra
>
>
>
> 1
>
>
>
> 0.479 ms
>
>
>
> 0.0 %
>
> Seq Scan
>
>
>
> 1
>
>
>
> 0.479 ms
>
>
>
> 100.0 %
>
> compras
>
>
>
> 1
>
>
>
> 0.625 ms
>
>
>
> 0.0 %
>
> Seq Scan
>
>
>
> 1
>
>
>
> 0.625 ms
>
>
>
> 100.0 %
>
> depositos
>
>
>
> 2
>
>
>
> 0.016 ms
>
>
>
> 0.0 %
>
> Seq Scan
>
>
>
> 2
>
>
>
> 0.016 ms
>
>
>
> 100.0 %
>
> divisiones
>
>
>
> 2
>
>
>
> 0.006 ms
>
>
>
> 0.0 %
>
> Seq Scan
>
>
>
> 2
>
>
>
> 0.006 ms
>
>
>
> 100.0 %
>
> existencias
>
>
>
> 1
>
>
>
> 0.093 ms
>
>
>
> 0.0 %
>
> Bitmap Heap Scan
>
>
>
> 1
>
>
>
> 0.093 ms
>
>
>
> 100.0 %
>
> factura
>
>
>
> 1
>
>
>
> 649.125 ms
>
>
>
> 0.7 %
>
> Seq Scan
>
>
>
> 1
>
>
>
> 649.125 ms
>
>
>
> 100.0 %
>
> facturas
>
>
>
> 1
>
>
>
> 5495.427 ms
>
>
>
> 6.2 %
>
> Seq Scan
>
>
>
> 1
>
>
>
> 5495.427 ms
>
>
>
> 100.0 %
>
> familiasp
>
>
>
> 2
>
>
>
> 0.054 ms
>
>
>
> 0.0 %
>
> Seq Scan
>
>
>
> 2
>
>
>
> 0.054 ms
>
>
>
> 100.0 %
>
> formaspre
>
>
>
> 1
>
>
>
> 0.005 ms
>
>
>
> 0.0 %
>
> Seq Scan
>
>
>
> 1
>
>
>
> 0.005 ms
>
>
>
> 100.0 %
>
> lineasp
>
>
>
> 2
>
>
>
> 0.079 ms
>
>
>
> 0.0 %
>
> Seq Scan
>
>
>
> 2
>
>
>
> 0.079 ms
>
>
>
> 100.0 %
>
> marcas
>
>
>
> 2
>
>
>
> 0.009 ms
>
>
>
> 0.0 %
>
> Seq Scan
>
>
>
> 2
>
>
>
> 0.009 ms
>
>
>
> 100.0 %
>
> prod_transf
>
>
>
> 1
>
>
>
> 0.073 ms
>
>
>
> 0.0 %
>
> Seq Scan
>
>
>
> 1
>
>
>
> 0.073 ms
>
>
>
> 100.0 %
>
> prod_transfd
>
>
>
> 1
>
>
>
> 1.016 ms
>
>
>
> 0.0 %
>
> Seq Scan
>
>
>
> 1
>
>
>
> 1.016 ms
>
>
>
> 100.0 %
>
> productos
>
>
>
> 2
>
>
>
> 1.422 ms
>
>
>
> 0.0 %
>
> Seq Scan
>
>
>
> 2
>
>
>
> 1.422 ms
>
>
>
> 100.0 %
>
> productosb
>
>
>
> 2
>
>
>
> 0.128 ms
>
>
>
> 0.0 %
>
> Seq Scan
>
>
>
> 2
>
>
>
> 0.128 ms
>
>
>
> 100.0 %
>
> productosp
>
>
>
> 1
>
>
>
> 0.528 ms
>
>
>
> 0.0 %
>
> Seq Scan
>
>
>
> 1
>
>
>
> 0.528 ms
>
>
>
> 100.0 %
>
> rubros
>
>
>
> 2
>
>
>
> 0.015 ms
>
>
>
> 0.0 %
>
> Seq Scan
>
>
>
> 2
>
>
>
> 0.015 ms
>
>
>
> 100.0 %
>
> secciones
>
>
>
> 2
>
>
>
> 0.009 ms
>
>
>
> 0.0 %
>
> Seq Scan
>
>
>
> 2
>
>
>
> 0.009 ms
>
>
>
> 100.0 %
>
> Revise pero prácticamente no comprendo el resultado, si veo que en
> factura y facturas son los que mas tardan y eso es lo que quiero optimizar
>
> -----Mensaje original-----
> De: Alvaro Herrera [mailto:alvherre(at)alvh(dot)no-ip(dot)org]
> Enviado el: jueves, 12 de abril de 2012 10:17 a.m.
> Para: Victor Báez
> CC: Ayuda
> Asunto: Re: [pgsql-es-ayuda] Consulta complejas
>
> Excerpts from Victor Báez's message of jue abr 12 11:08:26 -0300 2012:
>
> > Disculpa ayer sin darme cuenta respondi directamente a un correo
> personal
>
> >
>
> > El EXPLAIN ANALYSE me saca esto que es de mi servidor
>
> Esto es bien ilegible. Creo que deberías subirlo, mejor, a
>
> http://explain.depesz.com (¿o es .org?)
>
> --
>
> Álvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org>
>
> -----
>
> Se certificó que el correo no contiene virus.
>
> Comprobada por AVG - www.avg.es
>
> Versión: 2012.0.1913 / Base de datos de virus: 2411/4929 - Fecha de la
> versión: 11/04/2012
>
>
>
> <http://www.uci.cu/>

--
Marcos Luis Ortíz Valmaseda (@marcosluis2186)
Data Engineer at UCI
http://marcosluis2186.posterous.com

10mo. ANIVERSARIO DE LA CREACION DE LA UNIVERSIDAD DE LAS CIENCIAS INFORMATICAS...
CONECTADOS AL FUTURO, CONECTADOS A LA REVOLUCION

http://www.uci.cu
http://www.facebook.com/universidad.uci
http://www.flickr.com/photos/universidad_uci


From: Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org>
To: ViBaSoft <vibasoft(at)gmail(dot)com>
Cc: Ayuda <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: RE: Consulta complejas
Date: 2012-04-12 18:16:01
Message-ID: [email protected]
Views: Whole Thread | Raw Message | Download mbox | Resend email
Lists: pgsql-es-ayuda


Excerpts from ViBaSoft's message of jue abr 12 23:33:28 -0300 2012:

> Revise pero prácticamente no comprendo el resultado, si veo que en factura y facturas son los que mas tardan y eso es lo que quiero optimizar

Esto es más ilegible aún. ¿Por qué no mandas la URL mejor?

--
Álvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org>


From: "ViBaSoft" <vibasoft(at)gmail(dot)com>
To: <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: RE: Consulta complejas
Date: 2012-04-13 02:33:28
Message-ID: 000f01cd191d$d1f73ec0$75e5bc40$@com
Views: Whole Thread | Raw Message | Download mbox | Resend email
Lists: pgsql-es-ayuda

Per node type stats

node type

count

sum of times

% of query

Append

1

0.390 ms

0.0 %

Bitmap Heap Scan

1

0.093 ms

0.0 %

Bitmap Index Scan

1

0.035 ms

0.0 %

GroupAggregate

1

521.539 ms

0.6 %

Hash

24

2727.631 ms

3.1 %

Hash Join

21

14.067 ms

0.0 %

Hash Left Join

3

58127.932 ms

65.2 %

HashAggregate

1

9.597 ms

0.0 %

Materialize

1

1139.991 ms

1.3 %

Merge Join

1

2471.029 ms

2.8 %

Seq Scan

26

6149.016 ms

6.9 %

Sort

4

17925.238 ms

20.1 %

Per table stats

Table name

Scan count

Total time

% of query

scan type

count

sum of times

% of table

compra

1

0.479 ms

0.0 %

Seq Scan

1

0.479 ms

100.0 %

compras

1

0.625 ms

0.0 %

Seq Scan

1

0.625 ms

100.0 %

depositos

2

0.016 ms

0.0 %

Seq Scan

2

0.016 ms

100.0 %

divisiones

2

0.006 ms

0.0 %

Seq Scan

2

0.006 ms

100.0 %

existencias

1

0.093 ms

0.0 %

Bitmap Heap Scan

1

0.093 ms

100.0 %

factura

1

649.125 ms

0.7 %

Seq Scan

1

649.125 ms

100.0 %

facturas

1

5495.427 ms

6.2 %

Seq Scan

1

5495.427 ms

100.0 %

familiasp

2

0.054 ms

0.0 %

Seq Scan

2

0.054 ms

100.0 %

formaspre

1

0.005 ms

0.0 %

Seq Scan

1

0.005 ms

100.0 %

lineasp

2

0.079 ms

0.0 %

Seq Scan

2

0.079 ms

100.0 %

marcas

2

0.009 ms

0.0 %

Seq Scan

2

0.009 ms

100.0 %

prod_transf

1

0.073 ms

0.0 %

Seq Scan

1

0.073 ms

100.0 %

prod_transfd

1

1.016 ms

0.0 %

Seq Scan

1

1.016 ms

100.0 %

productos

2

1.422 ms

0.0 %

Seq Scan

2

1.422 ms

100.0 %

productosb

2

0.128 ms

0.0 %

Seq Scan

2

0.128 ms

100.0 %

productosp

1

0.528 ms

0.0 %

Seq Scan

1

0.528 ms

100.0 %

rubros

2

0.015 ms

0.0 %

Seq Scan

2

0.015 ms

100.0 %

secciones

2

0.009 ms

0.0 %

Seq Scan

2

0.009 ms

100.0 %

Revise pero prácticamente no comprendo el resultado, si veo que en factura y facturas son los que mas tardan y eso es lo que quiero optimizar

-----Mensaje original-----
De: Alvaro Herrera [mailto:alvherre(at)alvh(dot)no-ip(dot)org]
Enviado el: jueves, 12 de abril de 2012 10:17 a.m.
Para: Victor Báez
CC: Ayuda
Asunto: Re: [pgsql-es-ayuda] Consulta complejas

Excerpts from Victor Báez's message of jue abr 12 11:08:26 -0300 2012:

> Disculpa ayer sin darme cuenta respondi directamente a un correo personal

>

> El EXPLAIN ANALYSE me saca esto que es de mi servidor

Esto es bien ilegible. Creo que deberías subirlo, mejor, a

http://explain.depesz.com (¿o es .org?)

--

Álvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org>

-----

Se certificó que el correo no contiene virus.

Comprobada por AVG - www.avg.es

Versión: 2012.0.1913 / Base de datos de virus: 2411/4929 - Fecha de la versión: 11/04/2012


From: "ViBaSoft" <vibasoft(at)gmail(dot)com>
To: <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: RE: Consulta complejas
Date: 2012-04-13 03:53:04
Message-ID: 000001cd1928$f0ac6ab0$d2054010$@com
Views: Whole Thread | Raw Message | Download mbox | Resend email
Lists: pgsql-es-ayuda

Ahora todas las pruebas que hago estare haciendo en mi notebook sobre una memoria total que tengo de 4GB, y la tabla mas grande que tengo es 6.500.000 registro en facturas.

work_mem = 32MB

shared_buffers=1024MB

Esto ajuste ahora mismo y la velocidad no ha cambiado

Bueno, según veo en el reporte, lo que más se está tardando en el plan de ejecución son los
nodos de tipo Hash y el Hash Left join, que constituye el 65,2 % de la consulta.

Fíjate en tu consulta cuando hiciste el EXPLAIN ANALYZE donde es que están estos Hash, que me imagino
que debe ser en los JOINS, y trata de cambiar la secuencia de los mismos, o sea, la tabla que más tiene
datos debería estar a la izquierda:
Ej.: WHERE tablagrande.id = tablachiquita.id

La secuencia tengo de esa forma, en los joins ahora cambie esa secuencia que no tenia de esa forma pero sigue igual la velocidad

Luego, haz un ALTER TABLE tablagrande SET STATISTICS 1000;
para que se actulizen las estadístiscas en esa tabla.

Esto hice sobre la columna factura en la tabla facturas que es la mas grande

Ahora, según vemos, las tablas factura y facturas son las que más se demoran. ¿Podrías enviar esta información?

SELECT relname,
relkind,
reltuples,
relpages
FROM pg_class
WHERE relname LIKE 'factura%';

"factura";"r";1.41349e+006;49391

"facturaa";"r";1199;17

"facturaa_idfacturaa_seq";"S";1;1

"facturacnf";"r";9;1

"facturacnf_idfacturacnf_seq";"S";1;1

"facturas";"r";6.50302e+006;175375

Esto nos dará el número total de entradas en la tablas e índices que comienzen con
factura, así como el número de bloques en disco ocupados por cada tabla e índice de factura.

Recomiendo también que hagas un VACUUM ANALYZE sobre esas tablas
Saludos

Periodicamente lo hago ahora

Vuelvo a probar y todo sigue igual

Despues de cambiar algunos parámetro esto me saca el explain analyze

Per node type stats

node type

count

sum of times

% of query

Append

1

0.072 ms

0.0 %

GroupAggregate

1

0.047 ms

0.0 %

Hash

17

1.127 ms

0.0 %

Hash Join

17

6.385 ms

0.0 %

HashAggregate

1

5.799 ms

0.0 %

Index Scan

4

0.337 ms

0.0 %

Materialize

1

0.066 ms

0.0 %

Nested Loop

5

1.761 ms

0.0 %

Nested Loop Left Join

3

0.508 ms

0.0 %

Seq Scan

23

48462.535 ms

100.0 %

Sort

2

8.112 ms

0.0 %

Per table stats

Table name

Scan count

Total time

% of query

scan type

count

sum of times

% of table

compra

1

0.096 ms

0.0 %

Seq Scan

1

0.096 ms

100.0 %

compras

1

0.000 ms

0.0 %

Index Scan

1

0.000 ms

0.0 %

depositos

2

0.008 ms

0.0 %

Seq Scan

2

0.008 ms

100.0 %

divisiones

2

0.008 ms

0.0 %

Seq Scan

2

0.008 ms

100.0 %

existencias

1

0.057 ms

0.0 %

Index Scan

1

0.057 ms

100.0 %

factura

1

0.168 ms

0.0 %

Index Scan

1

0.168 ms

100.0 %

facturas

1

48459.800 ms

99.9 %

Seq Scan

1

48459.800 ms

100.0 %

familiasp

2

0.061 ms

0.0 %

Seq Scan

2

0.061 ms

100.0 %

formaspre

1

0.005 ms

0.0 %

Seq Scan

1

0.005 ms

100.0 %

lineasp

2

0.089 ms

0.0 %

Seq Scan

2

0.089 ms

100.0 %

marcas

2

0.004 ms

0.0 %

Seq Scan

2

0.004 ms

100.0 %

prod_transf

1

0.112 ms

0.0 %

Index Scan

1

0.112 ms

100.0 %

prod_transfd

1

0.056 ms

0.0 %

Seq Scan

1

0.056 ms

100.0 %

productos

2

1.400 ms

0.0 %

Seq Scan

2

1.400 ms

100.0 %

productosb

2

0.161 ms

0.0 %

Seq Scan

2

0.161 ms

100.0 %

productosp

1

0.793 ms

0.0 %

Seq Scan

1

0.793 ms

100.0 %

rubros

2

0.018 ms

0.0 %

Seq Scan

2

0.018 ms

100.0 %

secciones

2

0.036 ms

0.0 %

Seq Scan

2

0.036 ms

100.0 %


From: "Eduardo Arenas C(dot)" <edomax(at)gmail(dot)com>
To: pgsql-es-ayuda <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: Consulta complejas
Date: 2012-04-13 05:06:04
Message-ID: CAEe4h9rfA9A7fomNG7V9KGMyesLGvMW4Q-yn=46JV6XFoDw=Dg@mail.gmail.com
Views: Whole Thread | Raw Message | Download mbox | Resend email
Lists: pgsql-es-ayuda

Victor, antes de modificar cualquier parámetro, yo revisaría la query
primero.

Yo veo estas haciendo muchos join , pero lo estas haciendo sobre todos los
registros en vez de selecionar solo los datos que necesitas hacer tus
calculos, agruparlos y luego hacer los join a los datos ya a grupados. No
se si me doy a entender pero es diferente hacer un join a una tabla de 8
millones de registros hacia varias otras tablas maestras, que tomar primero
la tabla de 8 millones agruparla y hacer cálculos, que te va a dar como
resultado un set menor de datos, y a este set de datos menor le pegas todas
las columnas que necesitas con joins. Entonces creo que necesitas
estructurar con sub querys tu consulta para que sea mas óptima. Además al
set de datos que agrupes obviamente correrá mas rápido si los atributos
están indexados.

debería quedar algo como (es un ejemplo no funcional):

select *
from
(
select a.*,b,c,d,e
from (select *,sum(),count() from existencias group by
1,2,3) as a
left join ... b --otras tablas, donde igual puedes
hacer calculos para minimizar el set de datos para hacer un left join.
left join c
left join d
left join e
) as a

Lo otro que veo son unos trim entre medio, lo mismo de arriba si aplicas
esto a los 8 millones de registros igual va ser costoso, no se por que
tienes que hacer eso?, si tu aplicación genera algunos blancos quizás es
mejor sacar esos blancos con un proceso nocturno habitual, o corregir en la
aplicación que está generando blancos, ojo que si haces un trim ahi el
índice del atributo no sirve de mucho.

Por último, esto donde lo cargas? en una aplicación? o lo llevas a una
planilla de cálculo?, si lo llevas a una planilla de cálculos quizás no es
necesario pedir al motor que ordene eso lo puedes hacer en tu planilla o en
la aplicación desde el código.

Espero esto te sirva para optimizar tu consulta

saludos

Eduardo Arenas

2012/4/12 Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org>

>
> Excerpts from ViBaSoft's message of jue abr 12 23:33:28 -0300 2012:
>
> > Revise pero prácticamente no comprendo el resultado, si veo que en
> factura y facturas son los que mas tardan y eso es lo que quiero optimizar
>
> Esto es más ilegible aún. ¿Por qué no mandas la URL mejor?
>
> --
> Álvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org>
> -
> 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: Alejandro Carrillo <fasterzip(at)yahoo(dot)es>
To: "Eduardo Arenas C(dot)" <edomax(at)gmail(dot)com>, pgsql-es-ayuda <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: Consulta complejas
Date: 2012-04-13 14:33:52
Message-ID: [email protected]
Views: Whole Thread | Raw Message | Download mbox | Resend email
Lists: pgsql-es-ayuda

Por favor no olvidar crear los indices en las llaves foráneas de las tablas que tienen muchos registros.

>________________________________
> De: Eduardo Arenas C. <edomax(at)gmail(dot)com>
>Para: pgsql-es-ayuda <pgsql-es-ayuda(at)postgresql(dot)org>
>Enviado: Viernes 13 de abril de 2012 0:06
>Asunto: Re: [pgsql-es-ayuda] Consulta complejas
>
>
>Victor, antes de modificar cualquier parámetro, yo revisaría la query primero. 
>
>
>Yo veo estas haciendo muchos join , pero lo estas haciendo sobre todos los registros en vez de selecionar solo los datos que necesitas hacer tus calculos, agruparlos y luego hacer los join a los datos ya a grupados. No se si me doy a entender pero es diferente hacer un join a una tabla de 8 millones de registros hacia varias otras tablas maestras, que tomar primero la tabla de 8 millones agruparla y hacer cálculos, que te va a dar como resultado un set menor de datos, y a este set de datos menor le pegas todas las columnas que necesitas  con joins.  Entonces creo que necesitas estructurar con sub querys tu consulta para que sea mas óptima. Además al set de datos que agrupes obviamente correrá mas rápido si los atributos están indexados.
>
>
>debería quedar algo como (es un ejemplo no funcional):
>
>
>select * 
>   from
>              (
>                 select a.*,b,c,d,e 
>                    from (select *,sum(),count() from existencias group by 1,2,3) as a
>                      left join ... b    --otras tablas, donde igual puedes hacer calculos para minimizar el set de datos para hacer un left join.
>                      left join     c    
>                      left join    d 
>                      left join      e
>               ) as a
>
>Lo otro que veo son unos trim entre medio, lo mismo de arriba si aplicas esto a los 8 millones de registros igual va ser costoso, no se por que tienes que hacer eso?, si tu aplicación genera algunos blancos quizás es mejor sacar esos blancos con un proceso nocturno habitual, o corregir en la aplicación que está generando blancos, ojo que si haces un trim ahi el índice del atributo no sirve de mucho.
>
>
>Por último, esto donde lo cargas? en una aplicación? o lo llevas a una planilla de cálculo?, si lo llevas a una planilla de cálculos quizás no es necesario pedir al motor que ordene eso lo puedes hacer en tu planilla o en la aplicación desde el código.
>
>
>Espero esto te sirva para optimizar tu consulta
>
>
>saludos
>
>
>Eduardo Arenas
>
>
>
>2012/4/12 Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org>
>
>
>>Excerpts from ViBaSoft's message of jue abr 12 23:33:28 -0300 2012:
>>
>>
>>> Revise pero prácticamente no comprendo el resultado, si veo que en factura y facturas son los que mas tardan y eso es lo que quiero optimizar
>>
>>Esto es más ilegible aún.  ¿Por qué no mandas la URL mejor?
>>
>>
>>--
>>Álvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org>
>>-
>>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
>>
>
>
>