Newsgroup: it.comp.software.database
Titolo: Ma quanto è lento interbase?!?!

Ciao a tutti,
ho ereditato un semplice programma di import che leggendo da un file
carica le informazioni su un db Interbase 6.0.
Dico semplice programma perchè non fa altro che leggere da un file di
testo e inserire tutto in una tabella.
La procedura di import fino ad un mese fa circa impiegava 20m per
essere completata (il file del db era circa 60mb).Adesso, impiega 1h
30m quando va bene, (il db è 100 mb).
Il tutto gira su un server Win2000 sp4, con doppio processore e 2gb di
ram.
Pur non avendo grande dimestichezza con Interbase, sono di scuola MS
SQL, ho cercato di lavorare sulle sue configurazioni per migliorare le
prestazioni del server, me senza un apprezzabile successo.
Qualcuno può darmi un suggerimento??

 Qualcuno può darmi un suggerimento??
prova a fare un backup e restore.


Grazie mille della dritta,
in effetti mi sono perso nel cercare una soluzione al problema
tralasciando quella più ovvia.
Dai primi test fatti, ho riscontrato una riduzione del 40% del tempo
di elaborazione.
Adesso devo solo automatizzare la procedura di backup/restore.

 Adesso devo solo automatizzare la procedura di backup/restore.
visto che fai solo inserimenti e non cancellazioni forse e' sufficiente uno
script che gli faccia ricalcolare gli indici


Purtroppo non sono solo inserimenti.
La tabella viene svuotata e ripopolata ogni volta.

 La tabella viene svuotata e ripopolata ogni volta.
allora backup e restore e' l'unica via


mi sembra proprio di si
Cmq mi sono scritto una procedura per il backup/restore automatico
La tengo sotto controllo un paio di giorni
Grazie mille della tua disponibilità

"Hybris" <hyb...@NOSPAMgmail.com> ha scritto nel messaggio
news:f0knan$p10$
1...@tdi.cu.mi.it
 

Potrebbe avere senso fare il drop della tabella e poi ricrearla?
-- 
ValeRyo
La macchina si dice honeypot ("vasetto del miele"), la tecnica
e' detta honeypotting, e chi la pratica assume il nome celtico
e magico di Honey Potter. -- Leonardo Serni


non lo so

 Qualcuno può darmi un suggerimento??
Domanda da inesperto curioso; Interbase non ha un utility nativa per
il caricamento dei dati come ad esempio SQL*Loader per Oracle?



Mi sono informato....
Facendo un backup e restore del db, vengono riorganizzate le pagine
del db, ottimizzato lo spazio, effettuato il controllo di integrità di
tutti gli oggetti del DB.
Credo che non avrebbe senso, fare il drop e recreate della tabella
perchè servirebbe solo a fare ulteriore "confusione", all'interno
delle pagine del db.

"Hybris" <hyb...@NOSPAMgmail.com> ha scritto nel messaggio
news:f0kus7$4p6$
1...@tdi.cu.mi.it
 

Allora si potrebbe provare, non conosco il motore di interbase
ma a naso dovrebbe funzionare.


 tutti gli oggetti del DB.
e soprattutto gli indici...

 delle pagine del db.
Scusa ma la procedura di import cosa fa?
Se fa solo InsertInto dubito che possano entrarci gli indici, e le
dimensioni del DB. Te lo dico perchè lavoro con DB più grandi, e i problemi
con molte righe si possono avere con SELECT non con INSERT INTO.
Non è che ci sono trigger BEFORE INSERT e simili?
Sembrerebbe quasi più un problema di deframmentazione del disco.
Prova anche ad installare Firebird che accede ai DB di IB6, ed è opensource
e dovrebbe essere più aggiornato (installa la 1.5.xx non la 2.x per
provare).

Dopo i due giorni promessi eccovi i risultati.
Innanzitutto una premessa.
Il db aveva una dimensione di circa 100MB, contiene 85 tabelle, ed è
utilizzato da 3 programmi diversi da 15 postazioni diverse.
Il db è usato da circa due anni ininterrotti.
La procedura di import si occupa di importare 12 file estratti da
un'altro PC AS400, ma uno in particolare rappresentava il "collo di
bottiglia", perchè impiegava circa 1h e 15m, svuotando la tabella e
ripopolandola, facendo per ogni record da inserire una serie di
controlli su altre tabelle del DB.
Dopo aver fatto il backup/restore, il file è diventato 70MB e l'import
del file è sceso a 25m, quindi mi sembra di aver risolto il problema.
Sul motivo di questo miglioramento, credo che facendo il backup/
restore abbia azzerato e compattato quello che in MS SQL si chiama
Transaction Log(non ho trovato riferimenti in questione su Interbase),
con un notevole miglioramento generale delle prestazioni.
Quindi ho fatto una procedura automatica che ogni sera si attiva e mi
sono tolto il pensiero.
Grazie a tutti per la disponibilità

 sono tolto il pensiero.
attenzione a un piccolo dettaglio.
se il db per qualche motivo si corrompe potrebbe accadere che e' possibile
fare il backup ma poi il restore fallisce.
quindi non fare mai il restore andando a sovrascrivere il file del
database originale. prima fai il restore da un'altra parte e poi cancelli
il vecchio file e rinomini quello nuovo.
normalmente un restore che fallisce si recupera ma e' meglio evitare di
sputtanare anche il db originale nel frattempo.

 
Ci sono dei frontend guarda IBExpert Personal Edition, la versione full
ha qualcosa in piů
www.ibexpert.com
Massimo

 Adesso devo solo automatizzare la procedura di backup/restore.
Mi sembra strano che Interbase non abbia dei comandi di ottimizzazione del
database (in effetti non ho mai indagato molto da questo punto di vista).
Cercando un po', ho notato questo:
http://www.ibphoenix.com/main.nfs?a=ibphoenix&page=ibp_tip_perf
In pratica, tra le cose che dice, oltre a consigliare un backup ed un
restore, consiglia anche di utilizzare il comando gfix
Enrico
P.S. da quello che vedo, dai anche un'occhiata al comando gstat