Estaba viendo una consulta SQL muy lenta (que se origina en una aplicación Java que utiliza Hibernate implementada en JBoss 5.1). Esta consulta en particular arrojó unos 10 000 registros, pero aún tardó 40 o más.¿Alguna solución para las ineficiencias de TNS de Oracle (muchos viajes de ida y vuelta, latencia) desde una aplicación Java?
Terminé olfateando el tráfico con la base de datos (wireshark tiene un disector para TNS) y encontré algo inesperado. Cuando los datos provenían del servidor, cada fila de resultados estaba en su propio paquete TNS. Además, cada paquete TNS fue reconocido por el cliente (es decir, el servidor de la aplicación) antes de que se enviara el siguiente desde la base de datos. Para los registros de 10K, hay 10K recorridos de ida y vuelta para obtener un paquete y reconocerlo. El impacto en el rendimiento es enorme.
Esto es terriblemente ineficiente. TCP permite paquetes más grandes y tiene una serie de mecanismos (ventanas deslizantes, ACK retrasados) para reducir la latencia y aumentar el rendimiento. Sin embargo, en este caso, es el protocolo TNS en la parte superior que agrega su propia negociación.
Si ejecuto la misma consulta desde el SQL Developer de Oracle, no veo este patrón. La consulta se completa en aproximadamente 1/10 del tiempo, sin miles de viajes redondos.
Versión corta: El protocolo de cable de Oracle (TNS) parece pasar datos en un paquete TNS por fila de resultados de consulta y requiere que cada paquete sea confirmado por el cliente antes de que el servidor envíe el siguiente.
He encontrado algo de información sobre esto [aquí] [1] (desplácese hacia abajo hasta la sección sobre 'Los parámetros SDU y TDU en el archivo tnsnames.ora').
Y, por tanto, mi pregunta: ¿es posible controlar el comportamiento del controlador de Oracle (estoy usando 10.2.0.4.0) para que el protocolo TNS sea más eficiente? De nuevo, esta es una aplicación J2EE bastante estándar implementada en JBoss.
¡Muchas gracias!
Oye, gracias por la profundidad Pregunta con algunas sugerencias para personas que tienen situaciones similares. Votaron ... – TonyP