FTP | CCD | Buscar | Trucos | Trabajo | Foros |
#1
|
|||
|
|||
Conexión lenta
Buenas a todos,
He estado creando una aplicacion datasnap desde mi pc la coneccion a base de datos es rapida. Pero al llevarla a un servidor con windows server tarda uno 3 segundos en realizar la coneccion. Por la naturaleza de la aplicacion el metodo empleado es Conectar a Bd -> Ejecutar Select, Insert, etc -> Desconectar de BD. Tengo entendido que la primera vez que se conecta si dura esto tres segundo en establecer vinculo con la base de datos, pero las demas conecciones deberian ser rapida. Si comparo con una aplicacion .Net es asi, la primera coneccion es lenta pero luego las demas conecciones son rapida. Lo currioso es que en mi pc de desarrollo funciona correcto, este metodo es agil, en otra pc de otro desarrollador funciona correcto, pero en otros pc cada peticion tarda sus 3 segundos en conectar a base de datos. Ya hemos utilizado los componentes FireDac y Ado y el problema continua. La Base de Datos es SQL Server y ya se instalo el SQLClient en la pc, pero continua la lentitud. Agradeceria cualquier ayuda que me puedan brindar.... |
#2
|
||||
|
||||
Si el problema es que tarda en establecerse la conexion entre el componente (ADO, FireDAC, etc) proba manteniendo viva la conexion; es decir, te llega un metodo a tu server datasnap, si no estas conectado a la DB, conectas, despues ejecutas SQL. Al finalizar, no desconectes de la DB, dejala abierta la conexion
Como tenes configurada la propiedad LifeCyle? En desarrollo funciona ok.. conectan a una BD local? En produccion instalaron SQL Server, montaron una BD, y el server datasnap se conecta a esa BD? Es decir, es igual a produccion o estan conectando a una BD en "otro lado"? Saludos |
#3
|
||||
|
||||
Igual me equivoco pero no creo que conectarte a la base de datos en cada vez sea lo más rápido.
¿No puedes conectarte a la base de datos al abrir el programa y desconectarte cuando lo cierras?. Saludos
__________________
Be water my friend. |
#4
|
|||
|
|||
Gracias por Responder AgustinOrtu
La aplicacion debe funcionar como un RestFull, en un principio sera consumida por una aplicacion web no hecha en delphi, en un futuro tambien habra aplicaciones moviles consumiendo el servicio, se prevee un gran numero de usuarios haciendo peticiones simultanea al servicio rest, el problema de tener una coneccion siempre viva en este tipo de aplicacion es la posible concurrencia que se pueda dar, ademas, imaginate que la coneccion este ejecutando un proceso largo y luego otro usuario hace una peticion sencilla y de buena a primera nota que el sistema se puso lento, eso es lo que se intenta evitar con el metodo de abrir y cerrar coneccion tal como se hace con PHP, en .Net y en Java. El lifeCycle esta como viene por Defecto, no lo he tocado Veras, en producion tenemos funciona todo OK, y la base de datos es la misma a la que se conecta en producion, digo producion, pero en realidad es un servidor de prueba en donde los desarrolladores hacemos prueba. Lo currioso es que en el dia de ayer se monto pero en un puerto aparte y aparrentemente esta funcionando bien, tengo que esperar al proximo lunes a seguir probando, Estamos Pensando que puede ser Alguna Plitica de seguridad que este Interfiriendo... |
#5
|
|||
|
|||
Gracias newtron por tu respuesta
Al tratarse de una aplicacion Rest, donde cientos y hasta miles de usuarios estaran haciendo peticiones simultaneas, el tener una unica coneccion siempre viva causara un posible bajo rendimiento de la aplicacion ademas de evitar posible concurrencia. Abrir -> Ejecutar ->Cerrar Coneccion Es el metodo que usan en PHP, en .Net, en Java. No se si sea el mismo caso en Delphi pero en esto Lenguaje la primera vez que se hace la coneccion si tarda unos 2 y tres segundo pero luego estos aunque esten deconectado las proximas invocaciones a conectar a base de datos es sumamente rapido si la base de datos esta en el mismo servidor dura menos de un segundo. Para un poco mas de aclaracion googlea DataSnap, DBExpress y Threads |
#6
|
||||
|
||||
Leyendo la documentacion de LifeCycle
No habias aclarado que se trataba de un servidor Rest. En ese caso, tal y como dice la documentacion, tenes la propiedad en Invocation Cita:
|
#7
|
|||
|
|||
Gracias a todos,
Ya he probado con FIRE DAC, CON ADO Y Ahora con DBExpress buscando una solucion, durante la ultima prueba he podido notar que las consultas a Base de datos funcionan bien tardan entre 0 y 1 segundo por lo regular, para esto cree un log en la base de datos donde registro el inicio y el fin de cada llamada. Tambien agregue dos fechas al Server modulo en el Create fechaInicio := Now en el destroy fechaFin := Now; esto lo registro en un archivo log y por igual la repuesta es entre 0 y 1 segundo, pero para mostrar el resultado(JSON) veo que esta tomando 1 y a veces hasta dos segundo mas si sumo el segundo que duraria en consultar en Base de datos con estos dos segundo en mostrar el resultado(JSON) es donde estoy teniendo los dos y tre segundo que demora la aplicacion cliente en invocar al DataSnap. Lo currioso es que en mi pc de desarrollo ese tiempo en mostrar el json ni se siente. Sera que no estoy incluyendo alguna libreria de DataSNap dentro del ejecutable que coloco en el servidor Windows Server? Sera esto algun problema con la version Delphi 10 Seattle? |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Conexion Con Interbase/FireBIrd lenta...muy lenta | federiconqn21 | Firebird e Interbase | 3 | 11-03-2010 14:13:34 |
Conexion lenta en Interbase 6.0 | AgustinL | Firebird e Interbase | 3 | 26-12-2005 16:34:06 |
Conexion lenta | auribe | Conexión con bases de datos | 0 | 19-04-2005 19:04:37 |
Conexion mas lenta | hecjona | Varios | 0 | 22-12-2003 22:04:21 |
Conexion Lenta en red | muli | Firebird e Interbase | 6 | 25-10-2003 01:17:11 |
|