CONECTAR Y DECONECTAR BD SQL SERVER DILEMA

435 views
Skip to first unread message

Mary

unread,
Sep 2, 2019, 12:49:22 AM9/2/19
to Comunidad de Visual Foxpro en Español
¿Qué es mejor, conectar y desconectar la base de datos cada vez que realizo select, insert, update, etc; o solo conectar al iniciar la aplicación y luego cerrarla al salir?.


HernanCano

unread,
Sep 2, 2019, 1:57:56 PM9/2/19
to Comunidad de Visual Foxpro en Español
Depende de tu escenario.

Si se necesita que sea permanente, entonces debes mantener la conexión.

Si se necesita que sea no permanente, entonces puedes desconectar al terminar la ejecución de cada comando.

Como consideraciones adicionales:
- ¿El servicio de Internet en tu zona, o en tu empresa es muy bueno? ¿o sea que no se presentan desconexiones esporádicas?
Entonces podría ser permanente.

- ¿Ves utilidad en mantener la conexión de forma permanente?
Si la respuesta es no, entonces podrías desconectarte al terminar cada comando.

- ¿La aplicación que usas (que se conecta al motor de bases de datos) tiene limitantes en cuanto al número de usuarios concurrentes?
Si la respuesta es sí, ¿encuentras dificultad para que la conexión sea permanente o no?

- ¿Qué tipo de red utilizas: 
¿es una red "local" (todos los computadores están en el mismo edificio)? qué piensas si la conexión es permanente?
¿es una red wifi? de buen desempeño? de desempeño standard? qué piensas si la conexión es permanente cuando el desempeño es regular o menos?
¿es una red WAN (algunos los computadores están en el mismo edificio, pero hay otros en otras partes de la ciudad, o del país conectados vía Internet, tal vez VNC)? sería bueno que la conexión sea permanente?


((donde dice Tune Your Connections and Use Connection Pooling))

((REDUCING THE NUMBER OF CONNECTIONS))

((Concurrency)

((no es para aprender aprogramar en ADO, sino para leer sobre NO usar "conexiones estáticas"))

((en ADO.NET también se recomienda que la conexión no sea permanente))

(( en Control de conexiones))


Mary

unread,
Sep 2, 2019, 6:04:30 PM9/2/19
to Comunidad de Visual Foxpro en Español
no sera lo mismo que si antes de ejecutar la sentencia pregunta si esta conectado ejecuta si no conecta así no se tiene que estar desconectando y desconectando si un server te expulsa y te reconectas bueno estoy abriendo la caja de pandora 100 usuarios conectados en simultanea coencta y desconecta la ram de mi server sube que reconectar solo cuando sea nesesario

Luis suescún

unread,
Sep 2, 2019, 6:21:34 PM9/2/19
to publice...@googlegroups.com
Hernán ...
Sostener conexiones no le consume recursos al.Server ?

Si por decir algo, se graba una factura y ya no se va a grabar mas dejar esa conexión disponible le consume recursos al Server ?

Pregunta


--
Has recibido este mensaje porque estás suscrito al grupo "Comunidad de Visual Foxpro en Español" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a publicesvfoxp...@googlegroups.com.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/publicesvfoxpro/34c3678a-86fc-436a-bfd9-7a3947656620%40googlegroups.com.

mapner

unread,
Sep 2, 2019, 9:36:46 PM9/2/19
to Comunidad de Visual Foxpro en Español
En VFP sistemas de escritorio, te conviene una conexión permanente por cliente usuario, dado que la conexión / desconexión por ODBC insume un tiempo notable. Es un tema de perfomance.
Pero si debes controlar que en el servidor no se acumulen conexiones "fantasmas". Estas son conexiones que el cliente ha sufrido algún corte de red, pero en el servidor persisten y si, si se acumulan muchas puede saturar al servidor.

Gabriel Araya Garcia

unread,
Sep 2, 2019, 10:38:06 PM9/2/19
to publice...@googlegroups.com
La base de datos o la tabla que estas usando ?. Son cosas relacionadas pero diferentes.
Que BD es? SqlServer, MySQL, Oracle, ..etc?

El lun., 2 sept. 2019 a las 0:49, Mary (<maeo...@gmail.com>) escribió:
¿Qué es mejor, conectar y desconectar la base de datos cada vez que realizo select, insert, update, etc; o solo conectar al iniciar la aplicación y luego cerrarla al salir?.


--
Has recibido este mensaje porque estás suscrito al grupo "Comunidad de Visual Foxpro en Español" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a publicesvfoxp...@googlegroups.com.


--
Gabriel Araya Garcia
GMI - Desarrollo de Sistemas Informáticos
99.7721.15.70

James Suárez

unread,
Sep 2, 2019, 10:49:53 PM9/2/19
to Comunidad de Visual Foxpro en Español
Discrepo de las respuestas de algunos. SIempre sin importar la situación es mejor conectar al inicio y cerrar al salir. 
Conectar y desconectar por cada operación consume más recursos que mantener una sola conexión.
Aparte que sería mucho más lento. Al conectarse siempre se demora más que cuando haces un Query, y sobre todo si el equipo desde cual se conecta es diferente al que tiene la base de datos.
Supongamos que la red de tu cliente al server no es buena y la latencia es demasiada alta, y que al conectar se demora 2 segundos. Imagínate si tu cierras la conexión en cada OPERACIÓN, cada nueva operación demoraría 2+ segundos.  En cambio conectarse solo al inicio y mantener la conexión es lo mejor siempre en cualquier caso.

Ahora, si lo que te preocupa es que tu app deje de funcionar porque en algún momento la conexión a la db se cae, y de ahí en adelante nada va a funcionar, lo que realmente debes hacer, es verificar el estado de la conexión, de esa manera implementar una solución que al desconectarse se reconecte. Ejemplo, cuando trabajé en VFP en una empresa, yo les apliqué esa solución, me hice una clase que manejaba la conexión, y ante un error de parte de SQL, primero detectaba si el error era por cuestión de desconexión, y si era así, simplemente se reconectaba y reintentaba. Cuando programes en otros lenguajes que manejen hilos, o que sean asíncronos (ejemplo yo uso Typescript con nodejs) notarás que las librerías de base de datos, siempre manejan "pools" (varias conexiones a la base de datos que se mantienen, y  se van alternando en cada Query) y reconexiones automáticas. VFP es unihilo, y síncrono, no tiene sentido manejar un pool, pero si tiene sentido, el manejar la reconexión automática





El domingo, 1 de septiembre de 2019, 23:49:22 (UTC-5), Mary escribió:

HernanCano

unread,
Sep 3, 2019, 9:05:30 AM9/3/19
to Comunidad de Visual Foxpro en Español
Claro, Luis.
Pero házcelo entender a ella, no a mí.

Francisco

unread,
Sep 4, 2019, 6:35:13 AM9/4/19
to Comunidad de Visual Foxpro en Español
Pues esta claro que lo más eficaz y que te servirá para todos los casos es conectar hacer y desconectar que al fin y a la postre es la manera correcta de interactuar con el servidor de bbdd.

Saludos.

Francisco

unread,
Sep 4, 2019, 6:36:59 AM9/4/19
to Comunidad de Visual Foxpro en Español
Por la misma regla de tres es mejor dejar el coche en marcha siempre y así no tengo que arrancarlo cada vez y ahorro batería.... (es coña)

Carlos Miguel FARIAS

unread,
Sep 4, 2019, 7:35:10 AM9/4/19
to Grupo Fox
Estimo que no hay una respuesta absoluta al tema. Deben tenerse en cuenta que el cuello de botella de la comunicación es también por donde más fácil se pierde la conexión.
Si la conexión es una LAN, conectar al principio y luego desconectar al final sería factible. Es muy difícil que una conexión LAN se corte, salvo que las cables de red estén tirados en el piso por donde pasa gente caminando, carritos varios, etc.

En mi caso, los formularios tienen control de "usuario café", después de cierta cantidad de tiempo prudencial (no todos los formularios tienen los mismos requerimientos), el formulario avisa que se va por "usuario con picazón" y en 30", cierra el formulario, y corta la conexión, si había algo en curso, valida, si esta bien compromete, caso contrario deshace. Si el usuario protesta, le damos un curso de canto Gardel.
Otra forma de minimizar problemas y mejorar el desempeño es que las tablas estáticas (pocos cambios, como provincias, localidades, parámetros básicos, clientes activos <solo DNI y AyN>) se copian en el cliente (temporales, cursores) con control de cambios, en algún lado dejo una marca de tiempo, cuando la tabla estática se actualiza, cada formulario al abrirse, chequea la marca de tiempo y la compara con la marca local y dispara una actualización si fuese necesario.

De esa manera, el sistema no carga tanto la red, y solo conectas (si no lo estaba) para refrescar las locales.
Además esa marca de tiempo puede detectar que si la tabla local tiene una marca de tiempo posterior a la del servidor, es señal que en el servidor hicieron una vuelta atrás.

Las marcas de tiempo desde VFP son fáciles, hasta puedes usar SAVE TO y RESTORE FROM en las máquinas locales.
También puedes dejar en las máquinas locales, una marca de tiempo de inicio y fin de sesión (puede ser histórica por acumulación o solo la última, depende que tan quisquilloso es el auditor)

Esas marcas de tiempo te permiten saber si alguien trabajo después de la fecha-hora trabajada en el servidor.
Cuando la conexión es vía red externa (servidor en la nube), posiblemente el esquema sea mejor conectar- procesar - desconectar)
Estos son mis consejos, si no les gusta, tengo otros
Saludos: Miguel

--
Has recibido este mensaje porque estás suscrito al grupo "Comunidad de Visual Foxpro en Español" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a publicesvfoxp...@googlegroups.com.

Germán Fabricio Valdez

unread,
Sep 5, 2019, 2:46:32 PM9/5/19
to Comunidad de Visual Foxpro en Español
hola mary

sqldata, resuelve todos los problemas de la arquitectura cliente-servidor

y la apertura, y cierre de conexiones automaticos, o trabajar abriendo la conexion al principio del programa y cerrar al final

es complejo el tema, podes usar sqldata, o ver el codigo que utilizo

recomiendo la apertura y cierre de conexiones , por motivos de rendmiento

mpulla

unread,
Sep 5, 2019, 7:33:06 PM9/5/19
to Comunidad de Visual Foxpro en Español
Hola James.

Hace mucho que no trabajo con sql server, recuerdo que Sql Server tiene un buen pool de conexiones y decir 2 segundos es demasiado.

Siempre trabaje abriendo y cerrando conexiones, realmente nunca note la diferencia con tener la conexión abierta todo el tiempo.

Estoy hablando de una LAN, ya en una WAN hay que sumarle la latencia mas o menos dependiendo de tu configuración, pero para mi abrir y cerrar conexiones es lo indicado

Saludos.
Mauricio

Esteban H

unread,
Sep 5, 2019, 10:29:26 PM9/5/19
to publice...@googlegroups.com

Yo trabajo estableciendo la conexión al iniciar y cerrando al salir, mayormente se trabaja en Lan y Wan.

Tengo algunas conexiones x Internet q son mayormente de consultas, x suerte no he tenido problemas.

Trabajo con Firebird + VFP.

 

Saludos.

--

Has recibido este mensaje porque estás suscrito al grupo "Comunidad de Visual Foxpro en Español" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a publicesvfoxp...@googlegroups.com.

Reply all
Reply to author
Forward
0 new messages