Newsgroup: it.comp.lang.delphi
Titolo: firebird rallenta paurosamente

Salve a tutti
Ho letto spesso che chi utilizza fb si trova bene, ho provato quindi a
fare una piccola procedura di conversione di alcuni archivi su db fb
1.5
Bene considerando che la tabella è 42000rec. i primi 10000 sono
passati in  1000rec/min poi gradualmente il pc si "siede" letteralmente
e da 38000 a 39000 sono passate 13ore !!! ed ancora non si vede la
fine!
l'HD lavora come un pazzo, il pc è praticamente saturo, ed il file
.fdb non ancora alterato ( data e size )
esiste un modo per scaricare periodicamente su file, e non utilizzare
la mem virtuale temp di Windows?

fine!
Io utilizzo l'accoppiata Firebird / ZeosLib e non ho mai avuto problemi
di questo tipo anche con tabelle con un numero di record maggiore di
quelli da te citati.
Cosa usi per connetterti a Firebird ? Come fai ad avere la certezza che
il problema dipende dalla scrittura su Firebird e non dalla lettura del
database che stai cercando di trasferire su Firebird ?
Ti sei accertato che nel programma non hai commesso degli errori che
in una specifica condizione genera un loop infinito ?
Facci sapere ...
Ciao
Marco D.T.

"<--- ADelphOi --<<<" <Adel...@AdelphOi.it> ha scritto nel messaggio

Ciao
non è che ogni volta (nel ciclo) rileggi l'intera tabella da capo ?
GP 

anche io uso di solito Zeos x MySql ma qui ho provato IBTable
while not tblSrc.eof do
      ibTblTrg.Append;
      ibTblTrg.FieldByName.....
.....
     ibTblTrg.Post;
    TblSrc.Next;
end
Nessun Loop infinito. La cosa funziona perfettamente con MySql + Zeos
Appena / se finirà proverò le ZeosLib, anche se speravo che IB con D7
fosse migliore come accoppiata. Ma di sicuro utilizza un file di swap
temp che mi impegna il pc in modo massivo, speravo in qualche settaggio
di IBTransaction ( che io ho impostato a TACommitRetaining

> news:1144755477.8...@z34g2000cwc.googlegroups.com...


Anch'io uso gli IBX, ma non ho mai avuto simpatia per IBTable.
Dopo le prime prove, molto tempo fa, non l'ho più usato.
Hai provato ad usare IBQuery con query "select * from tabellaX"
per entrambe le tabelle, sorgente e destinatataria?
Non devi cambiare praticamente nulla nella logica del tuo codice
ed il componente si comporta egregiamente.. Magari è tutto lì.
Ciao
PS: in molti casi puoi risparmiare ulteriormente risorse e tempo
con IBSQL.

.fdb non ancora alterato ( data e size )
Problemi del genere non sono affatto attribuibili a Firebird che è *di
sicuro* è in grado di gestire efficientemente dati di gran lunga
maggiori di quelli che hai citato e che dipendono, quasi
esclusivamente, dal middleware che utilizzi per accedere al database
server e dalle query SQL. Come regola generale è meglio evitare
l'utilizzo dei componenti IBTable e TDBGrid che sono la causa di
infiniti problemi.
jk
--
Jilani KHALDI
http://jkhaldi.oltrelinux.com

Concordo pienamente con l'utilizzo di IBTable come di TTable e zTable,
che non uso mai nelle applicazioni, ma per creare velocemente una
procedura di porting da db diversi senza nessun codice è molto più
semplice e veloce il NON scrivere l'intera stringa di insert per la
Query. Tra l'alto ho sempre utilizzato questa tecnica con tanti altri
db.E poi credo che il post di una IBTable non faccia altro che creare
una stringa di insert per una query. Non vedo come possa influire il
rallentamento a seguito di numerosi post.
La mia osservazione però era mirata al fatto che il file .fdb non è
stato assolutamente alterato ( data e size ) da ieri! ( Giorno in cui
è partita st'avventura!) questo mi fa pensare che ho commesso qualche
errore nella configurazione di IBTransaction

Infatti da task Manager ibserver è arrivato ad utilizzare 170Mb !! ma
quando li scarica su quel benedetto db?
considerate che la tabella sorgente (dbf) è 35Mb !

Risolto: Stessa procedura ma con ZeosLib su stesso file .fdb 43000rec
in 3h:20min. poco male...

 fine!
Fammi indovinare... ad ogni record che scorri nella tabella sorgente,
scrivi una insert e la mandi al server Firebird.
Dico bene?
Andrea

 Dico bene?
No, dico male, fai di peggio: usi le table. Sigh.
Se non ricordo male, Firebird supporta le bulk
insert, prenditi 100 record(cifra buttata lě) per
volta, genera le insert, mettile in una query e poi
eseguila.
Secondo me i tempi si accorceranno di moltissimo.
Ciao,
Andrea