VELOCIDAD EN INTERNET SQL SERVER

24/10/2005 - 10:52 por José Miguel | Informe spam
Hola, tenemos una aplicación que se conecta a un servidor SQL Server
2000 desde Internet, El problema con el que nos hemos encontrado es la
velocidad de transferencia. He realizado una aplicación para testear la
velocidad con el servidor, que envía y recibe 1MB que se guarda y se
envía desde el propio servidor SQL (Esta almacenado dentro de una
tabla). El el cortafuegos el unico puerto que tengo abierto es el del
servidor sql, las ip de los clientes que estan en internet son las
unicas que tienen acceso al puerto sql.

La velocidad que tenemos es la siguiente:

Servidor --> 2Mb (fibra) tanto de subida como de bajada
Aplicación que se conecta desde Internet --> 1Mb de bajada y 512 de subida

Cuando ejecuto el programita mencionado me da una velocidad de:
Envió de 1MB al servidor -->2KB como mucho
Recibo 1MB del servidor -->4KB +-

Si compruebo la velocidad de las líneas me dan un ancho de banda muy
bueno en las dos líneas. (Desde los Test's que hay por Internet).

No se si es Internet, los puertos, el servidor ,???????????

Si ejecuto la aplicación en local el servidor y la red responden muy bien.

Que os parece el problema,

Saludos y gracias.

Preguntas similare

Leer las respuestas

#1 Oscar
24/10/2005 - 13:15 | Informe spam
Hola,

Puede que el problema no sea la velocidad de la linea sino el número de
"round trips" que se realizan...
Me explico supongamos que tu aplicación tiene que obtener una lista de
libros del servidor de sql (filas de una tabla) y
tienes un codigo tal que asi: (En seudocodigo)

Mientras Existan titulos en T hacer
Ejecutar comando (Select * from libros where titulo ='T[i]')
i++
Fin Mientras .

Bien este "Inocente código" lo que esta haciendo a nivel de red es : (más o
menos)
(Suponiendo que tenemos la conexión abierta ..)
1) - Enviar la query al Servidor
Aplicacion --> Servidor SQl
2) - Esperar a obtener los resutados
Servidor Sql --> Aplicacion
3) - Una vez obtenidos los datos, confirmar la rececion al servidro
Aplicacion --> Servidor..

Entre cada operación existe un tiempo de retraso producido por la red
(puedes obtenerlo con un ping), en una red local este tiempo es despreciable
(En la mayoria de los casos), sin embargo en Inet o redes con un mucho lag
hay que tenerlo muy en cuenta.

Mira un ping desde mi máquina a google :

Reply from 216.239.59.104: bytes2 time4ms TTL#2
Reply from 216.239.59.104: bytes2 time 2ms TTL#2
Reply from 216.239.59.104: bytes2 time1ms TTL#2
Reply from 216.239.59.104: bytes2 time3ms TTL#2

Ping statistics for 216.239.59.104:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 171ms, Maximum = 202ms, Average = 182ms

Si cogemos esos 182 ms de media los multiplicamos por 3 obtenemos el tiempo
invertido en comunicaciones para obtener una fila ... si lo multiplicamos
por la 100 filas que queriamos obtener ... buff tu mismo.
Y posiblemente la cantidad de información que hemos obtenido es muy baja (un
par de k´s como mucho), pero el tiempo "perdido" es muyyyy alto.
Esto lo he vivido en mis propias carnes. Soluciones:

Lo primero de todos intentar obtener la mayor cantidad de información en el
menor número posible de instruciones, por ejemplo podriamos cambiar el
codigo anterior por:

query = "Select * from libros where titulo in " + ObtenerListaDelibros (T)
// ObtenerListaDelibros genera una cadena del tipo ('titulo1', 'tutulo2',
...,'tutiloN').
Ejecutar comando (query).

Aparte de esto , poco más vas a poder hacer, salvo pillar una conexion con
menor lag, o intentar disminuir el número de saltos entre las dos máquinas,
tirar un cable de fibra entre las dos maquinas ;-) ... etc.

Saludos.




www.metasincro.es
"José Miguel" wrote in message
news:
Hola, tenemos una aplicación que se conecta a un servidor SQL Server 2000
desde Internet, El problema con el que nos hemos encontrado es la
velocidad de transferencia. He realizado una aplicación para testear la
velocidad con el servidor, que envía y recibe 1MB que se guarda y se envía
desde el propio servidor SQL (Esta almacenado dentro de una tabla). El el
cortafuegos el unico puerto que tengo abierto es el del servidor sql, las
ip de los clientes que estan en internet son las unicas que tienen acceso
al puerto sql.

La velocidad que tenemos es la siguiente:

Servidor --> 2Mb (fibra) tanto de subida como de bajada
Aplicación que se conecta desde Internet --> 1Mb de bajada y 512 de subida

Cuando ejecuto el programita mencionado me da una velocidad de:
Envió de 1MB al servidor -->2KB como mucho
Recibo 1MB del servidor -->4KB +-

Si compruebo la velocidad de las líneas me dan un ancho de banda muy bueno
en las dos líneas. (Desde los Test's que hay por Internet).

No se si es Internet, los puertos, el servidor ,???????????

Si ejecuto la aplicación en local el servidor y la red responden muy bien.

Que os parece el problema,

Saludos y gracias.
Respuesta Responder a este mensaje
#2 José Miguel
24/10/2005 - 14:03 | Informe spam
Gracias Oscar,

Me ha servido tu explicación, quiza parte del problema sea ese en la
aplicación pero en el proceso de testeo estoy recibiendo un archivo tipo
image desde sql con Ado.net. El archivo en cuestion pesa 1 M

Saludos y gracias


Oscar escribió:
Hola,

Puede que el problema no sea la velocidad de la linea sino el número de
"round trips" que se realizan...
Me explico supongamos que tu aplicación tiene que obtener una lista de
libros del servidor de sql (filas de una tabla) y
tienes un codigo tal que asi: (En seudocodigo)

Mientras Existan titulos en T hacer
Ejecutar comando (Select * from libros where titulo ='T[i]')
i++
Fin Mientras .

Bien este "Inocente código" lo que esta haciendo a nivel de red es : (más o
menos)
(Suponiendo que tenemos la conexión abierta ..)
1) - Enviar la query al Servidor
Aplicacion --> Servidor SQl
2) - Esperar a obtener los resutados
Servidor Sql --> Aplicacion
3) - Una vez obtenidos los datos, confirmar la rececion al servidro
Aplicacion --> Servidor..

Entre cada operación existe un tiempo de retraso producido por la red
(puedes obtenerlo con un ping), en una red local este tiempo es despreciable
(En la mayoria de los casos), sin embargo en Inet o redes con un mucho lag
hay que tenerlo muy en cuenta.

Mira un ping desde mi máquina a google :

Reply from 216.239.59.104: bytes2 time4ms TTL#2
Reply from 216.239.59.104: bytes2 time 2ms TTL#2
Reply from 216.239.59.104: bytes2 time1ms TTL#2
Reply from 216.239.59.104: bytes2 time3ms TTL#2

Ping statistics for 216.239.59.104:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 171ms, Maximum = 202ms, Average = 182ms

Si cogemos esos 182 ms de media los multiplicamos por 3 obtenemos el tiempo
invertido en comunicaciones para obtener una fila ... si lo multiplicamos
por la 100 filas que queriamos obtener ... buff tu mismo.
Y posiblemente la cantidad de información que hemos obtenido es muy baja (un
par de kŽs como mucho), pero el tiempo "perdido" es muyyyy alto.
Esto lo he vivido en mis propias carnes. Soluciones:

Lo primero de todos intentar obtener la mayor cantidad de información en el
menor número posible de instruciones, por ejemplo podriamos cambiar el
codigo anterior por:

query = "Select * from libros where titulo in " + ObtenerListaDelibros (T)
// ObtenerListaDelibros genera una cadena del tipo ('titulo1', 'tutulo2',
...,'tutiloN').
Ejecutar comando (query).

Aparte de esto , poco más vas a poder hacer, salvo pillar una conexion con
menor lag, o intentar disminuir el número de saltos entre las dos máquinas,
tirar un cable de fibra entre las dos maquinas ;-) ... etc.

Saludos.




Respuesta Responder a este mensaje
#3 Miguel Egea
24/10/2005 - 16:54 | Informe spam
Así, es, prueba a abrir una conexíon con Query analizer y no traerte ese
campo, así puedes tener una idea de la velocidad objetivo.

Saludos
Miguel Egea
"José Miguel" wrote in message
news:
Gracias Oscar,

Me ha servido tu explicación, quiza parte del problema sea ese en la
aplicación pero en el proceso de testeo estoy recibiendo un archivo tipo
image desde sql con Ado.net. El archivo en cuestion pesa 1 M

Saludos y gracias


Oscar escribió:
Hola,

Puede que el problema no sea la velocidad de la linea sino el número de
"round trips" que se realizan...
Me explico supongamos que tu aplicación tiene que obtener una lista de
libros del servidor de sql (filas de una tabla) y
tienes un codigo tal que asi: (En seudocodigo)

Mientras Existan titulos en T hacer
Ejecutar comando (Select * from libros where titulo ='T[i]')
i++
Fin Mientras .

Bien este "Inocente código" lo que esta haciendo a nivel de red es : (más
o menos)
(Suponiendo que tenemos la conexión abierta ..)
1) - Enviar la query al Servidor Aplicacion --> Servidor SQl
2) - Esperar a obtener los resutados Servidor Sql --> Aplicacion
3) - Una vez obtenidos los datos, confirmar la rececion al
servidro Aplicacion --> Servidor..

Entre cada operación existe un tiempo de retraso producido por la red
(puedes obtenerlo con un ping), en una red local este tiempo es
despreciable (En la mayoria de los casos), sin embargo en Inet o redes
con un mucho lag hay que tenerlo muy en cuenta.

Mira un ping desde mi máquina a google :

Reply from 216.239.59.104: bytes2 time4ms TTL#2
Reply from 216.239.59.104: bytes2 time 2ms TTL#2
Reply from 216.239.59.104: bytes2 time1ms TTL#2
Reply from 216.239.59.104: bytes2 time3ms TTL#2

Ping statistics for 216.239.59.104:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 171ms, Maximum = 202ms, Average = 182ms

Si cogemos esos 182 ms de media los multiplicamos por 3 obtenemos el
tiempo invertido en comunicaciones para obtener una fila ... si lo
multiplicamos por la 100 filas que queriamos obtener ... buff tu mismo.
Y posiblemente la cantidad de información que hemos obtenido es muy baja
(un par de k´s como mucho), pero el tiempo "perdido" es muyyyy alto.
Esto lo he vivido en mis propias carnes. Soluciones:

Lo primero de todos intentar obtener la mayor cantidad de información en
el menor número posible de instruciones, por ejemplo podriamos cambiar el
codigo anterior por:

query = "Select * from libros where titulo in " + ObtenerListaDelibros
(T) // ObtenerListaDelibros genera una cadena del tipo ('titulo1',
'tutulo2', ...,'tutiloN').
Ejecutar comando (query).

Aparte de esto , poco más vas a poder hacer, salvo pillar una conexion
con menor lag, o intentar disminuir el número de saltos entre las dos
máquinas, tirar un cable de fibra entre las dos maquinas ;-) ... etc.

Saludos.



email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida