PDA

Ver la Versión Completa : Lentitud ejecución SP desde Delphi


darkone2k4
08-06-2016, 18:55:16
Salu2 amigos.

Les escribo por lo siguiente:
1.- Tengo un SP en Oracle 12c, el cual si lo ejecuto a nivel de BD con al TOAD, éste no tarda más de 2 segundos, pero cuando desde la aplicación llamo al SP con los mismos parámetros que utilicé a nivel de BD, delhpi tarda en 30 a 60 segundos en que devuelva el resultado.
He puesto un punto de interrupción antes de enviarle el último parámetro y al debugear, la demora se produce en el .open del tstoredproc.
2.- Me he asegurado de que los parámetros tengan el mismo tipo de datos tanto en el SP como en la aplicación delphi.
3.- Me llevé la query del SP a un componente tquery en delphi y el resultado es el mismo.
4.- El plan de ejecución de la query es bajo, los joins se realizan con los índices correctos, ya que por eso desde la BD el sp no tarda más de 2 segundos.

Alguno de ustedes habrá pasado por algo similar para que me puedan orientar?
Será posible que la ejecución del SP desde Delphi, altere el plan de ejecución de la query del SP?

Uso Delphi 6 y la BD es Oracle 12c Standar edition.

Estaré atento a sus comentarios.

Salu2.

bitbow
09-06-2016, 00:17:51
Intenta realizar otras operaciones sobre la base de datos, podria ser un select que traiga pocos registros para validar si es la conexion o la ejecucion de proceso lo que esta tardando y si tienes posibilida intenta con otros componentes de base de datos.

Saludos.

darkone2k4
09-06-2016, 00:24:03
Intenta realizar otras operaciones sobre la base de datos, podria ser un select que traiga pocos registros para validar si es la conexion o la ejecucion de proceso lo que esta tardando y si tienes posibilida intenta con otros componentes de base de datos.

Saludos.
Gracias por responder.
El SP devuelve una lista de alumnos por sala, por lo que no devuelve más de 30 registros.
Eliminé el componente TStoredProc, lo creé de nuevo y nada.
Definí los parámetros en el TStoredProc y nada. Definí los parámetros por línea de código y nada.

Estuve pensando en utilizar una conexión del tipo ADO sólo para el formulario en el cual tengo el problema, ya que actualmente trabajo con los componentes de la BDE, para ver si eso me puede servir.

salu2.

Casimiro Notevi
09-06-2016, 00:57:56
¿Cómo lo ejecutas, qué codigo, etc.?

Neftali [Germán.Estévez]
09-06-2016, 09:52:41
La verdad es que no tiene mucho sentido.
Prueba a realizar la llamada utilizando un ADOQuery (para descartar cosas).

Revisa los parámeteros del componente tipo CursorLocation, CursorType,...
No deberían afectar dado que el resultado comentas que son 30 registros, pero nunca se sabe.

lgarcia
09-06-2016, 14:54:20
Prueba con los componentes de Unidac, que los he probado contra Oracle 11 y trabajan con buena velocidad.

Saludos
Luis