Hugo A. Figueroa Solano escribió:
Nunca había visto un select tan grande, no me extraña que tarde tanto
------------------------------------------------------------------------
*De:* [email protected]
[mailto:[email protected]] *En nombre de *Edwin Quijada
*Enviado el:* Jueves, 29 de Abril de 2010 02:54 p.m.
*Para:* [email protected]
*Asunto:* [pgsql-es-ayuda] FW: Select de 11 horas
Estoy teniendo problemas con un select que me esta durando 11 horas y
su salida es de aproximada 200 records he revisado varias cosas pero
no entender bien el explain me ha ralentizado.
PD:Alguieun que sepa interpretar bien los explain podria hacer un
webmeeting o algo para poder interpretar bien esta infromacion? Creo
que Postgres da bastante informacion pero muchas veces no sabemos
interpretar estos numeros , como mi caso.
Ejemplo esta es una alerta que me envio mi server de monitoreo,munin,
con el plugin de Postgres
uno.com.do :: talio.uno.com.do :: Postgres locks
CRITICALs: Locks is 10.97 (outside range [:10]).
WARNINGs: Exclusive locks is 9.97 (outside range [:5]).
Este es el select en cuestion
http://pastebin.com/rrDPrxUB
Este es el explain del select mostrado
http://explain.depesz.com/s/Gxk
------------------------------------------------------------------------
__________ Información de NOD32, revisión 5073 (20100429) __________
Este mensaje ha sido analizado con NOD32 antivirus system
http://www.nod32.com
Hola a todos.
1- El query es horrible
2- podrias usar left o inner con esta parte del query (mezclas producto
cartesiano y joins), por lo cual enloqueces al optimizador.
aegon.toriginal c, (supongo que podria ser *inner join
**aegon.toriginal c on (a.funoid=c.unoid **)*)
aegon.tdata_address e, (supongo que podria ser * inner join
**aegon.tdata_address e on (a.fid_address=e.fid_address )*)
aegon.tdata_t3 h (supongo que podria ser *inner join
**aegon.tdata_t3 h on (a.funoid=h.funoid )*)
left outer join aegon.toffer f ON (h.foffer_id_record=f.id_record)
LEFT OUTER join aegon.tdata_persons q ON(q.fid_person =
h.fid_primary)
LEFT OUTER join aegon.tdata_persons i ON (i.fid_person =
h.fid_secundary)
LEFT OUTER join aegon.tdata_persons j ON (j.fid_person =
h.fid_child)
LEFT OUTER join aegon.tdata_payments n ON (n.fid_payment =
h.fid_payment) ,
aegon.ttransaction_head k , (supongo que podria ser * inner join
**aegon.ttransaction_head k on (a.funoid=k.funoid and
a.fcall_sec_doc=k.fsec_doc and a.fcall_type_doc=k.ftype_doc**)*)
PUBLIC.uno_employes l, (supongo que podria ser *inner join
**PUBLIC.uno_employes l on (k.fmade_by = l.id_employee )** *)
aegon.ttransaction_det m, (supongo que podria ser *inner join
**aegon.ttransaction_det m** on (m.funoid=h.funoid and m.fproductcode=
h.fproduct_code**)*)
aegon.tdata_main s (supongo que podria ser *inner join
**aegon.tdata_main s** on (*a.funoid=s.funoid*)*)
probá reemplazar los productos cartesianos por los inners
Saludos Fernando
-
Enviado a la lista de correo pgsql-es-ayuda ([email protected])
Para cambiar tu suscripción:
http://www.postgresql.org/mailpref/pgsql-es-ayuda