Como mejorar la conexion remota a base de datos mariadb con foxydb y otra consulta..

251 views
Skip to first unread message

alvarocastellar

unread,
Sep 13, 2017, 3:40:24 PM9/13/17
to Comunidad de Visual Foxpro en Español
Buenas tardes amigos, sigo con mi exploracion en el mundo de mariadb con foxydb  creo que ha sido una decision acertada e invito a los que piensen en migrar de base de datos que lo hagan sin temor.
Las inquietudes que tengo son las siguientes: mis tablas mas grandes tienen en tamaño 49 MB y 32 MB en registros son : 116.000 y  53.000 aproximadamente cuando ejecuto el programa conectado a la base de datos local  un  select de estas tablas con join a 3 tablas mas el tiempo de respuesta es muy rapido no toma mas de 1.2 segundos; sin embargo cuando lo conecto a la misma base  pero de forma remota me esta demorando demasiado la sentencia( no es que demore un 3 minmutos pero creo que deberia trabajar mas rapido),  alguien me puede dar algunos tips para mejorar esto??, le tengo indices creados a las tablas relacionadas con join, casi siempre  los ID son de tipo numerico y cuando hago busqueda entre campos de tipo fecha lo mando con Dtos. Se puede configurar algo en mariaDb o en la sentencia paara mejorar esta velocidad.
Lo otro es que estuve indagando y veo que las tablas de  Mariadb tiene aparte del motor InnoDB otros que se pueden seleccionar y recomiendan el motor Aria, eso es cierto?? en que influiria el cambio de motor.


Gracias  por toda la ayuda

Alvaro castellar

Carlos Vargas

unread,
Sep 13, 2017, 4:58:02 PM9/13/17
to Comunidad de Visual Foxpro en Español
Usualmente cuantas filas recupera esa consulta, que remotamente toma su tiempo?

alvarocastellar

unread,
Sep 13, 2017, 5:05:29 PM9/13/17
to Comunidad de Visual Foxpro en Español
el numero varia segun el id que le envie. a veces trae uno, dos o hasta 40 registros , pero  lo que noto es que si esa misma sentencia la ejecuto en el motor de HeidiSql en la base de datos remota  no me toma mas de 1.5 segundos mientras que si lo ejecuto dentro del programa invocando la sentencia desde foxydb el tiempo es de entre 15 y 30 segundos y veces mas. alguna idea de porque puede ser esta variacion tan grande en el tiempo de respuesta

ZeRoberto

unread,
Sep 13, 2017, 5:15:31 PM9/13/17
to publicesvfoxpro
Prueba haciendo esto desde un prg

lnHandle = SQLStringConnect("driver={MySQL ODBC 5.1 Driver}; server=localhost; port=3306; user=root; password=123456; database=MiBaseDatos; option=16384;")
If lnHandle > 0
   lnQuery = SQLExec(lnHandle, "SELECT * FROM Productos", "dbTable")
   If lnQuery > 0
      Browse
   EndIf
   SQLDisconnect(lnHandle)
Endif

alvarocastellar

unread,
Sep 13, 2017, 5:15:40 PM9/13/17
to Comunidad de Visual Foxpro en Español

Adjunto imagen con varias pruebas realizadas diferentes tablas en mi base de datos de forma remota y su tiempo de respuesta en el servidor Heidisql, este tiempo es muy inferior al que me toma cuando lo ejecuto ya en mi programa.  Si consiguiera que la respuesta fuera algo cercana a esto.... estaria en el paraiso!!!!
respuesta.png

Antonio Meza

unread,
Sep 13, 2017, 5:57:39 PM9/13/17
to Comunidad de Visual Foxpro en Español
Recuerda que VFP usa ODBC para conectarse al servidor MariaDb, HeidiSql desconozco que use para conectarse y si no usa odbc puede usar nativo que puede ser mas rápido.

Pero enviar y devolver una consulta de 40 registros y que tarde mas de 1 minuto algo anda mal, en cuanto a FoxyDb es simplemente SqlExec encapsulado por lo que debería ser lo mismo que ejecutarlo directamente.

Lo que si te puede estar afectando es la forma en que tienes configurado FoxyDb, si usas conexión permanente, conexión y desconexión, esto si puede afectar el rendimiento, como lo estas usando?

saludos
Antonio Meza

alvarocastellar

unread,
Sep 13, 2017, 6:02:57 PM9/13/17
to Comunidad de Visual Foxpro en Español
Hola antonio gracias por contestar, en realidad yo lo que uso para conectarme es la funcion test y permanezco con esa conexion abierta mientras estoy dentro del programa.
Que me recomiendas  cual es la mejor forma de conexion y de paso si tienes algun ejemplo mucho mejor amigo.

alvarocastellar

unread,
Sep 13, 2017, 6:04:53 PM9/13/17
to Comunidad de Visual Foxpro en Español
Antonio algo mas que me gustaria saber, foxydb chequea si esta conectado al servidor?? o lo debo hacer yo manualmente, voe que hay algunas funciones para eso pero quiero saber si ya esta automatizado


El miércoles, 13 de septiembre de 2017, 16:57:39 (UTC-5), Antonio Meza escribió:

Daniel Sánchez

unread,
Sep 14, 2017, 2:55:38 AM9/14/17
to Comunidad de Visual Foxpro en Español
También te recomiendo lo que dice zroberto, de hacer la consulta directa, así ves como responde vfp nativamente.

Saludos

El 13 sep. 2017 4:15 PM, "ZeRoberto" <zero...@gmail.com> escribió:
Prueba haciendo esto desde un prg

lnHandle = SQLStringConnect("driver={MySQL ODBC 5.1 Driver}; server=localhost; port=3306; user=root; password=123456; database=MiBaseDatos; option=16384;")
If lnHandle > 0
   lnQuery = SQLExec(lnHandle, "SELECT * FROM Productos", "dbTable")
   If lnQuery > 0
      Browse
   EndIf
   SQLDisconnect(lnHandle)
Endif

Antonio Meza

unread,
Sep 14, 2017, 10:29:48 AM9/14/17
to Comunidad de Visual Foxpro en Español
Están propiedades

handle_Reconnection = false && Si se intenta reconectar al servidor
handle_Network = true && Si mantiene permanente la conexión
handle_Verify = false && Si Verifica el estado de la conexión al servidor

Por default usa conexión permanente pero no verifica si esta conectado, si activas handle_Verify entonces cada vez que envíes una consulta o comando Sql verifica pero no se conecta o reconecta tienes que indicarlo también con handle_Reconnection

En mi caso siempre uso así:

handle_Reconnection = True && Si se intenta reconectar al servidor
handle_Network = false && Si mantiene permanente la conexión
handle_Verify = false && Si Verifica el estado de la conexión al servidor

Por lo que se conecta hace lo que necesito y se desconecta en automático.

saludos
Antonio Meza
Reply all
Reply to author
Forward
0 new messages