2012-01-12 17 views
5

Estoy tratando de leer una columna clob de Oracle en .Net y observar un rendimiento muy bajo y mucho tráfico de red.Pobre rendimiento al obtener el campo clob de Oracle en .Net

He intentado con ODP + OCI, devArt + OCI formas de acceder a los datos con los mismos resultados: toma aproximadamente 20 segundos obtener 1000 filas en un lector de datos y leer el valor inicial para cada fila.

Al examinar los rastros de wireshark, resulta que cada vez que trato de leer el campo clob de una sola fila en el lector, hay varios paquetes adicionales de tcp enviados entre el cliente y el servidor. Entonces, para 1000 filas, esto se vuelve 1000 veces más lento que si se consulta solo una fila.

Al mismo tiempo, si ejecuto la misma consulta en SQL Developer (que creo que utiliza el controlador jdbc delgado en lugar de oci), obtengo los resultados instantáneamente, incluidos los valores de clob. No intenta consultar clob para cada fila, ¡las obtiene todas de una vez!

Pero no veo un cliente ligero para .net. ¿Cómo puedo acelerar las cosas? ¡Por favor ayuda!

EDITAR: Mi tipo de campo es en realidad XMLTYPE almacenado como clob, no es un verdadero clob. El uso de getClobVal sobre él mejora el resultado en un 50% a 10 segundos para 1000 filas. Pero, al mismo tiempo, Sql Developer devuelve los resultados al instante, no en 10 segundos.

+0

¿Alguna vez resolvió este problema? ¿Has registrado una solicitud de soporte con el proveedor? –

Respuesta

1

Ha observado correctamente que Oracle retrasa la recuperación de LOB. Por lo tanto, el rendimiento de su aplicación está limitado por el tiempo de ida y vuelta de la red.

Con la propiedad InitialLOBFetchSize de la clase OracleCommand (en ODP.NET, ver documentation), puede indicar a Oracle para recuperar parte de la LOB con la recuperación iniciales de la fila. Si sus LOB no son demasiado largos, esto puede hacer una gran diferencia.

+0

Gracias, también lo estaba mirando ayer pero no me estaba haciendo ninguna diferencia. De hecho, no fui muy honesto en mi mensaje: tenemos el campo XmlType almacenado como clob, no como un clob directo y quizás esto esté causando problemas. También intenté llamar a getClobVal para obtener un aumento del 50% en el rendimiento, pero eso es solo 10 segundos para 1000 filas, mientras que SQL Developer obtiene 5000 virtualmente al instante. – neonknight

Cuestiones relacionadas