Visual Basic - Rendimiento en aplicacion VB contra SQL-server

Life is soft - evento anual de software empresarial
 
Vista:

Rendimiento en aplicacion VB contra SQL-server

Publicado por mike (2 intervenciones) el 15/11/2005 13:21:59
Hola amigos,

a ver si me pueden ayudar, el escenario es el siguiente: aplicacion VB6.0 que se conecta a un sql-server2000 remoto mediante ADO.

Logicamente habran varias instancias de dicha aplicacion atacando simultaneamente al servidor, desde distintos terminales.

Mis dudas son:

-abro una conexion (objeto connection) al abrir el programa y la cierro al terminar? o para cada formulario en el que necesite lanzar una consulta hago open y luego close?

-que hay de los cursores? utilizo aduseclient o por el contrario aduserver???? teniendo en cuenta que el servidor recibira varias peticiones simultaneas, pero pocas, a lo sumo 2 o 3 aplicaciones cliente.

Saludos y gracias.
Mike
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Rendimiento en aplicacion VB contra SQL-server

Publicado por Alex Salamanca (1 intervención) el 15/11/2005 23:35:55
Hola Mike:

Te cuento un poco mi experiencia, yo trabajo hace tiempo con VB-SQL Server y Crystal Reports, lo hago de la siguiente manera:

conexiones presistentes, es decir, Al iniciarse la aplicación debe conectarse al server, incluso antes de abrir el primer formulario, por otro lado uso cursores del lado del cliente, pero ojo, definelos en la conexion (objetoconexion.cursorlocation = aduseclient), no en el recordset, y siguiendo con esto tengo rendimiento de 120000 registros de 12 columnas en casi 4 segundos con 10 a 20 pc's simultaneos, te recomiendo que si van a ser en algún caso más de 100 pc's que se conectan al sql server evalues el utilizar conexiones persistentes porque cada conexion ocupa alrededor de 1/2 megabyte de memoria en el server y se vuelve un poco lento si tiene 128 o 256mb de ram, en otras palabras piensa para que esto funcione bien en lo siguiente, cada usuario ocupa medio megabyte es decir en 100 usuarios conectados es 50MB que van a consumir cuando esten todos accediendo al sql server, por ejemplo se podría dar este caso en un supermercado, todos trabajando durante el día, a esos 50mb que te mencionaba sumale lo que gasta el sist. operativo, y las demás aplicaciones que esten corriendo en el servidor y no debes dejar al server jamas con menos del 15% de memoria libre, sino capaz que se pega cuando este trabajando.


Saludos
Alex Salamanca
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Rendimiento en aplicacion VB contra SQL-server

Publicado por mike (2 intervenciones) el 16/11/2005 16:28:02
Hola Alex,

muchas gracias por tu aportacion.

Veo que tendre que cambiar mi sistema de conexiones ya que actualmente abro y cierro la conexion despues de realizar una consulta. El motivo de esto es que habia pensado que si un usuario abre la aplicación y se va p.ej a tomar un cafe durante ese rato hay una conexion abierta contra el servidor, y pense que la conexion podria cerrarse por timeout o similar. No existe este riesgo?

Respecto a los cursores, y teniendo en cuenta que no voy a tener mas de 2 o 3 usuarios trabajando simultaneamente, quizas valdria la pena seguir usando cursores de servidor verdad?

Gracias y saludos.
Mike.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Rendimiento en aplicacion VB contra SQL-server

Publicado por Alex Salamanca (6 intervenciones) el 16/11/2005 17:09:07
Hola mike:

Con respecto a lo de la conexión, podría cerrarse en cierto tiempo, eso me pasó con postgresql(linux) el cual no era el postgres el que cerraba la conexión, sino el cortafuegos, hubo que configurar correctamente el cortafuegos.

Por otro lado con respecto a los cursores, yo siempre he usado cursores del lado del cliente, ya que por ejemplo al hacer una consulta y si tienes cursores del lado del cliente te transporta todo los datos (registros, filas, etc.) al cliente, haciendo ese viaje solamente (1 solo viaje del cliente al server ida-vuelta), en cambio cursores de servidor imagina lo siguiente: una consulta que trae 10 filas de resultado y tu recorres esos resultados son 10 viajes al server y con eso trafico de red, lentitud, recursos, etc y por fin una aplicación mas lenta.

Te recomiendo que uses cursores del lado del cliente y si te preocupa eso que dicen que si no cierras el recordset es tener una conexión al server, da lo mismo porque ya tienes la conexión persistente que abriste al principio del programa y por ultimo utiliza un metodo que trae el recordset que se llama "getrows", ejemplo:

dim m as variant 'estas declarando una matriz
dim rst as new adodb.recordset
.......................................... ' todo el proceso que haces para que se haga la consulta sql
m = rst.getrows
rst.close 'cierras el recordset y evitas lo que dicen algunos de gastar recursos
' y de ahi en ves de recorrer recordset recorres una matriz


Saludos y suerte
Alex Salamanca - Chile
PD: De donde eres mike?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Rendimiento en aplicacion VB contra SQL-server

Publicado por mike (3 intervenciones) el 18/11/2005 13:30:16
Hola de nuevo Alex,

despues de leer tu explicacion creo que me pasare a cursores de cliente ;)

Lo de usar una matriz de momento lo pospongo ya que tengo gran cantidad de consultas ya realizadas utilizando recordsets y tendria que cambiarlas todas. Quizas en una siguiente fase me ponga con ello.

Gracias por tu ayuda!

Soy de Barcelona, España.

Mike.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar