Ping y tnsping

Desde un mismo PC habro 2 sesiones MS-DOS, en una de ellas ejecuto el comando ping "nombre del servidor" -t y el tiempo de respuesta siempre esta en 1ms o < 10 ms. En la otra sesion ejecuto el comando TNSPING "nombre de servicio" -n (el cual se encuentra en el servidor al que le estoy haciendo ping en ese momento) y la respuesta va desde 0 ms a 3020 m o mas, cabe destacar que en ese momento las aplicaciones que "tocan la BD" se demoran mas en responder. ¿Pregunta Por que se presenta esta diferencia de tiempo entre ping y tnsping?

1 Respuesta

Respuesta
1
En principio tienes toda la pinta de que es un problema de adatacion de las tramas de Sql-net que viajan por la red. Si tu red tiene configurado el TCP para enviar y recibir tramas de hasta 64 Kb y le enviamos tramas de 8 Kb, pues en principio estamos desaprovechando el potencial de la red y además mal gastando recursos, así como si estás configurado para 8Kb y le enviamos 64 pues estamos haciendo fragmentaciones de los paquetes, lo cual va ha hacer que tengamos un retraso y penalización en red porque a parte de fragmentar la información va a tener que hacer muchos más viajes de ida y vuelta una transacción para poder terminar.
Existen unos parámetros que se implementan a nivel de Tnsnames en el cliente y listener en el servidor que nos ayudarán a adecuar lo que enviamos por la red a la capacidad física de la misma; estos son los parámetros TDU y SDU. SDU:Es la especificación para el buffer de datos. TDU:Tamaño de buffer de nivel de transporte. Se implementa en Kbytes y un ejemplo en tnsnames podría ser:
---------------------------------------
DEMO.WORLD =
(DESCRIPTION =
(SDU=32768)
(TDU=32768)
(ADDRESS_LIST =
(ADDRESS =
(PROTOCOL = TCP)
(Host = DEMO1)
(Port = 1525)
)
)
(CONNECT_DATA = (SID = DEMO)
)
)
---------------------------------------
Aquí hemos implementado unos parámetros a 32Kbytes.
Ejemplo para Listener (coicidiendo con el tnsnames del cliente):
-------------------------------------
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SDU = 32768)
(TDU = 32768)
(SID_NAME = demo1)
)
(SID_DESC =
(SDU = 32768)
(TDU = 32768)
(SID_NAME = demo)
)
)
PASSWORDS_LISTENER = (oracle)
---------------------------------------
Esto es un detalle de una configuración de un listener.
Estos parámetros configurados acorde con el tamaño aceptado en las tramas del protocolo de red nativo, bien sea TCP como otro protocolo, debería acelerar la conexión a la B.DE y evitar en buena medida la fragmentación de los paquetes enviado por ella.
No necesariamente tienen que ser iguales los valores de TDU y SDU, pero se considerará como válido el valor menor de los dos para las comunicaciones.
Como ejemplo ilustrativo:
Si definiésemos un valor para el buffer de SQLplus de 100 y las filas de una consulta tienen 100 bytes cada una, entonces requeriríamos 10.000 bytes, por lo que para resolver la consulta necesitaríamos múltiples paquetes; sin embargo si utilizamos un valor de matriz 10, evitamos la fragmentación de paquetes en buena medida, si asignamos a TDU y SDU 2 Kb. Esto claro está es la teoría, ya que casi nunca sabremos con exactitud la longitud de registro que puede llegar a tener una consulta que accede a múltiples tablas, osea que tendremos que realizar una estimación;
Como ya se sabe, "lo que es bueno para el bazo es malo para el espinazo", osea que no lo llevaremos muy alto al principio hasta no mostrar claros síntomas de mejoría. Lo más sensato es subir el buffer poco a poco para ver la evolución de las consultas o conexiones a la B.D. Deberá haber concoerdancia entre el SDU, TDU del cliente con el del servidor.
Espero haber ayudado a esclarecer y a mejorar esos tiempos de respuesta.
Suerte y al toro!.
Pedro

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas