AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Firebird Import aus Textdatei extrem langsam
Thema durchsuchen
Ansicht
Themen-Optionen

Firebird Import aus Textdatei extrem langsam

Ein Thema von globetrotter77 · begonnen am 13. Sep 2009 · letzter Beitrag vom 18. Sep 2009
Antwort Antwort
Seite 4 von 7   « Erste     234 56     Letzte »    
globetrotter77

Registriert seit: 16. Jan 2009
Ort: Nürnberg
236 Beiträge
 
Delphi 10.3 Rio
 
#31

Re: Firebird Import aus Textdatei extrem langsam

  Alt 15. Sep 2009, 00:49
sehr schön, wenn auch unverständlich:
mit StartTransaction(TD) und Commit(TD) geht's plötzlich einigermaßen schnell.
Vorher ist allerdings noch
TD.TransactionID:=1;
erforderlich.
Ca. 105000 Datensätze in knapp 4 Minuten
Kein Vergleich mit dem Ergebnis von omata, aber immerhin.

Allerdings dauert danach ein Open eines ClientDataSets schlappe 15 (fünfzehn!) Minuten!!!

Abgesehen davon, dass es für mich nach wie vor unverständlich bleibt, wieso es
a) über ein ClientDataSet ewig lange dauert
b) mit Hilfe von SQLQuery nicht möglich ist bzw. unverständliche Fehlermeldungen liefert
ist es natürlich völlig unzumutbar für den User, nach dem Datenimport so lange zu warten, bis sich wieder was tut.

Wo ist denn hier der Fallstrick versteckt?
Ich kapiere es nicht mehr!
Wie gesagt - mit BDE und Interbase-Komponenten war das alles überhaupt kein Problem.
Wo kann ich denn bei den Einstellungen überhaupt so nen Bock schießen?
Ich gehe zumindest mal davon aus, dass ich ihn selber geschossen habe ...
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#32

Re: Firebird Import aus Textdatei extrem langsam

  Alt 15. Sep 2009, 07:04
Hallo,

benutzt du denn jetzt das hier ?

Delphi-Quellcode:
var
  TD:TTransactionDesc; (aus DBXpress)
begin
  TD. // usw.

  SQLConnection.StartTransaction(TD);
  try
    SQLConnection.ExecuteDirect('INSERT INTO ...');
    SQLConnection.Commit(TD);
  except
    SQLConnection.Rollback(TD);
  end;
end;
Du musst das mit den Parametern und der Query hinbekommen.
Eine prepared Query ist etwa doppelt so schnell wie das da oben.

Man könnte auch noch folgendes machen:
- je nach 500 Datensätzen Commit/StartTransaction
- per Alter Index XXX Inactive alle nicht benötigten Indizes deaktivieren


Heiko
Heiko
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#33

Re: Firebird Import aus Textdatei extrem langsam

  Alt 15. Sep 2009, 07:14
Oder alles in Kombination.
Markus Kinzler
  Mit Zitat antworten Zitat
globetrotter77

Registriert seit: 16. Jan 2009
Ort: Nürnberg
236 Beiträge
 
Delphi 10.3 Rio
 
#34

Re: Firebird Import aus Textdatei extrem langsam

  Alt 15. Sep 2009, 09:22
Zitat von hoika:
Hallo,

benutzt du denn jetzt das hier ?

Delphi-Quellcode:
var
  TD:TTransactionDesc; (aus DBXpress)
begin
  TD. // usw.

  SQLConnection.StartTransaction(TD);
  try
    SQLConnection.ExecuteDirect('INSERT INTO ...');
    SQLConnection.Commit(TD);
  except
    SQLConnection.Rollback(TD);
  end;
end;
Genau das benutze ich, allerdings zunächst mal nur in einer einzigen großen Transaktion.
Das werde ich noch abändern. Pro Datensatz ist allerdings auch zu langsam.
Zitat von hoika:
Du musst das mit den Parametern und der Query hinbekommen.
Eine prepared Query ist etwa doppelt so schnell wie das da oben.
Das würde ich gerne tun, aber mit SQLConnection.ExecuteDirect('INSERT INTO ...') habe ich doch gar keine Parameter zur Verfügung, oder?
Oder wäre es möglich, innerhalb von SQLConnection.StartTransaction und SQLConnection.Commit wieder auf SQLQuery-Methoden zurückzugreifen? (Mal abgesehen davon, dass die unbekannte Spalte angemeckert wird)
Zitat von hoika:
Man könnte auch noch folgendes machen:
- je nach 500 Datensätzen Commit/StartTransaction
das habe ich auf jeden Fall vor
Zitat von hoika:
- per Alter Index XXX Inactive alle nicht benötigten Indizes deaktivieren
Heiko
tja, leider habe ich schon alles soweit abgespeckt, dass nur noch ein PRIMARY KEY vorhanden ist, den ich auch brauche, weil mit doppelten Schlüsseln zu rechnen ist.

Leider hat das alles aber gar nichts damit zu tun, dass sich das System danach (!) völlig unzumutbar verhält.
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#35

Re: Firebird Import aus Textdatei extrem langsam

  Alt 15. Sep 2009, 12:31
Hallo,

Zitat:
danach unzumutbar verhält
Langsam ?

Was passiert, wenn du den Server-Dienst (FBGuardian) anhälst und neustartest ?
Ist es danach wieder "normal" schnell,
dann hast du eine offene Transaktion (also eine nicht comittete).

Zur Query.
Was war noch mal das Problem, nicht die SQLQuery zu benutzen ?
Wie weit warst du denn da schon.
Hast du noch den Quellcode davon (nicht nur die Splitter hier) ?


Heiko
Heiko
  Mit Zitat antworten Zitat
globetrotter77

Registriert seit: 16. Jan 2009
Ort: Nürnberg
236 Beiträge
 
Delphi 10.3 Rio
 
#36

Re: Firebird Import aus Textdatei extrem langsam

  Alt 15. Sep 2009, 13:09
Zitat von hoika:
Hallo,

Zitat:
danach unzumutbar verhält
Langsam ?
gnadenlos langsam ... CLientDataSet.Active:=true ===> ca. 15 Minuten, bis es weitergeht
Zitat von hoika:
Was passiert, wenn du den Server-Dienst (FBGuardian) anhälst und neustartest ?
Ist es danach wieder "normal" schnell,
dann hast du eine offene Transaktion (also eine nicht comittete).
werde ich probieren, glaube aber nicht, dass es daran liegt
Zitat von hoika:

Zur Query.
Was war noch mal das Problem, nicht die SQLQuery zu benutzen ?
Wie weit warst du denn da schon.
Hast du noch den Quellcode davon (nicht nur die Splitter hier) ?
da bekam ich den Fehler "column unknown" an der Stelle, wo der Parameter angesprochen wurde - warum, weiß der Kuckuck!

den Quellcode habe ich mittlerweile so sehr gemetzelt, das er kaum noch zu erkennen ist, nur um die verschiedenen Vorschläge auszuprobieren.
ich habe den Eindruck, dass ich ein grundsätzliches Einstellungsproblem vorliegen habe, habe aber leider keine Ahnung, wo das liegen könnte.

was mir ohnehin nicht gefällt, ist die Verwendung der dbExpress-Komponenten (sind mir schon wegen der Unidirektionalität sehr suspekt), aber ich wüsste nicht, was ich sonst nehmen könnte.

wenn ich es richtig in Erinnerung habe, muss ich das ClientDataSet verwenden, um auch rückwärts gehen zu können, nicht wahr?

irgendwie zieht hier eine Krücke die nächste nach sich, und diese gleich noch mal eine usw. usw.

Was für Connection-Möglichkeiten gibt es denn sonst noch? und ist da auch was Empfehlenswertes dabei?
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#37

Re: Firebird Import aus Textdatei extrem langsam

  Alt 15. Sep 2009, 14:00
Hallo,

wie wäre es mit den Zeos-Komponenten?

ein Tutorial
Die Komponenten zur ZeosLib

Tutorial zu ClientDataSet
Beim ClientDataSet darfst Du nicht vergessen, dass er die gesamten Daten im Arbeitsspeicher vorhält, Deine 100 und ein paartausend Sätze werden also erstmal in die Arbeitsspeicher geladen, ist das erforderlich, da ja offensichtlich eine ziemlich arge "Spassbremse".
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#38

Re: Firebird Import aus Textdatei extrem langsam

  Alt 15. Sep 2009, 14:15
Hierfür sollte auch IBX ausreichen
Markus Kinzler
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#39

Re: Firebird Import aus Textdatei extrem langsam

  Alt 15. Sep 2009, 17:33
Hallo,

also hier

1

wird auf einen SQL-Monitor verwiesen.


Heiko
Heiko
  Mit Zitat antworten Zitat
globetrotter77

Registriert seit: 16. Jan 2009
Ort: Nürnberg
236 Beiträge
 
Delphi 10.3 Rio
 
#40

Re: Firebird Import aus Textdatei extrem langsam

  Alt 16. Sep 2009, 01:10
Zitat von omata:
So, ich habe das jetzt mal selber ausprobiert...

Code:
1.000.000   Zeilen = 0:18 (Datei = 16MB)
1.000.000.0 Zeilen = 2:48 (Datei = 166MB)
Also für einen Datensatz ca. 18µs (auf meiner Maschine = P4, 3GHz)
da komme ich noch lange nicht ran ...
könntest du mir vielleicht mal verraten, welche Komponenten und Methoden du verwendet hast?
evtl. den Quelltext und/oder die Einstellungen im Object Inspector?
vielleicht komme ich dann dahinter, was ich falsch gemacht habe ...

wäre toll!

Edit:
hast du auch doppelte Primary Keys dabei?
die muss ich nämlich berücksichtigen
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 4 von 7   « Erste     234 56     Letzte »    


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:57 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz