Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #21  
Antiguo 26-11-2012
ARPE1 ARPE1 is offline
Miembro
 
Registrado: nov 2012
Posts: 43
Poder: 0
ARPE1 Va por buen camino
Hola Casimiro
Cita:
Empezado por Casimiro Notevi Ver Mensaje
En los ¿13? años de existencia de firebird (y antes con su antecesor interbase, 3 años más) jamás he necesitado tocar ningún parámetro de la configuración.
Ni yo trampoco, excepto la afinidad de Interbase (de lo blanco a lo negro), hasta que me topé con esta BD que he necesitado probar y tocar de todo.

un saludo.
Responder Con Cita
  #22  
Antiguo 26-11-2012
lbuelvas lbuelvas is offline
Miembro
 
Registrado: may 2003
Ubicación: Colombia
Posts: 377
Poder: 22
lbuelvas Va por buen camino
Compartenos los metadatos de las tablas importantes de tu base de datos para entender un poco mas la situacion. De acuerdo con Casimiro que tampoco he necesitado en mas o menos los mismos años modificar la configuracón por defecto del motor de base de datos Firebird, el aumento de cache lo que permite es que parte de la base de datos queda en la memoria RAM aumentando la velocidad en la manipulacion y consulta de datos y su uso es para casos muy especiales, tal vez el tuyo.
__________________
Luis Fernando Buelvas T.
Responder Con Cita
  #23  
Antiguo 26-11-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is online now
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.043
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por ARPE1 Ver Mensaje
hasta que me topé con esta BD
A lo mejor no es la BD ¿lo has probado en un servidor linux normal y corriente?
Responder Con Cita
  #24  
Antiguo 26-11-2012
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.911
Poder: 25
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
Cita:
Empezado por ARPE1 Ver Mensaje
Hola y gracias por el interés.
La BD ya tiene extensión FDB. El producto cartesiano puro y duro, en este caso, es obligado.
Siempre hay mas de 1 manera de resolver un problema. Si nos cuentas cual es el problema, pones ejemplos con datos, quizas te podamos dar una luz.

El porque la 1era vez es lento y luego rapido me parece obvio. Al principio la tabla de destino esta "vacia", luega la llenas, luego al repetir ya esta llena y solo copia los registros faltantes. El filtro de la consulta hace todo rapido.

Lo que no entiendo, es porque hay que preocuparse al siguiente dia por esto. Siempre la tabla de destino esta "vacia" al arrancar???
__________________
El malabarista.
Responder Con Cita
  #25  
Antiguo 27-11-2012
ARPE1 ARPE1 is offline
Miembro
 
Registrado: nov 2012
Posts: 43
Poder: 0
ARPE1 Va por buen camino
Hola
Cita:
Empezado por mamcx Ver Mensaje
Lo que no entiendo, es porque hay que preocuparse al siguiente dia por esto. Siempre la tabla de destino esta "vacia" al arrancar???
Ahí está el misterio, nunca la tabla Artal (Artículo-Almacén) está vacía. Como mucho, y como ya os comenté, se pueden dar de alta 1 ó 2 registros. Más misterio todavía es que recién arrancado el equipo si hago un Backup/restore la consulta se resuelve en un abrir y cerrar de ojos.
Tuve un profe en EGB que nunca ponía un 10, decía que siempre hay más caminos y que seguro que hay otro mejor. El producto cartesiano que tanto nos preocupa no es el problema, ese producto, incluso sin condiciones que filtren las tablas, lo resuelve en milisegundos (con fetch all).
Por cierto lo probé en un FB2.5.2 64bits en modo superClassic y... lo mismo.
Sigo con que es problema de caché, ¿de Windows?, . Casimiro, estoy contigo, posiblemente en un Linux "pelao" la cosa cambie, de hecho lo probaré por curiosidad.

Un saludo y no me harto de agradeceros vuestro interés, muchas gracias
Responder Con Cita
  #26  
Antiguo 27-11-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is online now
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.043
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por ARPE1 Ver Mensaje
... recién arrancado el equipo si hago un Backup/restore la consulta se resuelve en un abrir y cerrar de ojos.
¿Y si no está recien arrancado el equipo, si haces un backup/restore también va rápido la primera vez?
Responder Con Cita
  #27  
Antiguo 27-11-2012
ARPE1 ARPE1 is offline
Miembro
 
Registrado: nov 2012
Posts: 43
Poder: 0
ARPE1 Va por buen camino
Hola, así es, en el momento que hago un backup/restore o ejecuto una vez la consulta va como la seda.
Mi última prueba va a ser con un OpenSUSE y salga lo que salga ahí terminaré. Os cuento resultados.
un saludo.
Responder Con Cita
  #28  
Antiguo 27-11-2012
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.911
Poder: 25
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
Podrias darnos el plan de ejecucion? Cuando mencionas que el producto cartesiano se resuelve rapido, has identificado EXACTAMENTE en que paso esta la demora? El comando EXPLAIN podria dar una luz...

Lo ultimo que se me ocurre es eliminar los indices y triggers antes de la insercion y reagregarlos al final. Tambien, meter los datos en una tabla temporal y de alli traspasarlos.

Pero quizas debes analizar esta presentacion sobre desempeño:

http://www.slideshare.net/ibsurgeon/...mance-problems
__________________
El malabarista.
Responder Con Cita
  #29  
Antiguo 27-11-2012
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 30
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Cita:
Empezado por mamcx Ver Mensaje
Lo ultimo que se me ocurre es eliminar los indices y triggers antes de la insercion y reagregarlos al final.
En el caso de los disparadores, no es necesario llegar a tanto, ya que pueden simplemente ser desactivados y activados nuevamente, sin necesidad de borrarlos.

Creo que este tema me va a ser de lo más valioso, ya que tengo una aplicación que presenta una situación muy parecida a la de ARPE1. En mi caso es Windows XP + Firebird 1.5 + Delphi 7 + DBX con el controlador de InterBase (que hasta esa versión de Firebird sí es compatible, según entiendo). El archivo .fdb ocupa unos 535 MB, hago uso adecuado de los índices y pasa lo mismo: con ciertas y muy particulares consultas, la primera vez que las realizo se demora un par de minutos, mientras que haciéndola de nuevo resultan instantáneas. Esto pasa incluso habiendo ya hecho otras consultas y actualizaciones en la base de datos (la conexión puede tener ya varias horas de vida y uso antes de hacer esa primera consulta extrañamente lentificada, o puede ser en cuanto se abre dicha conexión).

El problema no ocurre si hago lo mismo desde IBExpert (ahí siempre es rápido) o bien en red. Es decir, sólo pasa cuando ejecuto la aplicación conectándome a la base de datos localmente (misma PC para cliente y servidor). Con IBExpert, ya sea remoto o local, anda rapidísima la consulta.

Ya comprobé que la demora no ocurre en el código Delphi. Sino en la llamada que finalmente hace este código a Firebird. ¿Debería pensar en cambiar el controlador DBX InterBase?

Extraños saludos.
Responder Con Cita
  #30  
Antiguo 27-11-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is online now
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.043
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por Al González Ver Mensaje
En el caso de los disparadores, no es necesario llegar a tanto, ya que pueden simplemente ser desactivados y activados nuevamente, sin necesidad de borrarlos.
Los índices también pueden ser desactivados, aunque si son clave primaria no recuerdo si es posible en ese caso.

Cita:
Empezado por Al González Ver Mensaje
Ya comprobé que la demora no ocurre en el código Delphi. Sino en la llamada que finalmente hace este código a Firebird. ¿Debería pensar en cambiar el controlador DBX InterBase?
Pues no recuerdo si ARPE1 ha mencionado el controlador que usa, vaya a ser algo de eso.
Responder Con Cita
  #31  
Antiguo 28-11-2012
ARPE1 ARPE1 is offline
Miembro
 
Registrado: nov 2012
Posts: 43
Poder: 0
ARPE1 Va por buen camino
Hola
Cita:
Empezado por mamcx Ver Mensaje
Podrias darnos el plan de ejecucion? Cuando mencionas que el producto cartesiano se resuelve rapido, has identificado EXACTAMENTE en que paso esta la demora? El comando EXPLAIN podria dar una luz...
Así es, el producto se resuelve en milisegundos, la demora está en la comparación de registros con la tabla grande (ARTAL), de todas formas ahí pego el plan
Código SQL

Código SQL [-]
Select artic.artic, almac.cod CON> from artic, almac CON> where artic.activo = 'S' and artic.filtro = 'MP' and CON>   not exists (Select artal.artic CON>   from artal CON>   where artal.artic = artic.artic and artal.almac = almac.c  PLAN (ARTAL INDEX (PK_ARTAL)) PLAN JOIN (ALMAC NATURAL, ARTIC INDEX (ARTIC_IDX3, ARTIC_IDX4))

Aunque veamos ALMAC NATURAL , no preocupa sólo tiene 40 registros y los lee una vez (analizado con IBExpert).

Cita:
Empezado por mamcx Ver Mensaje
Lo ultimo que se me ocurre es eliminar los indices y triggers antes de la insercion y reagregarlos al final. Tambien, meter los datos en una tabla temporal y de alli traspasarlos.
La tabla ARTAL es una tabla final, es decir, no tiene triggers, sólo recibe datos de triggers de otras tablas para después consultarlos. Y los índices sólo tiene el que necesita esta consulta (PK_ARTAL = ARTIC+ALMAC), lo sé, lo sé, un índice compuesto de datos alfanuméricos pero es lo que hay. De todas formas ya dije que como mucho se dan de alta 1 ó 2 registros, no pierde tiempo, por tanto, en actualizar los índices. Es más, tengo una copia de la BD del cliente y llevo semanas sin dar de alta registros y me pasa lo mismo.

Cita:
Empezado por mamcx Ver Mensaje
Pero quizas debes analizar esta presentacion sobre desempeño:

http://www.slideshare.net/ibsurgeon/...mance-problems
Precisamnete en este documento me basé para modificar el firebird.conf, la reestructuración de discos y particiones, etc... Por cierto ya que tengo posibilidad voy a probarlo en un SSD, todo lo que vaya saliendo os lo cuento.

un saludo y gracias.

Última edición por mamcx fecha: 28-11-2012 a las 16:44:22.
Responder Con Cita
  #32  
Antiguo 28-11-2012
ARPE1 ARPE1 is offline
Miembro
 
Registrado: nov 2012
Posts: 43
Poder: 0
ARPE1 Va por buen camino
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Pues no recuerdo si ARPE1 ha mencionado el controlador que usa, vaya a ser algo de eso.
Tienes buena memoria, pues no lo he dicho. Uso IBO, de todas formas las pruebas las estoy haciendo con IBExpert y me da que también usan IBO pero esto último no lo sé.

Un saludo.
Responder Con Cita
  #33  
Antiguo 28-11-2012
ARPE1 ARPE1 is offline
Miembro
 
Registrado: nov 2012
Posts: 43
Poder: 0
ARPE1 Va por buen camino
Hola de nuevo, más resultados.
iSQL de firebird (por evitar herramientas de terceros):
1. 1ª vez esos 6 minutos
2. siguientes >>> 3 segundos

FDB copiada, tal cual, sobre un SSD.
1. 1ª vez ¡¡¡¡¡ 17 segundos !!!!!
2. siguientes >>> 3 segundos
Es curioso, los archivos temporales de FB los tengo redirigidos sobre un mecánico (TempDirectories = G:\FBTemp). Lo único que he hecho ha sido mover el FDB a un SSD. De aquí casi se puede sacar que la caché ¿la guarda en el mismo FBD?. Una pasada el rendimiento, creo que es una buena inversión para los clientes, aunque sea uno pequeño para almacenar sólo el FDB.

Y otras cosillas, al tocar lso tamaños de página se reduce algo el tiempo (a más tamaño menos tiempo, al menos en esta consulta). Tampoco para tirar cohetes.

Un saludo y os seguiré contando

PD. Creo que a estas alturas deberíamos olvidarnos de la consulta SQL y tratar temas de caché, memoria, firebird.conf... es decir de las configuraciones de los sistemas. Voy por SUSE a ver qué me cuenta.
Responder Con Cita
  #34  
Antiguo 28-11-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is online now
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.043
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
IBO es buenecito, aunque IBX y FIBplus son algo más rápidos.
Alguna vez leí o escuché que ibexpert usa, o usaba, IBO.

Un par de cosas, ese disco G: es una partición del mismo o es otro disco físico. Debería ser otro disco para mejorar. Si es una partición del mismo entonces estamos en las mismas, no sirve de mucho, más bien de nada.

Otra cosa, por probar que no quede, mira de cambiar not exists por not in
Responder Con Cita
  #35  
Antiguo 28-11-2012
ARPE1 ARPE1 is offline
Miembro
 
Registrado: nov 2012
Posts: 43
Poder: 0
ARPE1 Va por buen camino
Hola
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Un par de cosas, ese disco G: es una partición del mismo o es otro disco físico. Debería ser otro disco para mejorar. Si es una partición del mismo entonces estamos en las mismas, no sirve de mucho, más bien de nada.
Es otro disco físico. Lo único que la memoria virtual de Windows (swap) la tengo en el mismo.

Cita:
Empezado por Casimiro Notevi Ver Mensaje
Otra cosa, por probar que no quede, mira de cambiar not exists por not in
La que dices que por probar que no quede, aunque en todas las ocasiones que me he tropezado con esta situación tiene mayor rendimiento un "exists" que un "in", ya que en el "exists" se puede filtrar.

un saludo
Responder Con Cita
  #36  
Antiguo 28-11-2012
ARPE1 ARPE1 is offline
Miembro
 
Registrado: nov 2012
Posts: 43
Poder: 0
ARPE1 Va por buen camino
Hola
Cita:
Empezado por ARPE1 Ver Mensaje
La que dices que por probar que no quede, aunque en todas las ocasiones que me he tropezado con esta situación tiene mayor rendimiento un "exists" que un "in", ya que en el "exists" se puede filtrar.
Probado y cuando llevaba 50 minutos sin resolver lo he cancelado, y eso que era ya de segundas, es decir, los 3 segundos del otro modo de consulta.
Un saludo.
Responder Con Cita
  #37  
Antiguo 28-11-2012
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.911
Poder: 25
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
Cita:
Empezado por ARPE1 Ver Mensaje
Código SQL [-]
JOIN (ALMAC NATURAL, ARTIC INDEX (ARTIC_IDX3, ARTIC_IDX4))

Aunque veamos ALMAC NATURAL , no preocupa sólo tiene 40 registros y los lee una vez (analizado con IBExpert).
Ese no es el mismo query del principio -pero pasa igual?-, y no estan los tiempos. Sin embargo si es un producto cartesiano no importa que ALMAC sea pequeña, igual deberia tener los indices. Segun el plan, hay una lectural natural (ie: lee cada registro de la tabla). Probaste poniendo indices?

Y por favor, usa el mismo dato para hacer evaluaciones y medidas, si cambias los querys cada vez pues como se puede determinar exactamente la causa?

Lo ultimo se me ocurre, es que el disco este fragmentado, o que las estadisticas de los indices esten desincronizadas. El que vuele con SSD muestra en parte eso (los SSD no se fragmentan, y tienen IO superveloz). Es claro, desde mi punto de vista, que FB esta leyendo datos del disco y no desde los indices (en memoria). La 2da vez es rapido porque tiene los planes, indices, etc precalculados y las estadisticas corregidas...
__________________
El malabarista.
Responder Con Cita
  #38  
Antiguo 28-11-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is online now
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.043
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Ya sé que no va a ser posible, pero no estaría mal tener una copia de la BD para probar
Responder Con Cita
  #39  
Antiguo 29-11-2012
ARPE1 ARPE1 is offline
Miembro
 
Registrado: nov 2012
Posts: 43
Poder: 0
ARPE1 Va por buen camino
Hola
Cita:
Empezado por mamcx Ver Mensaje
Ese no es el mismo query del principio -pero pasa igual?-, y no estan los tiempos. Sin embargo si es un producto cartesiano no importa que ALMAC sea pequeña, igual deberia tener los indices. Segun el plan, hay una lectural natural (ie: lee cada registro de la tabla). Probaste poniendo indices?

Y por favor, usa el mismo dato para hacer evaluaciones y medidas, si cambias los querys cada vez pues como se puede determinar exactamente la causa?
Desde el principio estoy con dos consultas: la del "merge" (origen del hilo) y esta del "exists":
Código SQL [-]Select artic.artic, almac.cod as almac from artic, almac where artic.activo = 'S' and artic.filtro = 'MP' and not exists ( Select artal.artic from artal where artal.artic = artic.artic and artal.almac = almac.cod)

Todas las pruebas que os voy poniendo están hechas con la consulta anterior (pensando en un "insert into" en lugar de un "merge"). La tabla "almac" es una auxiliar de código/descripción con clave primaria por código, si no usa ese índice es porque no hay condiciones para el uso y porque necesita todos los registros (en eso consiste la consulta: los artículos seleccionados en todos los almacenes).

Cita:
Empezado por mamcx Ver Mensaje
Lo ultimo se me ocurre, es que el disco este fragmentado, o que las estadisticas de los indices esten desincronizadas. El que vuele con SSD muestra en parte eso (los SSD no se fragmentan, y tienen IO superveloz). Es claro, desde mi punto de vista, que FB esta leyendo datos del disco y no desde los indices (en memoria). La 2da vez es rapido porque tiene los planes, indices, etc precalculados y las estadisticas corregidas...
El disco lo tengo desfragmentado: manías de uno que una vez al mes pasa ese proceso (más al andar con archivos de grandes volúmenes de aquí para allí. Los índices están bien, como ya dije no he dado de alta ningún registro y otra manía que tengo es al recibir una BD de un cliente pasarle una serie de procesos de mantenimiento. Así que sinceramente creo que es rápido por lo primero que has dicho (tienen IO superveloz), unos 450 MB/s en lectura secuencial que es lo que toca. ¿Al hacer un backup/restore también tiene el plan de la consulta calculado?

Por cierto no sé a qué te refieres con los tiempos, la consulta la ejecuté con iSQL calculando sólo el plan (Set planonly on).

un saludo y gracias por el interés
Responder Con Cita
  #40  
Antiguo 29-11-2012
ARPE1 ARPE1 is offline
Miembro
 
Registrado: nov 2012
Posts: 43
Poder: 0
ARPE1 Va por buen camino
Hola
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Ya sé que no va a ser posible, pero no estaría mal tener una copia de la BD para probar

Me gustaría poder compartir más a fondo el problema y las pruebas, pero sabéis que no se puede, si fueran míos los datos pues sí, no habría problema en haceros llegar una copia (¡¡¡de casi 3GB!!!). LOPD, LOPD, LOPD. Con un cantito en los dientes que se me permita tenerla a mi, ¡¡¡menos mal!!!.

No sé si podría generar un FDB con las tres tablas implicadas y datos aleatorios hasta llegar al volumen que tienen ellos, y si es así si nos encontraríamos con el mismo problema. Lo estudiaré, de momento me he dado cuenta que tengo el unix muuuuuy olvidado y no soy capaz de echar a andar el fbserver en suse.

Un saludo y os sigo poniendo resultados.
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
aplicación lenta Celta Varios 2 13-01-2012 13:42:19
Conexion Con Interbase/FireBIrd lenta...muy lenta federiconqn21 Firebird e Interbase 3 11-03-2010 13:13:34
Aplicacion lenta aanil OOP 4 26-01-2010 15:11:39
Ayuda con consulta lenta, lenta, lenta Gregory Mazon Firebird e Interbase 22 27-06-2007 09:56:38
Impresion lenta, muy lenta... Perio Impresión 2 20-05-2005 13:10:00


La franja horaria es GMT +2. Ahora son las 10:51:12.


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