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