Limitaciones en un servidor web

256 views
Skip to first unread message

Sumilito

unread,
Mar 14, 2020, 10:49:26 AM3/14/20
to Comunidad de Visual Foxpro en Español
Saludos a todos los amigos del zorro!.. me cambié de servidor web y llevé conmigo las BD en Mysql, Cuál seria su recomendación si el host te limita el número de conexiones max a 10 y te desconecta una vez que detecta inactividad del conector?.. alguna idea. sería conectar o desconectar con frecuencia o como quitar las conexiones inactivas que el servidor las cuantifica?.

James Suárez

unread,
Mar 14, 2020, 2:50:37 PM3/14/20
to publice...@googlegroups.com
Qué pagues por un mejor servidor

El sáb., 14 mar. 2020 a las 9:49, Sumilito (<dare...@gmail.com>) escribió:
Saludos a todos los amigos del zorro!.. me cambié de servidor web y llevé conmigo las BD en Mysql, Cuál seria su recomendación si el host te limita el número de conexiones max a 10 y te desconecta una vez que detecta inactividad del conector?.. alguna idea. sería conectar o desconectar con frecuencia o como quitar las conexiones inactivas que el servidor las cuantifica?.

--
Visita el Blog de la Comunidad Visual FoxPro en Español: http://comunidadvfp.blogspot.com
---
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/e173dd36-2edc-436b-b104-c1670443c112%40googlegroups.com.

Antonio Meza

unread,
Mar 14, 2020, 3:12:58 PM3/14/20
to Comunidad de Visual Foxpro en Español
Son muy pocas conexiones!!! debes contar con mas, aunque dependerá de la cantidad de usuarios concurrentes, pero se me hace muy pocas 10!!!

Las buenas practicas de servidores de bases de datos dicen que siempre siempre debes conectarte, realizar lo que necesites y desconectarte!!! es decir permanecer siempre conectado al servidor de base de datos es una mala practica, ya que consume mas recursos el servidor.

saludos
Antonio Meza

James Suárez

unread,
Mar 14, 2020, 5:15:02 PM3/14/20
to publice...@googlegroups.com
Conectarse y desconectarse consume más, que mantener una conexión, ojo. No sé de donde sacan eso 

--
Visita el Blog de la Comunidad Visual FoxPro en Español: http://comunidadvfp.blogspot.com
---
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,
Mar 14, 2020, 8:07:00 PM3/14/20
to Comunidad de Visual Foxpro en Español
coloca esta instrccion antes de conectarte 

SQLSETPROP(0,"IdleTimeout",5)

Antonio Meza

unread,
Mar 16, 2020, 11:04:55 AM3/16/20
to Comunidad de Visual Foxpro en Español
Mas bien te pregunto de donde sacas que conectarse y desconectarse consume mas? la primera ves que te conectas tarda pero la segunda y posteriores son mas rápidas, tener conexiones activas consumen recursos del servidor, como memoria, disco duro y cpu, estén o no estén realizando operaciones en la base de datos. Porque crees que Empresas como AWS te cobran por uso, otras empresas que cobran mas barato te limitan a cierta cantidad de usuarios y si detectan inactividad te cierran la conexión, porque están consumiendo recursos innecesarios.

saludos
Antonio Meza



El sábado, 14 de marzo de 2020, 15:15:02 (UTC-6), James Suárez escribió:
Conectarse y desconectarse consume más, que mantener una conexión, ojo. No sé de donde sacan eso 

El sáb., 14 mar. 2020 a las 14:13, Antonio Meza (<solv...@gmail.com>) escribió:
Son muy pocas conexiones!!! debes contar con mas, aunque dependerá de la cantidad de usuarios concurrentes, pero se me hace muy pocas 10!!!

Las buenas practicas de servidores de bases de datos dicen que siempre siempre debes conectarte, realizar lo que necesites y desconectarte!!! es decir permanecer siempre conectado al servidor de base de datos es una mala practica, ya que consume mas recursos el servidor.

saludos
Antonio Meza

El sábado, 14 de marzo de 2020, 8:49:26 (UTC-6), Sumilito escribió:
Saludos a todos los amigos del zorro!.. me cambié de servidor web y llevé conmigo las BD en Mysql, Cuál seria su recomendación si el host te limita el número de conexiones max a 10 y te desconecta una vez que detecta inactividad del conector?.. alguna idea. sería conectar o desconectar con frecuencia o como quitar las conexiones inactivas que el servidor las cuantifica?.

--
Visita el Blog de la Comunidad Visual FoxPro en Español: http://comunidadvfp.blogspot.com
---
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 publice...@googlegroups.com.

James Suárez

unread,
Mar 16, 2020, 1:37:52 PM3/16/20
to publice...@googlegroups.com
Estás equivocado. 
Cuando te conectas por primera vez, se tiene que hacer una cantidad de operaciones que parecen pequeñas, pero si se hacen en masa dejan huella (como por ejemplo DNS si se usa hostname en vez de IP, autenticación, registro de conexión, etc). Yo trabajo mucho en el área de streaming y proxies, y tengo que entender como funciona esto, porque sí o sí hay que optimizar al máximo el  I/O. Mantener una conexión constante consume mucha menos CPU, I/O (disco,red,etc)  y hace el programa más eficiente, ya que mantiene el canal abierto al servidor, y no tiene que estar cerrandolo y abriendo cada vez que se va a hacer algo.

Para dar un ejemplo, imagina que tienes que cortar 10 limones, cual proceso sería más eficiente: 
1. Sacas el cuchillo del lugar donde lo guardas, cortas un limón, lo lavas y lo guardas, lo sacas de nuevo cortas el limón lo lavas y lo guardas, y vuelves a hacer el mismo proceso  por cada limón.
2. Sacas el cuchillo del lugar donde lo guardas, cortas los 10 limones, lo lavas y lo guardas


De lo único que uno debe estar pendiente, es evitar tener demasiadas conexiones abiertas en 1 solo programa (ya que si tienes las costumbre de abrir conexiones sin cerrarlas eso si va a matar el servidor), solo deberías tener 1 conexión abierta, por cada programa (sobre todo en VFP que es síncrono, y no tendría sentido mantener más de 1 abierta)

"Porque crees que Empresas como AWS te cobran por uso, otras empresas que cobran mas barato te limitan a cierta cantidad de usuarios" => Ante tu argumento, primero hay que saber que si AWS le cobra a uno por uso, no tiene nada que ver con el dilema de  mantener conexiones abiertas o no. En AWS se puede programar perfectamente de las dos maneras. Si lo que te refieres es a los servicios de funciones lambda, pues debo decirte que muchas empresas de hosting (sé que lo hace now.sh por ejemplo), aún en funciones lambda, mantienen los procesos abiertos (supongo que algo al estilo de lo que hace PHP-FPM) para que sea más rápido, y además que tienen una infraestructura tan grande, y cobran lo suficientemente caro, como para no preocuparse si un usuario decide gastar muchos más recursos (de hecho para ellos mejor que gaste más). Generalmente si una empresa limita la cantidad de usuarios, tampoco tiene que ver con el dilema de mantener conexión  abierta o no, es porque saben que entre más usuarios más recursos van a usar (generalmente esta práctica de limitar la tienen servicios sobrecargados de usuarios  y lentos). Si te imponen un límite debes cumplirlo, de lo contrario vas a tener problemas de lentitud, sea que cierres las conexiones a cada rato o no


"la primera ves que te conectas tarda pero la segunda y posteriores son mas rápidas" => precisamente es por lo mismo, algunos drivers de conexión, hacen lo que se conoce como KEEP-ALIVE, que es dejar la conexión socket abierta por un tiempo, por si acaso se hace reconexión al mismo servidor. Eso es muy común también en páginas web, cuando un navegador o programa abre una página, realiza la conexión socket al servidor, que al inicio puede tardar , pero luego los request siguientes se hacen sobre el mismo socket haciendo que se hagan más rápidos. Más que refutar lo que digo, de hecho es una prueba más

Espero que con eso quede más que claro.


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/8b8d419c-15b1-4e8e-b765-9d5a8563064f%40googlegroups.com.

Antonio Meza

unread,
Mar 16, 2020, 2:35:19 PM3/16/20
to Comunidad de Visual Foxpro en Español
No dudo que este equivocado porque no soy un DBA, sin embargo tengo compañeros que lo son y siempre me han dicho que NUNCA deje conexiones abiertas en el servidor si no se están usando, que es desinformación que circula en la red para sistemas locales, porque consumen procesador, memoria y disco, y cuando tienen que usar servidores remotos empiezan los problemas!!!! los inicios de sesión en el servidor se notan cuando ya tienes cientos de usuarios, en mi caso lo máximo que he llegado a tener son 100 usuarios de los cuales concurrentes tal vez unos 50 y en todos los casos siempre uso conexión y desconexión en un servidor local.

En cuanto a dejar conexiones abiertas por error de programación eso ya es otra histeria, es un error no tiene nada que ver con el problema planteado!!!!

ahh también me comentaron que existe el spool de conexiones, es decir técnicas las hay pero que ninguna buena practica te dirá que debes mantener la conexión abierta si no esta en uso que es pésimo hacer algo así. Y pues como no soy DBA y me llevaría años estudiar esa carreta pues tomo en cuenta las recomendaciones de alguien que si es una DBA!!!

Por lo que veo tu eres de los que deja el ventilador o el foco de la casa prendido para no tener que apagar y prender a cada rato??? jajajajajajajajajaj es broma!!!!!

saludos
Antonio Meza

Carlos Vargas

unread,
Mar 16, 2020, 3:09:41 PM3/16/20
to Comunidad de Visual Foxpro en Español
La idea es que si tu conexiona un servidor mysql es local o en una red interna, mantengas una conexión por cada app, la abres al inicio y la cierras al terminar el programa.

En servidores por internet lo mas adecuado es que al momento de realizar la consulta o comando sql abras la conexión y la cierres. es cierto que la apertura de la conexión por primera vez es demandante en recursos (tiempo y memoria), el caso es que aun cuando tu la cierres, en el servidor si es posible se mantiene en un pool de conexiones abiertas, realmente no la cierra  ni la descarga de memoria sino que la mantiene, la siguiente vez que tu app abra la conexion esto ocurre instantaneo por que esta en cache toda la info necesaria para abrirla.

puedes probar, abre la conexion y la cierra, toma el tiempo, ya las siguientes veces es instantaneo.

salu2
carlos vargas

El sábado, 14 de marzo de 2020, 8:49:26 (UTC-6), Sumilito escribió:

James Suárez

unread,
Mar 16, 2020, 3:55:33 PM3/16/20
to publice...@googlegroups.com
Yo respondí concretamente por la creencia que mantener conexiones abiertas gasta más recursos, cuando en realidad es lo contrario. Claro, cada conexión abierta gasta una cantidad de memoria en el server, pero eso es menos costoso, que el "handshake" del canal TCP y la autenticación cada vez que quiera conectarse, gastando más CPU e I/O del server (y también haciendo más lento). Si desea comprobar esto, solo basta que genere un ciclo de alguna(s) consulta(s) a la DB, primero conectando y cerrando en cada repetición del ciclo,  y luego haciendo la conexión solo al inicio a ver cuál tarda más. SI su programa constantemente está haciendo consultas a la base de datos por cada operación, no tiene sentido estar cerrando y abriendo a cada rato la conexión
POR ESO LO DIJE, ES MÁS EFICIENTE MANTENER 1 CONEXIÓN ABIERTA MIENTRAS LA APP ESTÉ EN EJECUCIÓN, que estar cerrando y abriendo cada que el usuario haga una operación en la APP

Ahora, si me voy por el lado que es mejor para un programa con varios usuarios (ejemplo 100), pues ni estar cerrando, ni mantener es lo mejor. Si se quiere realmente eficiencia de recursos, usted nunca debería conectarse directamente a la base de datos. Debería construir un API que se ejecute en el servidor, que mantenga un pool de conexiones razonable  y que sea el encargado de recibir las solicitudes de cada cliente, hacer las operaciones y enviar la respuesta. De esa manera mantiene un nivel constante de uso de memoria en el servidor y reduce la cantidad de "consultas" que necesita hacer el cliente
 


--
Visita el Blog de la Comunidad Visual FoxPro en Español: http://comunidadvfp.blogspot.com
---
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/45e22d3e-e604-4101-a112-6079a16888b6%40googlegroups.com.

JoVeTri

unread,
Mar 17, 2020, 11:10:51 AM3/17/20
to Comunidad de Visual Foxpro en Español
*
Aprovecho al respecto del tema para consultar.
*
Considerando que pienso utilizar FOXYDB, quisiera tener certeza
al respecto de las conexiones, según indicaciones leídas, debo
conectarme en cada formulario, pero surge la duda si tengo
10 formularios abiertos, como debería proceder:

**** Entiendase movimientos como accesos a la base de datos sea para 
**** select, insert, upddate, delete.

  1.- En programa inicial (MAIN) realizo conexión, utilizo dicha conexion y 
en cada formulario y reviso la conexion (RECONECT con mismo id numero
  inicial),cada vez que tenga que realizar movimientos.
Cierro conexion al salir del MAIN.

  2.- Conectarme al inicio de CADA formulario, mantengo dicha conexion y 
reviso la conexion (con mismo id numero inicial),cada vez que
tenga que realizar movimientos.
Cierro conexion al salir del formulario.

  3.-   En los formularios cada vez que tenga que realizar movimientos,
realizó NUEVA conexion y la cierro, una vez realizado  movimiento.
Cierro conexion al salir del formulario.

- Que hacer en caso de que el formulario pierda el foco, como debería reconectarme.
 
Solicito su colaboración, porque estoy desarrollando sistema con MariaDB y me gustaría,
resolver anticipadamente.

Muchas gracias.

Antonio Meza

unread,
Mar 17, 2020, 12:27:58 PM3/17/20
to Comunidad de Visual Foxpro en Español
FoxyDb te permite usar conexión permanente o conexión y desconexión, realiza tus pruebas, mide los tiempos que te tarda en conectar y desconectar primeramente y luego hagas pruebas estando conectado siempre, lo que mejor te funcione es lo que debes escoger.

Es muy sencillo usar el escenario que quieras ya que solo tienes que modificar 2 propiedades de FoxyDb.

.handle_Network = .t.

Permite estar siempre conectado, por defecto es verdadero, porque como comente la mayoría lo usa así, pero no siempre porque la mayoría lo use de una forma debe ser la forma correcta.

odb.handle_Reconnection = .f.

Permite reconectarte al servidor si no estas conectado, por defecto es falso.

Ajustando estas 2 propiedades según tu necesidad es lo único que tienes que hacer y ya lo demás todo es automático.

No te recomiendo hacer la conexión al iniciar tu sistema porque posiblemente uses una variable publica, pero si usas sesión privada de datos esa conexión no te va a permitir ver los datos en los formularios. Para resolver este problema puedes compartir la conexión y ya la vas a poder usar dentro de los formularios con sesiones, pero si tu servidor te desconecta por inactividad vas a tener problemas.

Mi recomendación es que hagas la conexión dentro de cada formulario, en vez de usar una variable publica usa una propiedad del formulario para crear el objeto FoxyDb que ya puedas usar fácilmente, si tienes un limite de 10 conexiones y un usuario abre 3 formularios y estas usando conexión permanente, pues si otro usuario abre 5 formularios ya tienes 8 conexiones usadas, al rato otro tercer usuario intenta abrir 3 formularios y ya no va a poder usar el ultimo, lo mejor es conectar y desconectar.

En conclusión hay muchas formas de solucionar tu problema, incluso con la conexión permanente y compartida,

saludos
Antonio Meza
Message has been deleted

JoVeTri

unread,
Mar 17, 2020, 2:58:04 PM3/17/20
to Comunidad de Visual Foxpro en Español
Lo tengo definido de esta forma:
myform.oDB = NEWOBJECT("foxydb","foxydb.prg")
myform.oDb.handle_Network = .F. && Si mantiene permanente la conexión
myform.oDb.handle_Reconnection = .T. && Si se intenta reconectar al servidor
myform.oDb.handle_Verify = .T. && Si Verifica el estado de la conexión al servidor
*
Pero me queda la duda, al respecto de máximo numero de conexiones, 
quien lo determina, porque veo que FOXYDB no tiene máximo.
*
Pero retomo la pregunta, porque tengo o tenía piensado permitir
tener como máximo 10 formularios abiertos, para permitir a los
usuario tener varios procesos en uso, como un menú de FAVORITOS.
*
Antonio, de paso también utilizó FOXYTB y FOXYRB, que me parecen excelentes.
*
Nuevamente Gracias.


Antonio Meza

unread,
Mar 17, 2020, 4:09:13 PM3/17/20
to Comunidad de Visual Foxpro en Español
myform.oDb.handle_Verify = .T.

Esto genera un envió adicional para verificar si esta realmente conectado, debes usarlo cuando vas a guardar por ejemplo, pero no te recomiendo tenerlo activado siempre y mas cuando tu servidor es remoto, porque como te comente envía un comando SQL mas al servidor que puede hacerte pensar que esta lento, o igual pruebas como se comportan los tiempos.

Efectivamente no tiene control de numero de conexiones, pero si usas conexión y desconexión vas a poder tener infinidad de formularios abiertos, solo se van a conectar cuando consultes o realices algo en el servidor.

saludos

JoVeTri

unread,
Mar 17, 2020, 6:01:10 PM3/17/20
to Comunidad de Visual Foxpro en Español



MUCHAS GRACIAS.



Reply all
Reply to author
Forward
0 new messages