Re: [pgsql-es-ayuda] Función con select se ejecutar muy lenta comparada con la ejecución de select fuera de la función

From: "José Alberto Sánchez Nieto (Trabajo)" <albertosanchez(at)hiperusera(dot)es>
To: Ernesto Lozano <elozanohia(at)gmail(dot)com>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: [pgsql-es-ayuda] Función con select se ejecutar muy lenta comparada con la ejecución de select fuera de la función
Date: 2016-12-21 18:10:05
Message-ID: 77B9EFAD-4219-47B7-9090-A47BF6BDF507@hiperusera.es
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Hola Ernesto, la versión que utilizo es la 9.6.1 y lo que utilizo es lo siguiente:
- Desde shell:
select * from d_articulo where id_articulo = ‘2097’
Con el explain plan me dice que utiliza un index scan lo cual es correcto ya que tengo un índice por ese campo y el tiempo de ejecución es 0.045ms

-Desde función:
CREATE OR REPLACE FUNCTION prueba_velocidad(
v_id_articulo character varying
RETURNS void AS
$BODY$
DECLARE
vv_reg_articulo record;
BEGIN
EXECUTE ‘SELECT * FROM d_articulo WHERE id_arjticulo = ‘ || quote_literal($1)
INTO vv_reg_articulo
USING v_id_articulo;

RETURN;
END;
$BODY$
LANGUAGE plpgsql STABLE
COST 100;
ALTER FUNCTION prueba_velocidad(character varying)
OWNER TO valmanar;

Y la ejecuto con: select prueba_velocidad(‘2097’) dándome unos tiempos de 0.229ms
He probado sin el quote_literal simplemente con $1 y tampoco, evidentemente también probé sin el execute poniendo la query normal cómo la del shell y sigue dándome unos tiempos muy altos. ¿Qué puede ser?.
Gracias por la ayuda y saludos.



José Alberto Sánchez Nieto
Director Dpto. Tecnologías de la Información
Hiper Usera, S.L.
Pol. Industrial Las Avenidas · Torrejón de la Calzada C.P. 28991 (Madrid)
Tlf: 918609900 · Fax: 918160000
albertosanchez(at)hiperusera(dot)es <mailto:albertosanchez(at)hiperusera(dot)es>
No me imprimas si no es necesario. Protejamos el medio ambiente

Le informamos que su dirección de correo electrónico, asi como el resto de los datos de carácter personal aportados, serán objeto de tratamiento automatizado en nuestro ficheros, con la finalidad de gestionar la agenda de contactos de nuestra empresa y, para poder atender a sus peticiones de consulta via electronica. Vd.podrá en cualquier momento ejercer el derecho de acceso, rectificación, cancelación y oposición en los términos establecidos en la Ley Orgánica 15/1999 mediante notificación escrita con copia de DNI., a la entidad, a través de éste e-mail.

La información incluida en este e-mail es CONFIDENCIAL, siendo para su usu exlusivo del destinatario arriba mencionado. Si Usted lee este mensaje y no es el destinatario indicado, le informamos de que está totalmente prohibida la utilización, divulgación, distribución y/o reproducción de esta comunicaci´ón sin autorización expresa en virtud de la legislacion vigente. Si ha recibido este mensaje por error le rogamos nos o notifique inmediatamente por esta misma vía y proceda a su eliminación.

> El 21 dic 2016, a las 18:48, Ernesto Lozano <elozanohia(at)gmail(dot)com> escribió:
>
> Estimado Jose Alberto
>
> Que version usas y que plataforma esta tu DB si puedes enviar TXT del Shell o script para ser mas especifico podemos ayudarte mejor
>
> Saludos y Feliz Inicio de la Navidad
>
> Atentamente
>
> Ernesto Lozano
> Directo
> Hia Technology Systems
> ISV EnterpriseDB para Venezuela y El Caribe
> The Enterprise Postgres Company
>
>
>
> El 21 de diciembre de 2016, 12:40, "José Alberto Sánchez Nieto (Trabajo)" <albertosanchez(at)hiperusera(dot)es <mailto:albertosanchez(at)hiperusera(dot)es>> escribió:
> Hola, tengo un problema con una función, dentro de ella tengo varias select bastante sencillas, el problema es que si ejecuto cualquier de estas select desde fuera de la función tarda muy poco en ejecutarse, en cambio desde dentro de la función tarda muchísimo más, por ejemplo la query desde fuera de la función tarda 0.055ms y la misma dentro de la función tarda 0.239, esta función es llamada muchas veces en un proceso de loop y sospecho que los select de dentro de la función no están utilizando los indices, estos select tienen un where que en su comparativa se hace contra una variable que le paso a la función en cada iteración del loop ¿cómo puedo forzar a que los select de dentro de la función utilizan los indices?, y ¿cómo podría ver el explain plan de los select dentro de la función para asegurarme de que utilizan los indices?.
> Gracias y saludos.
>
>
> José Alberto Sánchez Nieto
> Director Dpto. Tecnologías de la Información
>
> Hiper Usera, S.L.
> Pol. Industrial Las Avenidas · Torrejón de la Calzada C.P. 28991 (Madrid)
> Tlf: 918609900 · Fax: 918160000
> albertosanchez(at)hiperusera(dot)es <mailto:albertosanchez(at)hiperusera(dot)es>
> No me imprimas si no es necesario. Protejamos el medio ambiente
>
> Le informamos que su dirección de correo electrónico, asi como el resto de los datos de carácter personal aportados, serán objeto de tratamiento automatizado en nuestro ficheros, con la finalidad de gestionar la agenda de contactos de nuestra empresa y, para poder atender a sus peticiones de consulta via electronica. Vd.podrá en cualquier momento ejercer el derecho de acceso, rectificación, cancelación y oposición en los términos establecidos en la Ley Orgánica 15/1999 mediante notificación escrita con copia de DNI., a la entidad, a través de éste e-mail.
>
> La información incluida en este e-mail es CONFIDENCIAL, siendo para su usu exlusivo del destinatario arriba mencionado. Si Usted lee este mensaje y no es el destinatario indicado, le informamos de que está totalmente prohibida la utilización, divulgación, distribución y/o reproducción de esta comunicaci´ón sin autorización expresa en virtud de la legislacion vigente. Si ha recibido este mensaje por error le rogamos nos o notifique inmediatamente por esta misma vía y proceda a su eliminación.
>
>
>
>
>
> --
> Atentamente
> Ernesto Lozano
> Director General
> Hia Techonology Systems, C.A.
> www.hiatechnology.co.ve <http://www.hiatechnology.co.ve/>
> 0058 241 867.20.23

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Anthony Sotolongo 2016-12-21 18:33:16 Re: Re: [pgsql-es-ayuda] Función con select se ejecutar muy lenta comparada con la ejecución de select fuera de la función
Previous Message Ernesto Lozano 2016-12-21 17:48:22 Re: [pgsql-es-ayuda] Función con select se ejecutar muy lenta comparada con la ejecución de select fuera de la función