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 04-01-2012
Avatar de TiammatMX
TiammatMX TiammatMX is offline
Miembro
 
Registrado: jun 2006
Ubicación: Universo Curvo\Vía Láctea\Sistema Solar\Planeta Tierra\América\México\Puebla\Heróica Puebla de Zaragoza\Jardines de San Manuel\Home
Posts: 746
Poder: 18
TiammatMX Va camino a la fama
El resultado de un Stored Procedure y los tiempos de Delphi.

Buena tarde, jóvenes.

Tengo un pequeño detallín con el resultado de un Stored Procedure, el cual tiene un tiempo de procesamiento de más de 15 minutos, un mundo de tiempo que el venerable Delphi 6 que estoy usando para desarrollar la aplicación con un TADOQuery que recoge ése resultado no alcanza a procesar; al grado que inicia el procesamiento de ése SP y la aplicación Delphi "cierra" la conexión, tira el servicio y no muestra el resultado en un reporte, que es la finalidad de ésta aplicación.

¿Alguna idea que me permita ejecutar el Stored Procedure HASTA QUE TERMINE y arroje el resultado deseado al reporte?
__________________
Felipe Eduardo Ortiz López. Delphi programmers does it recursively...

"Un programador, es un creador de universos en donde sólo él es responsable. Universos de complejidad prácticamente ilimitada que se puede crear en forma de programas de ordenador." - Joseph Weizenbaum.

Témele a los profetas... y a aquellos que están listos para morir por "la verdad", ya que como regla general hacen morir a muchos otros con ellos, frecuentemente antes que ellos, y a veces en lugar de ellos. — Umberto Eco
Responder Con Cita
  #2  
Antiguo 04-01-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.052
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
jejeje... tenemos la bola de cristal averiada, a ver si los reyes magos nos trae una nueva

Mejor sería que nos dieras más datos, por ejemplo, la base de datos que usas, el código del store procedure, el código fuente delphi de cómo lo usas, la tabla o tablas que estás usando, datos adicionales que estimes oportuno para que podamos ayudarte.
Gracias.
Responder Con Cita
  #3  
Antiguo 05-01-2012
Avatar de TiammatMX
TiammatMX TiammatMX is offline
Miembro
 
Registrado: jun 2006
Ubicación: Universo Curvo\Vía Láctea\Sistema Solar\Planeta Tierra\América\México\Puebla\Heróica Puebla de Zaragoza\Jardines de San Manuel\Home
Posts: 746
Poder: 18
TiammatMX Va camino a la fama
Cita:
Empezado por Casimiro Notevi Ver Mensaje
jejeje... tenemos la bola de cristal averiada, a ver si los reyes magos nos trae una nueva ...
Cierto, perdón...

MS SQLServer 2008 R2, el código fuente del SP es ENORME, tanto que el editor de tópicos de ClubDelphi me lo acaba de rechazar.

Código Delphi del llamado:
Código Delphi [-]
 with Rprt.adoqryDtsRprt do
  begin
    Close;
    SQL.Clear; // 20111010 FEOL Se añade los nuevos parámetros.
    SQL.Add('SET DATEFORMAT DMY ' + #13 + #10 + DevuelveSP(IntToStr(iIdntfcdrRprt)) + ' ' +
      IntToStr(iIdntfcdrRprt) + ', ' + QuotedStr(DateToStr(dtetmepckrFchDsd.Date)) + ' , ' +
      QuotedStr(DateToStr(dtetmepckrFchHst.Date)) + ', ' + sDsgls + ', 0, 0,' + sPcntsEgrsds +
      ', 0, ' + sFechaPivote);
    wsNmbrArchv := SQL.Text;
    Open;
  end;

Si el Stored Procedure se corre por fuera de Delphi, tarda entre 25 y 35 minutos en arrojar resultados..., dentro de Delphi, simplemente nunca termina.
__________________
Felipe Eduardo Ortiz López. Delphi programmers does it recursively...

"Un programador, es un creador de universos en donde sólo él es responsable. Universos de complejidad prácticamente ilimitada que se puede crear en forma de programas de ordenador." - Joseph Weizenbaum.

Témele a los profetas... y a aquellos que están listos para morir por "la verdad", ya que como regla general hacen morir a muchos otros con ellos, frecuentemente antes que ellos, y a veces en lugar de ellos. — Umberto Eco

Última edición por ecfisa fecha: 05-01-2012 a las 21:05:17. Razón: Corregir problema de etiquetas con Interfaz Mejorada WYSIWYG
Responder Con Cita
  #4  
Antiguo 05-01-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.052
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Pues si no podemos mirar nada

Verifica que tienes índices en los campos involucrados, aunque lo que yo haría es usar el "divide y vencerás"
Empieza a "recortar" la sql y ve probando que vaya rápido, si va bien entonces añades algo más y pruebas... y así poco a poco hasta que llegues al "culpable".
Responder Con Cita
  #5  
Antiguo 05-01-2012
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.734
Poder: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
No veo el código. Deberás ponerlo entre[ delphi ] y [ /delphi ].

Parece que es:
Código Delphi [-]
with Rprt.adoqryDtsRprt do 
begin 
  Close; 
  SQL.Clear; 
  // 20111010 FEOL Se añade los nuevos parámetros. 
  SQL.Add('SET DATEFORMAT DMY ' + #13 + #10 + 
    DevuelveSP(IntToStr(iIdntfcdrRprt))+' '+ 
    IntToStr(iIdntfcdrRprt)+', '+ 
    QuotedStr(DateToStr(dtetmepckrFchDsd.Date))+', '+ 
    QuotedStr(DateToStr(dtetmepckrFchHst.Date))+', '+ 
    sDsgls+', 0, 0,'+
    sPcntsEgrsds+', 0, '+ 
    sFechaPivote); 
  wsNmbrArchv := SQL.Text; 
  Open; 
end;
  • Tu problema puede ser que la transacción tenga un tiempo de timeout "pequeño" para tu requerimiento. (Mira ADOQuery.CommandTimeOut)
  • También puede ser que otra transacción colisione con la del listado y genere un error.
  • Puede ser también que la cantidad de líneas que devuelve el procedimiento sean demasiadas. Prueba a poner el AdoQuery.CursorLocation = clUseServer.
Responder Con Cita
  #6  
Antiguo 05-01-2012
Avatar de TiammatMX
TiammatMX TiammatMX is offline
Miembro
 
Registrado: jun 2006
Ubicación: Universo Curvo\Vía Láctea\Sistema Solar\Planeta Tierra\América\México\Puebla\Heróica Puebla de Zaragoza\Jardines de San Manuel\Home
Posts: 746
Poder: 18
TiammatMX Va camino a la fama
Cita:
Empezado por duilioisola Ver Mensaje
  • Tu problema puede ser que la transacción tenga un tiempo de timeout "pequeño" para tu requerimiento. (Mira ADOQuery.CommandTimeOut)
TimeOut a 0, o sea, a infinito. Por ese lado, descartamos el problema.

Cita:
Empezado por duilioisola Ver Mensaje
  • También puede ser que otra transacción colisione con la del listado y genere un error.
No uso transacciones, son SP's que sólo producen datos.

Cita:
Empezado por duilioisola Ver Mensaje
  • Puede ser también que la cantidad de líneas que devuelve el procedimiento sean demasiadas. Prueba a poner el AdoQuery.CursorLocation = clUseServer.
Devuelve solamente 88 filas, el más largo de ellos.
__________________
Felipe Eduardo Ortiz López. Delphi programmers does it recursively...

"Un programador, es un creador de universos en donde sólo él es responsable. Universos de complejidad prácticamente ilimitada que se puede crear en forma de programas de ordenador." - Joseph Weizenbaum.

Témele a los profetas... y a aquellos que están listos para morir por "la verdad", ya que como regla general hacen morir a muchos otros con ellos, frecuentemente antes que ellos, y a veces en lugar de ellos. — Umberto Eco
Responder Con Cita
  #7  
Antiguo 05-01-2012
Avatar de Chris
[Chris] Chris is offline
Miembro Premium
 
Registrado: abr 2007
Ubicación: Jinotepe, Nicaragua
Posts: 1.678
Poder: 19
Chris Va por buen camino
Estimado Colega, sin ánimo de ofender, sinceramente pienso que un Stored Procedure que dure casi media hora es inaceptable. A cómo ha comentado Casimiro arriba, es mejor que busques como optimizar el tiempo de respuesta de ése procedimiento. Tienes que hacer un análisis exhaustivo de él y ver que índices son necesarios para mejorar su rendiemiento y además debes fijarte que las clausulas SQL sean las óptimas.

Saludos,
Chris
__________________
Perfil Github - @chrramirez - Delphi Blog - Blog Web
Responder Con Cita
  #8  
Antiguo 05-01-2012
Avatar de TiammatMX
TiammatMX TiammatMX is offline
Miembro
 
Registrado: jun 2006
Ubicación: Universo Curvo\Vía Láctea\Sistema Solar\Planeta Tierra\América\México\Puebla\Heróica Puebla de Zaragoza\Jardines de San Manuel\Home
Posts: 746
Poder: 18
TiammatMX Va camino a la fama
Cita:
Empezado por Chris Ver Mensaje
Estimado Colega, sin ánimo de ofender, sinceramente pienso que un Stored Procedure que dure casi media hora es inaceptable...
Chris
Aquí entramos en el terreno del "debería", situación que no es muy agradable. DEBERÍA tardar menos tiempo en ejecutarse, pero por la cantidad de información que procesa (datos de todo el año referentes a estadísticas médicas) ésto no es posible, DEBERÍA ser optimizado, pero el DBA que lo creó ha realizado TODAS las modificaciones técnicas que han sido posibles (y algunas imposibles) y no se ha logrado bajar un segundo el tiempo de respuesta. "Inaceptable" me parece un concepto muy duro.

Cita:
Empezado por Chris Ver Mensaje
...A cómo ha comentado Casimiro arriba, es mejor que busques como optimizar el tiempo de respuesta de ése procedimiento. Tienes que hacer un análisis exhaustivo de él y ver que índices son necesarios para mejorar su rendiemiento y además debes fijarte que las clausulas SQL sean las óptimas...
Créeme que el equipo de trabajo del cual soy parte ha buscado una solución a éste problema en particular, especialmente por que corresponde al desarrollo de nuestro cliente principal..., pero en éste momento no hemos encontrado una solución viable, excepto tal vez montar una Cray2 como servidor de datos...
__________________
Felipe Eduardo Ortiz López. Delphi programmers does it recursively...

"Un programador, es un creador de universos en donde sólo él es responsable. Universos de complejidad prácticamente ilimitada que se puede crear en forma de programas de ordenador." - Joseph Weizenbaum.

Témele a los profetas... y a aquellos que están listos para morir por "la verdad", ya que como regla general hacen morir a muchos otros con ellos, frecuentemente antes que ellos, y a veces en lugar de ellos. — Umberto Eco
Responder Con Cita
  #9  
Antiguo 05-01-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.052
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Si das por hecho que se han realizado todas las pruebas posibles, y se han tomado todas las medidas necesarias, y TODOS los métodos posibles para mejorarlos... y das por hecho de que no se puede hacer nada más... ¿entonces por qué preguntas?
Creo que hay que ser más humilde, TODOS tenemos mucho que aprender.
Hay muchísimas cosas que se pueden hacer, suponiendo que sea imposible mejorar más el store procedure y la base de datos, por ejemplo: ¿qué sistema operativo usa el servidor?.
Responder Con Cita
  #10  
Antiguo 05-01-2012
Avatar de Chris
[Chris] Chris is offline
Miembro Premium
 
Registrado: abr 2007
Ubicación: Jinotepe, Nicaragua
Posts: 1.678
Poder: 19
Chris Va por buen camino
Cita:
Empezado por Casimiro Notevi Ver Mensaje
por ejemplo: ¿qué sistema operativo usa el servidor?.
Debe ser un Windows ...

Ya en serio, es Windows! El compañero está utilizan SQL Server según me pareció leer.

Saludos!
__________________
Perfil Github - @chrramirez - Delphi Blog - Blog Web
Responder Con Cita
  #11  
Antiguo 05-01-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.052
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Pues entonces "ajo y agua" .
No puedes usar un Cray porque windows no funciona ahí.
Si usaras firebird, postgresql, etc. entonces sí puedes instalar un servidor con linux, ya sea uno pequeñito, como en uno de los más potentes mainframes que existen.
Responder Con Cita
  #12  
Antiguo 05-01-2012
Avatar de TiammatMX
TiammatMX TiammatMX is offline
Miembro
 
Registrado: jun 2006
Ubicación: Universo Curvo\Vía Láctea\Sistema Solar\Planeta Tierra\América\México\Puebla\Heróica Puebla de Zaragoza\Jardines de San Manuel\Home
Posts: 746
Poder: 18
TiammatMX Va camino a la fama
Cita:
Empezado por Casimiro Notevi Ver Mensaje
...por ejemplo: ¿qué sistema operativo usa el servidor?.
Windows Server 2003...

jejejeje Y lo del Cray2 era broma..., así de desesperados estamos...
__________________
Felipe Eduardo Ortiz López. Delphi programmers does it recursively...

"Un programador, es un creador de universos en donde sólo él es responsable. Universos de complejidad prácticamente ilimitada que se puede crear en forma de programas de ordenador." - Joseph Weizenbaum.

Témele a los profetas... y a aquellos que están listos para morir por "la verdad", ya que como regla general hacen morir a muchos otros con ellos, frecuentemente antes que ellos, y a veces en lugar de ellos. — Umberto Eco
Responder Con Cita
  #13  
Antiguo 05-01-2012
Avatar de Chris
[Chris] Chris is offline
Miembro Premium
 
Registrado: abr 2007
Ubicación: Jinotepe, Nicaragua
Posts: 1.678
Poder: 19
Chris Va por buen camino
Cita:
Empezado por tiammat Ver Mensaje
Aquí entramos en el terreno del "debería", situación que no es muy agradable. DEBERÍA tardar menos tiempo en ejecutarse, pero por la cantidad de información que procesa (datos de todo el año referentes a estadísticas médicas) ésto no es posible, DEBERÍA ser optimizado, pero el DBA que lo creó ha realizado TODAS las modificaciones técnicas que han sido posibles (y algunas imposibles) y no se ha logrado bajar un segundo el tiempo de respuesta. "Inaceptable" me parece un concepto muy duro.
Fíjate que en términos de optimización:
Código SQL [-]
select * from tabla where cast(campo_entero as string) = '00004'
No es lo mismo que
Código SQL [-]
select id, cliente_nombre from tabla where cast(campo_entero as string) = '00004'
Ni tampoco
Código SQL [-]
select id, cliente_nombre from tabla where campo_entero = 4

No estoy diciendo que tu SP haga este tipo de desperdicio de recursos, sino que hay ciertos comandos SQL que con solo delimitar los campos se optienen incrementos cosiderables. Además, por experiencia propia he visto que la sintaxis influye en ciertos casos. Recuerdo una vez que obtuve un decremento en el tiempo de espera de alrededor de 5,000% optimizando el SQL y agregando algunos índices y quitando algunos no necesarios.

Saludos,
Chris
__________________
Perfil Github - @chrramirez - Delphi Blog - Blog Web
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
crear Stored Procedure desde delphi Milperrimo Firebird e Interbase 4 03-02-2008 18:52:53
stored procedure con mysql y delphi 7 didier Internet 2 13-10-2006 03:36:38
Ver los Stored Procedure tgsistemas SQL 0 06-04-2004 17:18:22
Stored Procedure tgsistemas SQL 1 27-02-2004 13:10:33
Ver resultado de un Stored Procedure desde Delphi ElCherchu Conexión con bases de datos 6 10-06-2003 09:51:55


La franja horaria es GMT +2. Ahora son las 14:03:07.


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