Llamando a Oracle SP con TableAdapter muy lento

votos
3

Tengo una consulta que se ejecuta súper rápido cuando se ejecuta en el editor sql (oráculo): 1 ms.

La misma consulta (como procedimiento almacenado) cuando se ejecuta con un DataSet-TableAdapter demora 2 segundos. Solo estoy recuperando 20rows.

Dado que estoy usando un TableAdapter, los valores devueltos se almacenan en un cursor de referencia.

Si estaba buscando 2'000 filas, podría entender que se necesita algo de tiempo para construir el DataSet, pero 2 segundos para solo 20 filas parece demasiado para mí.

¿Hay una forma mejor de ejecutar SP en Oracle o esta es la única forma? ¿Qué podría intentar hacer para mejorar las actuaciones?

¡Gracias por tu ayuda!


Al buscar en google, parece que el problema está en el refcursor. Otras personas enfrentaron el mismo problema de rendimiento, pero no se proporciona ninguna solución.

Publicado el 09/12/2008 a las 16:00
fuente por usuario
En otros idiomas...                            


4 respuestas

votos
2

¿Qué proveedor de datos usas?

¿Hace referencia a System.Data.OracleClient o usa odp.net (el proveedor de datos de Oracle para conectar aplicaciones .NET con Oracle) o utiliza el proveedor de devart (anteriormente conocido como corelab).

Tengo buenas experiencias con odp.net en combinación con Oracle 9. Puede descargar odp.net de forma gratuita en el sitio de Oracle. Ver: http://www.oracle.com/technology/tech/windows/odpnet/index.html

Puede usar la última versión (11.1.0.6.20) para conectarse a una base de datos Oracle 9.

Respondida el 10/12/2008 a las 12:28
fuente por usuario

votos
0

De acuerdo. Encontré cuál es el problema.

Al principio pensé que era un problema de DataProvided, pero no lo era. Descubrí el mismo problema en SQLServer 2000 ...

Buscando en google descubrí algo sobre el plan de ejecución. Tomando esto, aumenté el rendimiento de la consulta del 50%.

Breve resumen del problema es que al ejecutar un SP por código, el DBMS tiene algunos problemas con el plan de ejecución, y no usa los índices ...

Una mejor respuesta es en esta publicación: Parámetro Sniffing (o Spoofing) en SQL Server

Espero que esto ayude.

Respondida el 12/12/2008 a las 11:45
fuente por usuario

votos
0

Asegúrate de que estás configurando el CommandTypeto CommandType.StoredProcedure.

Por ejemplo (de MSDN ):

OracleCommand cmd = new OracleCommand();
cmd.Connection = conn;
cmd.CommandText = "COUNT_JOB_HISTORY";
cmd.CommandType = CommandType.StoredProcedure;
Respondida el 10/12/2008 a las 08:42
fuente por usuario

votos
0

¿Cuánto tiempo toma usar un lector de datos en lugar de un TableAdaptor? Yo probaría el lector de datos. Nunca he tenido problemas con el lector de datos.

Respondida el 09/12/2008 a las 16:43
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more