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

Responder a