Thread: BUG #3642: Tiempos de consultas diferentes

BUG #3642: Tiempos de consultas diferentes

From
"Arley Wilches Marcelo"
Date:
The following bug has been logged online:

Bug reference:      3642
Logged by:          Arley Wilches Marcelo
Email address:      arley.wilches@gmail.com
PostgreSQL version: 8.2
Operating system:   Linux Ubuntu Server 7.04
Description:        Tiempos de consultas diferentes
Details:

Hola, tengo una aplicacion de alrededor 100 tablas, todas con sus
respectivas llaves foraneas.
Tengo una consulta que tiene alrededor de 12 tablas involucradas, 6
subquerys.
El problemas que tengo es que al realizar la consulta por primera vez se
puede demorar alrededor de 300 a 500 ms, despues de la 5 vez ejecutada con
un intervalo de tiempo de 2 segundos la respuesta de la consulta se llega a
demorar mas de 177.552 ms.

Ya estuve revisando opciones para la creacion de indices, cambio en los
valores de postgresql.conf para el performance de Postgres, pero la verdad
ningun cambio realizado me ha servido para poder arreglar el problema.

Es una aplicacion que esta corriendo en Apache 2 y con php 5.2.1.

De antemano Muchisimas Gracias por cualquier luz que me puedan dar para
poder resolver este tema.

Anexo la consulta que ejecuto.


SELECT COUNT(DATOS.negocio_id) AS total
      FROM (SELECT negocio_razonsocial AS RAZON_SOCIAL,negocio_id,
      negocio_identificador AS IDENTIFICADOR, negocio_direccion AS
DIRECCION,
      usuario_nombre||' '||(CASE WHEN usuario_apellido <>'' THEN
usuario_apellido ELSE ' ' END) AS PROPIETARIO,
      convenio_nombre AS CONVENIO,

      ( CASE
        WHEN A.municipio_sucursal_id IS NOT NULL THEN
A.municipio_sucursal_id
        WHEN A.municipio_depende_mun_id IS NOT NULL THEN (
          SELECT Z.municipio_sucursal_id FROM municipio Z
          WHERE Z.municipio_id = (
            SELECT J.municipio_depende_mun_id
            FROM municipio AS J
            WHERE J.municipio_id = A.municipio_id
          )
        )END
      ) AS sucursal_id,

      A.municipio_departamento_id, A.municipio_id, localidad_id,
      barrio_id, negocio_convenio_id,
evaluacion_tarifa_finalidad_musica_id,
      evaluacion_tarifa_nivel_socioeconomico_id,
evaluacion_tarifa_categoria_id,
      estado_juridico_negocio_estado_id, negocio_estado_negocio_estado_id
      FROM
        negocio, barrio, localidad,
        municipio AS A, usuario, convenio,
        evaluacion_tarifa, pago_periodo,
        negocio_estado_negocio, estado_juridico_negocio,
        estado_juridico, estado_negocio WHERE negocio_id NOT IN (
    SELECT liquidacion_negocio_id FROM liquidacion
    WHERE liquidacion_activo = true
      AND ( ( liquidacion_fecha_limite >= '2007-09-28' AND liquidacion_paga
= 'f' )
        OR (liquidacion_validez >= '2007-09-28' AND liquidacion_paga = 't')
        OR ( liquidacion_anulado = false )
      )
    )
    AND estado_juridico_negocio_estado_id IN(
      SELECT estado_juridico_id
      FROM estado_juridico
      WHERE estado_juridico_bloquea = false
    )
      AND negocio_activo = 't'
      AND negocio_utiliza_musica = 't'
      AND usuario_id = negocio_usuario_id
      AND negocio_barrio_id = barrio_id
      AND barrio_localidad_id = localidad_id
      AND localidad_municipio_id = A.municipio_id
      AND convenio_id = negocio_convenio_id
      AND evaluacion_tarifa_negocio_id = negocio_id
      AND evaluacion_tarifa_activo = 't'
      AND pago_periodo_negocio_id = negocio_id
      AND pago_periodo_activo = 't'
      AND pago_periodo_estado_pago_id = 1
      AND pago_periodo_periodo = '2007'
      AND estado_juridico_negocio_negocio_id = negocio_id
      AND estado_juridico_negocio_activo = true
      AND estado_juridico_negocio_estado_id = estado_juridico_id
      AND negocio_estado_negocio_negocio_id = negocio_id
      AND negocio_estado_negocio_activo = true
      AND negocio_estado_negocio_estado_id = estado_negocio_id ) DATOS,
sucursal, zona
  WHERE sucursal.sucursal_id = DATOS.sucursal_id
  AND sucursal_zona_id = zona_id
   AND sucursal_zona_id =  7 AND sucursal.sucursal_id =  9

Re: BUG #3642: Tiempos de consultas diferentes

From
Alvaro Herrera
Date:
Arley, lo tuyo no es un bug sino un problema de rendimiento.  Deberias
reportarlo a una lista de correo que podria ser pgsql-performance (pero
tendira que ser en ingles) o pgsql-es-ayuda.  Tambien podrias preguntar
en el canal de IRC #postgresql-es en irc.freenode.net.



--
Alvaro Herrera                        http://www.advogato.org/person/alvherre
"After a quick R of TFM, all I can say is HOLY CR** THAT IS COOL! PostgreSQL was
amazing when I first started using it at 7.2, and I'm continually astounded by
learning new features and techniques made available by the continuing work of
the development team."
Berend Tober, http://archives.postgresql.org/pgsql-hackers/2007-08/msg01009.php