Conexion abierta

10/11/2008 - 22:07 por Carlos | Informe spam
Es muy grave dejar la conexion a la base de datos mucho tiempo abierta, por
ejemplo mientras un formulario dure abierto?
Lo cuestiono porque que muchos abren y cierran con cada llamada a la base de
datos.

Preguntas similare

Leer las respuestas

#1 Alberto Poblacion
10/11/2008 - 22:26 | Informe spam
"Carlos" <carl> wrote in message
news:
Es muy grave dejar la conexion a la base de datos mucho tiempo abierta,
por ejemplo mientras un formulario dure abierto?
Lo cuestiono porque que muchos abren y cierran con cada llamada a la base
de datos.



No es grave si tienes pocos usuarios. Pero si tienes miles de usuarios,
y el programa deja la conexión abierta mientras está abierto, necesitas en
total miles de conexiones simultaneas a la base de datos. En cambio si se
abre momentáneamente en el momento de enviar cada consulta y luego se vuelve
a cerrar, puedes soportar miles de usuarios con sólo unas poquitas
conexiones simultáneas al servidor. En resumen, se hace por escalabilidad.

En cuanto a abrir y cerrar con cada llamada, piensa que el
comportamiento predeterminado de .Net es el de usar el Pool de conexiones.
Cuando cierras una conexión no se cierra de verdad, sino que se devuelve al
pool. La siguiente vez que hay que abrirla, no se abre de verdad, sino que
se recupera la que ya estaba abierta en el pool. Este proceso de "meter y
sacar del pool" es muy rápido (en comparación con lo que se tarda en abrir
realmente una conexión), por lo que el programa tiene un alto rendimiento a
pesar de que aparentemente, al examinar el fuente, parezca que la conexión
se está abriendo y cerrando todo el rato.
Respuesta Responder a este mensaje
#2 Carlos
11/11/2008 - 13:08 | Informe spam
Una cuestion:
En las pruebas que he hecho, por eso hice la pregunta, he notado una
diferencia importante en la velocidad de acceso cuando la conexion se esta
abriendo y cerrando, o sea es mucho mas lento que dejarla abierta hasta que
se cierre un form. Sera que no tengo activado el pool de conexiones? Como
chequeo para ver si lo tengo activado o se espera que siempre lo esté por
defecto?

En caso de que este activado, cual puede ser la razon de la lentitud? Digo
lentitud aproximadamente el doble de tiempo que si siempre se deja abierta.

Dices que si son pocos usuarios se pueda dejar abierta all-time, pero
cuantos serian pocos usuarios, hasta 50 , hasta 100 ?

Le agradezco mucho la explicacion.


"Alberto Poblacion"
escribió en el mensaje news:
"Carlos" <carl> wrote in message
news:
Es muy grave dejar la conexion a la base de datos mucho tiempo abierta,
por ejemplo mientras un formulario dure abierto?
Lo cuestiono porque que muchos abren y cierran con cada llamada a la base
de datos.



No es grave si tienes pocos usuarios. Pero si tienes miles de usuarios,
y el programa deja la conexión abierta mientras está abierto, necesitas en
total miles de conexiones simultaneas a la base de datos. En cambio si se
abre momentáneamente en el momento de enviar cada consulta y luego se
vuelve a cerrar, puedes soportar miles de usuarios con sólo unas poquitas
conexiones simultáneas al servidor. En resumen, se hace por escalabilidad.

En cuanto a abrir y cerrar con cada llamada, piensa que el
comportamiento predeterminado de .Net es el de usar el Pool de conexiones.
Cuando cierras una conexión no se cierra de verdad, sino que se devuelve
al pool. La siguiente vez que hay que abrirla, no se abre de verdad, sino
que se recupera la que ya estaba abierta en el pool. Este proceso de
"meter y sacar del pool" es muy rápido (en comparación con lo que se tarda
en abrir realmente una conexión), por lo que el programa tiene un alto
rendimiento a pesar de que aparentemente, al examinar el fuente, parezca
que la conexión se está abriendo y cerrando todo el rato.


Respuesta Responder a este mensaje
#3 Alfredo Novoa
11/11/2008 - 13:29 | Informe spam
El Tue, 11 Nov 2008 08:08:34 -0400, Carlos escribió:

Dices que si son pocos usuarios se pueda dejar abierta all-time, pero
cuantos serian pocos usuarios, hasta 50 , hasta 100 ?



Depende de la memoria del servidor. ¿Alguien sabe cuanta memoria consume
una conexión?

Por ejemplo si una conexión ocupa 40 Kb entonces con 25.000 usuarios no
consumirías ni un giga, y si el servidor tiene por ejemplo 16 gigas
entonces no sería problema.


Saludos
Respuesta Responder a este mensaje
#4 Carlos
11/11/2008 - 17:06 | Informe spam
Oh, pues mis aplicaciones llegarían con mucho esfuerzo a 50 usuarios!:)
Segun eso, hasta podria dejarse la conexion abierta todo el tiempo,
inclusive para la duracion de sesion de la aplicacion, no solo para un
formulario.
Pero, solo es la memoria el factor a considerar para dejar una conexion
permanentemente abierta ?
La sugerencia de abrir y cerrar por cada llamada al servidor -aunque haya un
pool-, es un mito ?


fredo Novoa" escribió en el mensaje
news:tfkq3rcbpa9f.1mrdpf1o43cfm$
El Tue, 11 Nov 2008 08:08:34 -0400, Carlos escribió:

Dices que si son pocos usuarios se pueda dejar abierta all-time, pero
cuantos serian pocos usuarios, hasta 50 , hasta 100 ?



Depende de la memoria del servidor. ¿Alguien sabe cuanta memoria consume
una conexión?

Por ejemplo si una conexión ocupa 40 Kb entonces con 25.000 usuarios no
consumirías ni un giga, y si el servidor tiene por ejemplo 16 gigas
entonces no sería problema.


Saludos
Respuesta Responder a este mensaje
#5 Alfredo Novoa
11/11/2008 - 19:51 | Informe spam
Hola Carlos,

El Tue, 11 Nov 2008 12:06:04 -0400, Carlos escribió:

Oh, pues mis aplicaciones llegarían con mucho esfuerzo a 50 usuarios!:)
Segun eso, hasta podria dejarse la conexion abierta todo el tiempo,
inclusive para la duracion de sesion de la aplicacion, no solo para un
formulario.



Sin ningún problema. Y además eso te permite utilizar mejor el mecanismo de
seguridad, por que puedes crear un usuario y contraseña de SQL Server para
cada uno.

Pero, solo es la memoria el factor a considerar para dejar una conexion
permanentemente abierta ?



Bueno, también está el límite de conexiones de SQL Server que es de solo
32767. Si hay más razones me encantaría saberlas.

La sugerencia de abrir y cerrar por cada llamada al servidor -aunque haya un
pool-, es un mito ?



Con una piscina las conexiones siempre están abiertas y puedes llegar
fácilmente a cientos de miles de usuarios, y supongo que ese consejo viene
de la época en la que un ordenador tenía unos pocos megas de memoria RAM.

Otra ventaja de las piscinas en el caso de aplicaciones Web es que las
conexiones las abres una sola vez y no cada inicio de sesión.

Pero para una aplicación de escritorio con 50 usuarios no tienen ningún
sentido.

Saludos
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida