consulta sobre conexiones a SQL 2005

16/05/2008 - 19:45 por Luis Mata | Informe spam
Hola

tengo una aplicacion que conecto a sql 2005 digamos 60 maquinas usando el
sistema simultaneamente diseñe el software para que se conecte al iniciar la
aplicacion y desconectar al salir.
En el activity monitor veo todas las conexiones algunos dicen sleeping lo
que entiendo no estan haciendo nada, mi pregunta es con esto el servidor se
hace lento o se sobrecarga.
seria recomendable que solo se conectaran cuando hicieran una transaccion?
o lo puedo dejar con esa configuracion.
me estaria restando algun recurso a pesar de estar en sleeping los demas?

Att
Luis Mata Figueroa
Área Informática
Centro Cerámico Las Flores SAC
RPC: 993597297
TEL: 6174613

Preguntas similare

Leer las respuestas

#16 Alfredo Novoa
16/05/2008 - 23:48 | Informe spam
Hola Penta,

El Fri, 16 May 2008 12:30:48 -0700 (PDT), Penta escribió:

Estimado Alfredo.
Porque este comentario ?

ya hace
unos cuantos años que existe esto y que ayuda a la performance de las
conexiones, tambuien ya hace unos cuantos años que se recomienda en las
aplicaciones trabajar con modelos desconectados (me conecto cuando necesito,
uso y me descoecto),



Y hace muchos más años que la gente que no sabe recomienda tonterías.



Pues por que el que haya gente por ahí recomendando cosas no implica que
las recomendaciones sean buenas. Sobre todo cuando los que hacen las
recomendaciones no son expertos.

No seria mejor para todos nosotros que discutamos con fundamentos para
que todos aprendamos de lo mejor que debemos hacer para nuestros
trabajos,



¿Y por que no se lo dices a Maxi que fue el que empezó a decir cosas sin
fundamento?

En este topic me gustaria saber en que me beneficia realmente abrir la
conexion y cerrarlas al salir de la aplicacion.



Es fácil y rápido de implementar, da buen rendimiento, y puedes aprovechar
bien el sistema de seguridad del SGBD.

Si lo comparo con lo
que a mi gusto es lo mejor por un tema de confiabilidad en el codigo
es abrir y cerrar mientras se necesite.



Pues a mi me gustaría saber que ganas en confiabilidad por abrir y cerrar
conexiones todo el rato.


Saludos
Alfredo
Respuesta Responder a este mensaje
#17 Alfredo Novoa
17/05/2008 - 00:16 | Informe spam
El Fri, 16 May 2008 12:21:26 -0700 (PDT), Penta escribió:

Aportando un poco a los siempre buenos comentarios de Maxi.
Si consideran que 50 KB es poco, estamos de acuerdo, por otra parte,
cuando llaman lento a conectar cada vez que necesites hacer algo es
demasiado generico, todas las aplicaciones que tengo se conectan -
realizando lo necesario y se desconectan, si intentas comparas el
tiempo entre conexion abierta y conectar y desconectar NI lo
persiviras, por tal motivo, mi sugerencia es solo conectar cuando lo
necesitas.



Pues yo lo noto un montón por ejemplo si estoy avanzando por un
DataGridView trayendome bloques bajo demanda.

Otro ejemplo es que al cerrar la conexión pierdo todas las consultas
preparadas y SQL Server tiene que compilarlas otra vez. Las consultas
preparadas pierden su sentido si cierras la conexión sistemáticamente
después de cada consulta.

Yo no digo que esté mal cerrar las conexiones si llevan mucho rato sin
utilizarse. De hecho lo hago. Lo que creo que es una tontería es aplicar
como regla universal el abrir y cerrar la conexión para cada operación.

Un ejemplo:
1 Te conectas
2 Abres transaccion
3 Realizas lo requerido (aca todas las sentencias que inolucran tu
proceso)
4 Cierras transaccion
5 Cierras conexion

El punto 1 y 5 del primer ejemplo los tiempos son ridiculos
(milisegundos)



No tan ridículos. 100 milisegundos es un tiempo que se percibe claramente.

Además está claro que 3 pasos son mejor que 5, así que habría que
justificar por que usamos una solución más complicada.

Además que apsaria si con el segundo ejemplo por algun olvido del
desarrollador no cierra la transaccion ??



Que detectaríamos rápidamente ese grave error y lo corregiríamos.

en el codigo trataras de
volver abrir una transaccion y OTRO error mas de la aplicacion, en
cambio, si se te olvido cerrar la transaccion (que estamos de acuerdo
es un error garrafal) pero la cerraras si o si, por lo tanto cuando
vuelves abrir SI podra abrir transaccion, aca lo unico que pasara es
que los insert update y delete NO realziaran los efectos esperados.



Cosa que es mucho peor que la aparición de un error en la pantalla, por que
el usuario puede pasar horas creyendo que está introduciéndo información y
que se pierda todo su trabajo, o también puede pasar que tarden mucho en
detectarse el error y que cuando lo detecten no sepan bien de donde
proviene.


Saludos
Alfredo
Respuesta Responder a este mensaje
#18 Alfredo Novoa
17/05/2008 - 00:46 | Informe spam
El Fri, 16 May 2008 16:57:46 -0300, Maxi escribió:

Coincido contigo, tiene varios problemas mantener la conexion entrante, por
ejemplo como manejar el tema de disponibilidad, imaginemos esto

1) El usuario inicia su aplicacion, al hacer esto se abre una conexion a la
base
2) El usuario mantiene su sistema abierto por una semana, (cosa normal en la
mayoria de los usuarios)



Se puede encontrar un término medio entre tener una conexión abierta una
semana y estar abriendo y cerrando conexiones a cada momento.

Ahora bien, esta conexion dura mucho tiempo el servidor mira que pasa con
ella, consume memoria, etc. Que pasa si se corta o hay un microcorte (cosa
que puede suceder) la conexion se corrompe, entonces hay que pensar en la
aplicacion como trabajar con esto.



Igual que hay que pensar en si hay un corte en medio de una transacción.

Bueno son muchas cosas a considerar, si miras en otros lenguajes (java por
ejemplo) se intenta usar el mismo concepto que vos y yo comentamos, me
conecto uso lo que necesito y me desconecto. Esto no es lento para nada ya
que existe el pool de conexiones que ayuda.



¿Pero no ves que las conexiones de la piscina son de larga duración?

Criticas una cosa en una linea y luego la recomiendas en la línea
siguiente.

Pero bueno, aun como decis vos, no hemos visto que nos digan para demostrar
que todos estamos equivocados (Microsoft, IBM, SUN, nosotros, todos en
lineas generales) de que lo otro es mejor y porque, yo la verdad que no creo
que todas estas empresas sean tontas y recomienden cosas idiotas, si fuere
asi no serian lo grande que son :-)



También puedes verlo al revés. Si estas empresas no hiciesen cosas idiotas
de vez en cuando entonces serían mucho más grandes de lo que son :-)


Saludos
Alfredo
Respuesta Responder a este mensaje
#19 Carlos M. Calvelo
17/05/2008 - 01:39 | Informe spam
Hola Alfredo,

On 17 mei, 00:46, Alfredo Novoa wrote:
El Fri, 16 May 2008 16:57:46 -0300, Maxi escribió:

> yo la verdad que no creo
> que todas estas empresas sean tontas y recomienden cosas idiotas, si fuere
> asi no serian lo grande que son :-)



Que ingenuidad! :-)


También puedes verlo al revés. Si estas empresas no hiciesen cosas idiotas
de vez en cuando entonces serían mucho más grandes de lo que son :-)




O quizás son tan grandes porque venden las mismas idioteces
una y otra vez; cada vez en un envoltorio distinto ('NUEVO!').
Y quizás porque todas las 'víctimas', 'educadas' por esas mismas
empresas, siguen comprando ya que empresas de estas
dimensiones 'deben saber lo que hacen' (si no quien lo va a saber?).
Son ellas mismas las que nos dicen cuales son 'nuestras necesidades'.

Las empresas no son personas, no tienen moral ni conocimiento
de lo que está bien o mal. Son máquinas de hacer dineritos, que
es su única razón de ser; no importa como. Cualquier otro interés
es secundario. De las personas con estas cualidades decimos
que son psicópatas.

Saludos,
Carlos
Respuesta Responder a este mensaje
#20 Penta
17/05/2008 - 06:41 | Informe spam
Hola de nuevo.
Por cada instruccion no abro y cierro, eso lo hago por cada proceso.

Ejemplo.

Insercion de factura y su detalle:

1.- Abro conexion.
2.- Abro transaccion
3.- Aca realizo TODAS las instrucciones pero TODA he ?
4.- Cierro transaccion
5.- Cierro conexion.

Como veras luego de esto el usuario, no esta realizando mas cosas, por
lo tanto, según mi punto de vista no es necesario tener la conexion
abierta no ??
Cualquier milisegundo es tiempo estamos totalmente de acuerdo, pero el
usuario NO lo nota bajo ningun punto de vista.

"Pues yo lo noto un montón por ejemplo si estoy avanzando por un
DataGridView trayendome bloques bajo demanda. "

Pues ahi me pillaste no se como funciona el DataGridView, al parecer
no es una Grid comun y corriente, ya que en este caso NO necesito
traer de a trozos los datos, mas bien me los traigo de una sola vez y
la lleno.


Atte.
Penta.
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida