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
  #1  
Antiguo 13-07-2005
pjjorda pjjorda is offline
Miembro
 
Registrado: jul 2005
Posts: 34
Poder: 0
pjjorda Va por buen camino
Smile Muy lento al insertar registro >100.000

Saludos, utilizo Delphi7 con fb1.5
con un ibdataset hago un append, relleno los valores de los campos y después un post, y un commitretainning de la transacción.

cuando la tabla tiene pocos registros funciona rápido,
pero en tablas con mas de 100.000 regs. va lentísimo,
seguramente será algo sencillo, pero no lo veo.

No se que mas información dar...

Agradecería la ayuda del foro

windows xp, pIV a 1.5GHz, 640MbRam.
Responder Con Cita
  #2  
Antiguo 13-07-2005
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.275
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
¿Porqué utilizas CommitRetainning el lugar de Commit?
Piensa que esta instrucción es menos eficiente, aunque no dices si llevas "mucho rato" haciendo CommitRetaining cuando "va lento".
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #3  
Antiguo 13-07-2005
pjjorda pjjorda is offline
Miembro
 
Registrado: jul 2005
Posts: 34
Poder: 0
pjjorda Va por buen camino
Gracias Neftali por tu pronta respuesta,

ocurre igual con commit que commitretainning, se trata por ejemplo de una entrada de registros por pantalla, al primer registro que entro, ya va lento.
Un saludo
Responder Con Cita
  #4  
Antiguo 13-07-2005
pjjorda pjjorda is offline
Miembro
 
Registrado: jul 2005
Posts: 34
Poder: 0
pjjorda Va por buen camino
Saludos,
he estado parando el programa antes y después de las instrucciones con el ibdataset y la lentitud está en el Post (no tiene eventos afterpost ni beforepost),
el append y el commit van como las balas. Gracias
Responder Con Cita
  #5  
Antiguo 13-07-2005
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
¿Puedes dejarnos el script de creación de la tabla para que hagamos pruebas?, ¿puedes poner el código delphi de cómo lo haces?, así será más facil que se te pueda ayudar
Responder Con Cita
  #6  
Antiguo 13-07-2005
pjjorda pjjorda is offline
Miembro
 
Registrado: jul 2005
Posts: 34
Poder: 0
pjjorda Va por buen camino
Gracias por anticipado, aqui teneis:
hago APPEND
asigno los valores de T, TIP, NUM igualando de otras variables
el resto de los campos vienen de DBEDITs
hago POST (aquí es donde va lento) tiene 125.000 regs

/**** Generated by IBExpert 13/07/2005 20:33:56 ****/
SET SQL DIALECT 3;
SET NAMES NONE;
CREATE TABLE ALMACEN (
T SMALLINT,
TIP VARCHAR(1),
NUM INTEGER,
FEC DATE,
HOR TIME,
ART VARCHAR(11),
DES VARCHAR(50),
CLI INTEGER,
CAN NUMERIC(5,2),
CANB NUMERIC(5,2),
PRE NUMERIC(5,3),
ALB INTEGER,
AUT INTEGER
);
/**** Indices ****/
CREATE UNIQUE INDEX ALMACEN_IDX1 ON ALMACEN (T, TIP, NUM);
Responder Con Cita
  #7  
Antiguo 13-07-2005
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 27
jachguate Va por buen camino
Es probable que la tabla tenga triggers que sean los que relentizan el sistema. Para comprobarlo, desactivá los triggers asociados y cronometrá nuevamente.

Es probable también que haya una relación que no esté soportada con un índice. Interbase/Firebird crea automáticamente los índices necesarios cuando declaras un foreign key, pero recuerdo que es posible borrar estos, lo que obliga al sistema a hacer un full scan de la tabla cada vez que se comprueba la integridad.

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #8  
Antiguo 14-07-2005
pjjorda pjjorda is offline
Miembro
 
Registrado: jul 2005
Posts: 34
Poder: 0
pjjorda Va por buen camino
Gracias de nuevo,
no hay triggers, ni eventos after before ni nada que no haya expuesto, es esa tabla asi de sencilla,
con Ibexpert me crea los registros de inmediato, pero desde delphi tarda 9 seg.,
he probado con Fibplus y lo mismo.
Pienso que la database está bien configurada, porque ibexpert trabaja bien,
creo que el delphi será el culpable, no se...
Gracias por vuestro interés.
Un saludo
Responder Con Cita
  #9  
Antiguo 14-07-2005
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 27
jachguate Va por buen camino
Bien!

Al menos se ha despejado la duda del motor... ahora, yo creo que hay algo errático en la forma en que vos estas enviando la actualización... o en la forma que lo implementa tu capa de acceso a datos.

Podes comprobarlo con el propio IBExpert, que hasta donde yo recuerdo, está hecho en delphi, y donde vos mismo asegurás que va bien.

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #10  
Antiguo 14-07-2005
tulio tulio is offline
Miembro
 
Registrado: may 2003
Ubicación: Argentina
Posts: 300
Poder: 21
tulio Va por buen camino
Hola PJJOrdan

Te cuento que me pasaba lo mismo, despues que la tabla llegaba a unos 50000 registro cuando hacia un append (metodologia usada en las tablas plana ) se me volvia una tortuga.
La solucion fue hacer todas las altas y modificaciones con Store Procedure, de esta forma se te acaban los problemas, por mas que la tabla tenga 500000 registro , el tiempo de insercion no varia

saludos

tulio
Responder Con Cita
  #11  
Antiguo 15-07-2005
pjjorda pjjorda is offline
Miembro
 
Registrado: jul 2005
Posts: 34
Poder: 0
pjjorda Va por buen camino
Gracias Tulio, muy amable tu respuesta,
he creado un stroredproc, le paso los parametros, executo y lo mismo, 9 seg. el primer reg.
, sin salirme del programa y haciendo commitretainning creo otros y ya rapidísimo, igual que con el insert del ibdataset. (si hago commit vuelve a tardar los 9seg.).

Yo no quiero haceros perder mas tiempo con el tema, será algo particular mio, de mi instalación, bueno ya veré..

Gracias de todos modos.
Responder Con Cita
  #12  
Antiguo 16-07-2005
Avatar de rastafarey
rastafarey rastafarey is offline
Miembro
 
Registrado: nov 2003
Posts: 927
Poder: 21
rastafarey Va por buen camino
Resp

Una cosa no tiene que ver con la otra.

Si haces un asimple insercion A firebird no le importa cuanto s registros tengas. y si dice que desde ibexpert te funciona perfecto.
Entonces verifica qeu no estes haciendo un refresh o algo por el estiloluego del insert que quisas el insert no e slo que te esta poniendo l acosa lenta si no otro codigo fastidioso.

Peropor que dame codigo y asi es mas facio ayudar.
__________________
Todo se puede, que no exista la tecnología aun, es otra cosa.
Responder Con Cita
  #13  
Antiguo 18-07-2005
pjjorda pjjorda is offline
Miembro
 
Registrado: jul 2005
Posts: 34
Poder: 0
pjjorda Va por buen camino
Saludos, contestando a Rastafarey
como ya dije:
"Gracias por anticipado, aqui teneis:
hago APPEND
asigno los valores de T, TIP, NUM igualando de otras variables
el resto de los campos vienen de DBEDITs
hago POST (aquí es donde va lento) tiene 125.000 regs"

y también:
"no hay triggers, ni eventos after before ni nada que no haya expuesto, es esa tabla asi de sencilla,
con Ibexpert me crea los registros de inmediato, pero desde delphi tarda 9 seg.,
he probado con Fibplus y lo mismo.
Pienso que la database está bien configurada, porque ibexpert trabaja bien,
creo que el delphi será el culpable, no se..."

Supongo que tendrá algo que ver la cantidad de registros puesto que en otras tablas con mas campos similares de 200, 1000, 3000regs. funciona perfectamente, y en esta de 125000 tarda 9segs., y en otra que tengo con 260000 también lento,
si os preguntáis como han llegado a tener tantos registros, he convertido ficheros y aplicaciones de cobol-85 a firebird con delphi7.

Gracias de nuevo a todos.
Responder Con Cita
  #14  
Antiguo 18-07-2005
Avatar de Rufus
Rufus Rufus is offline
Miembro
 
Registrado: may 2004
Ubicación: Canarias
Posts: 193
Poder: 20
Rufus Va por buen camino
Una curiosidad, ¿como es que tienes que insertar de golpe 125.000 registros?. ¿Eso es al pasar de cobol a firebird?.

Por otra parte dices que se trata de una inserción de registros por pantalla, ¿vas a meter uno a uno por pantalla 125.000 registros? Supongo que es una prueba que estas haciendo.

Por cierto, hace como un año hice unas pruebas para ver lo rápido que iba firebird para ver si me quedaba definitivamente con este SGDB. Lo hice de dos maneras, mediante un script para isql y mediante Delphi con fibplus. Para la prueba de insertar 100.000 registros tardó mas o menos 35 segundos (en insertar los 100.000). Puedes configurar cada cuantos registros se hace un commit automático.

Las causas pueden ser varias. Sólo tienes un índice creado, quizá no sea suficiente. Tabien puede tener que ver la forma de crear los identificadores únicos. O una mala conjunción planetaria¿?... . No, en serio, sigue posteando, queremos ver si se te soluciona el problema, firebird tiene que ir volando, da igual que sean 100.000 o 1 millón de registros.
__________________
Milo
Responder Con Cita
  #15  
Antiguo 18-07-2005
pjjorda pjjorda is offline
Miembro
 
Registrado: jul 2005
Posts: 34
Poder: 0
pjjorda Va por buen camino
Se bienvenido Rufus, agradezco tu interés,
no me he explicado correctamente, he traducido una aplicación hecha en rm-cobol85 a delphi7, los ficheros cobol los he convertido a una base de datos Firebird, el diseño de la tabla ejemplo es la de arriba, que ya tenía 125000 regs, y que con el programa nuevo en Delphi irá aumentando mediante un formulario.
Espero que ahora si esté claro, puse showmessages antes y después de cada instruccion Delphi,
y la que tarda en correr es la de IBDATASET1.POST, espero no resultar cansino,
me acabo de descargar e instalar el IBX 7.09, y ahora no puedo compilar, me sale un error diciendo que no encuentra IBDATABASE.PAS,
así que una cosa detrás de la otra y paciencia.

Recibid un agradecido saludo.
Responder Con Cita
  #16  
Antiguo 20-07-2005
pjjorda pjjorda is offline
Miembro
 
Registrado: jul 2005
Posts: 34
Poder: 0
pjjorda Va por buen camino
Saludos al foro, este mensaje es para dar la solución a mi problema,
el arbol no deja ver el bosque
como ya dije:
hago APPEND
asigno los valores de T, TIP, NUM igualando de otras variables
el resto de los campos vienen de DBEDITs
hago POST (aquí es donde va lento) .....
bien la solución ha sido:
antes de pedir datos para el registro, estas dos líneas
ibdataset.selectsql.text:='SELECT * FROM IBDATASET WHERE T=0 AND TIP=''E'' AND NUM=380663';
ibdataset.open;
siendo los valores de T, TIP, NUM los que luego iba a asignar a la key en el insert.
debía posicionar primero....
el arbol no deja ver el bosque.
Gracias a todos por vuestro interés.
Responder Con Cita
  #17  
Antiguo 22-07-2005
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 27
jachguate Va por buen camino
Esta solución me hace pensar que el problema es un refresh (implicito o explicito) que está ocurriendo.

El tiempo simplemente se minimiza porque después de insertar el registro físicamente, solo hay un registro que traer de vuelta, gracias al nuevo where.

En todo caso, lo ideal es que ese refresh no se de. Te recomiendo revisar, ya que aseguras que no hay eventos, los valores establecidos a las propiedades, tanto de la transacción como del dataset... aunque jamás he visto este comportamiento.

Saludos.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
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


La franja horaria es GMT +2. Ahora son las 05:58:52.


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