Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > MS SQL Server
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 14-11-2015
ELANDETA ELANDETA is offline
Registrado
NULL
 
Registrado: dic 2013
Posts: 8
Poder: 0
ELANDETA Va por buen camino
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....
Responder Con Cita
  #2  
Antiguo 14-11-2015
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 16
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
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
Responder Con Cita
  #3  
Antiguo 15-11-2015
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.591
Poder: 21
newtron Va camino a la fama
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.
Responder Con Cita
  #4  
Antiguo 15-11-2015
ELANDETA ELANDETA is offline
Registrado
NULL
 
Registrado: dic 2013
Posts: 8
Poder: 0
ELANDETA Va por buen camino
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...
Responder Con Cita
  #5  
Antiguo 15-11-2015
ELANDETA ELANDETA is offline
Registrado
NULL
 
Registrado: dic 2013
Posts: 8
Poder: 0
ELANDETA Va por buen camino
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
Responder Con Cita
  #6  
Antiguo 15-11-2015
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 16
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
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:
Invocation: a new instance is created for each invocation from a client (stateless).
Entonces, cada llamada a un metodo del server va a crear su propio contexo, asi que siempre estarias estableciendo una nueva conexion
Responder Con Cita
  #7  
Antiguo 30-11-2015
ELANDETA ELANDETA is offline
Registrado
NULL
 
Registrado: dic 2013
Posts: 8
Poder: 0
ELANDETA Va por buen camino
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?
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

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


La franja horaria es GMT +2. Ahora son las 00:45:21.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi