Hola disculpen la molestia nuevamente, he estado tratando de optimizar una consulta que ya habia optimizado pero el cliente me aviso que estaba tardando demasiado, lo raro de el caso es que la misma base de datos la respalde y la desplegue un par de semanas atras en un servidor de pruebas, donde se estan insertando los mismos registros diariamente, en el servidor de produccion ( server 1) la consulta tarda mas de 170 segundos en realizarse mientras en el servidor de pruebas ( server 2) tarda 2 o 3 segundos... hice un explain analyze en la consulta y despues de revizarla me doy cuenta que por alguna razon en el server 1 el indice que tengo sobre un timestamp no se esta usando, hice un backup del esquema y lo compare con el de server 1 y la estructura es la misma ( solo habia una funcion nueva en el server 2 pero no es relevante para la consulta). Hice otra prueba para ver si es por la configuracion de hardware donde server 1 esta como sigue:
2 Xeon a 2 Ghz 6Gb RAM 150 GB SATA a 10Krpm X 4 Disco duro en RAID 10 Freebsd 8.1 Postgres 8.4.4 el server 2 esta como sigue: 1 Xeon a 2 Ghz 8 GB RAM 300 GB a 7.2K rpm Disco duro sin RAID Freebsd 8.1 Postgres 8.4.4 Y los dos servidores de postgres han sido tuneados para usar los recursos del sistema. Entre las posibles opciones se penso que un disco del Arrglo RAID 10 pudiera estar fallando o tal vez se requiere mas memoria para la consulta ( La tabla tiene mas de 30M de registros), por lo que en un servidor que tengo para otras aplicaciones mas simples tengo un postgres y lo use para hacer un respaldo del server 1 y del server 2 y los desplege en este server 3: Xeon 2 GHz 2 GB RAm 150 GB x 2 a 7.2K rmp en RAID 1 Freebsd 8 Postgres 8.4.2 Donde el resultado es el mismo bdserver1 180segundos la consulta y dbserver2 5 segundo la consulta. Ya Recree el indice que me hace falta que se use, hice vacuum, vacuum analyze, reindex y nada no se mas puedo hacer, espero puedan ayudarme, la consulta es la siguiente: SELECT DE.unitno, DE.entrandosaliendo, DE.fechacreacion, DE.lat, DE.lng, DE.odometrototal, DE.odometrototal as copodo, DE.combustibletotal, TE.nombre, TE.img, TE.ops, EA.valor, EF.descripcion, EF.fault_codes, EF.tipo, EM.descripcion as desmssg, DE.pos_gps FROM (select * from datosentrada_his where unitno='111' and flota='EMPRESA1' and fechacreacion between '07/13/2011 05:00' and '07/15/2011 04:59' ) AS DE LEFT JOIN entradafallas AS EF USING(importacionid) LEFT JOIN entradaalarma AS EA USING(importacionid) LEFT JOIN entradamensajes AS EM USING(importacionid) LEFT JOIN tipoevento AS TE ON EA.tipo = TE.tipo ORDER BY DE.fechacreacion ASC Si es necesario les puedo enviar el resultado de los explain analyze que realice.. Espero puedan ayudarme... ya que he leido todo lo que he encontrado y nada. mi principal duda es por que en una db si se usa el indice y en la otra no... Roberto Campos - Enviado a la lista de correo pgsql-es-ayuda (pgsql-es-ayuda@postgresql.org) Para cambiar tu suscripción: http://www.postgresql.org/mailpref/pgsql-es-ayuda