Probleme bei Datenimport

Wie man seine Daten nach AvERP einlesen kann.

Moderator: SYNERPY

Antworten
bastian
Beiträge: 36
Registriert: Di Jan 25, 2005 3:30 pm

Probleme bei Datenimport

Beitrag von bastian »

Hallo zusammen...

Da wir möglichst schnell AvERP einsetzen möchten, sind wir dabei die Daten aus unsere alten PPS über ODBC in AvERP einzupflegen.

Mit der alten DB-Version von Averp sind keine Probleme aufgetreten.

Auch bei der neuen DB-Version von Averp läuft erstmal alles planmässig.
Adressen, Kunden, Lieferanten - alles kein Problem und genauso schnell wie bei der alten DB-Version.

Beim Einfügen von Artikeln in die Tabelle BSA hängt sich der Datenimport jedoch immer auf bzw. dauert unendlich lange.
Selbstverständlich habe ich das Skript angepasst und neu hinzugekommene Felder berücksichtigt.

Import von 6000 Artikeln in alte DB-Version dauert ca. 2-3 Minuten
Import von 6000 Artikeln in neue DB-Version hängt sich auf bzw. dauert unendlich lange (habe ihn schonmal 20 Stunden laufen lassen - ohne Erfolg)
Import von 10 Artikeln in neue DB-Version dauert etwa 1,5 Minuten (funktioniert und beweist, daß alle Felder richtig belegt sind)

An dem Firebird-Server + ODBC-Treiber habe ich nichts verändert und bis auf das Füllen der Tabelle BSA läuft es ja auch super.

Kann sich jemand vorstellen woran das liegt, oder hat jemand ähnliche Erfahrungen gemacht?

Vielen Dank für jede Idee...

Gruß
Bastian
leon
Beiträge: 52
Registriert: Do Feb 17, 2005 9:05 pm

Transaktion

Beitrag von leon »

Ohne mich mit diesem Problem, welches demnächst auch auf mich zukommen wird, näher beschäftigt zu haben, kann ich nur folgendes mutmaßen:

Firebird schreibt, beim Import, nicht unmittelbar in die Tabellen, sondern führt zunächst einen TRANSAKTIONS_START durch. Anschließend finden die einzelnen INSERTS statt, die aber nur in das Transaktionsprotokoll geschrieben werden. Wenn alles richtig funktioniert hat (Feldzuordnungen, Feldtypen, Contrains...etc.) versucht der DBMS einen COMMIT durchzuführen. Dadurch findet das eigentlich Rückschreiben in die Tabellen statt. Dies wäre soweit auch in Ordnung und macht jeder professionielle DBMS so.

Scheinbar ist jedoch die Größe des Datenblocks, der nunmehr tatsächlich in die DB zurückgeschrieben wird (und auch von der Anzahl der Felder abhängt, die in der neuen AvERP-Version auch beim Art.-Sta gestiegen ist), zu groß für den DBMS, so dass er vermutlich abstürzt. Vielleicht kann man in dem DBMS von Firebird die Pagegröße einstellen, die bei 1 Transaktion maximal verarbeitet werden kann? Wie gesagt, dies ist nur eine Vermutung.

Ein Lösungsansatz wäre, die Datenübernahme in mehreren Schritten durchzuführen, d.h. die Quelldatei (mit den Altdaten) in mehrere (zunächst 2) Dateien aufzuteilen, so dass eine DB-Transaktion weniger Daten auf einmal verarbeiten muss. Da ja INSERTS (Daten werden eingefügt - und bestehende nicht überschrieben) durchgeführt werden, sollte dies klappen.

Allerdings bin ich selber auf die eigentliche, wahrscheinlich viel bessere, Lösung gespannt, da ich demnächst u.a. selber Artikelstammdaten in die neue AvERP-DB importieren muss.
bastian
Beiträge: 36
Registriert: Di Jan 25, 2005 3:30 pm

Beitrag von bastian »

Hi Leon... :D

Danke, daß Du Dir Gedanken gemacht hast.
Das hörte sich alles sehr sinnig an, und gestern bin ich beigegangen und habe mit Puffergrößen, Transaktions-Cache und Thread-Priorities rumgespielt.

Und am Schluss war der Firebird-Server auch leistungsfähiger als vorher.
:!: (Kann jedem, der Firebird benutzt nur raten sich die firebird.conf mal anzusehen und anzupassen - da ist noch was rauszuholen!)

Leider hat es bei dem Datenimport nicht geholfen...

Heute morgen bin ich dann die Tabellen-Skripte mal durchgegangen.
Das Problem scheint im Trigger BSA_AI0 zu liegen.

Dort wird neuerdings für jeden angelegten Artikel auch ein Lagerort (Einzellager) angelegt, wenn das Merkmal Lagerpflege auf Ja gesetzt ist.

IF (NEW.K_LPFL = sJA) THEN
BEGIN
FOR SELECT ID
FROM BLAGER
WHERE ID = :NAUSGANGID OR ID = :NEINGANGID
INTO :BLAGER_ID
DO
INSERT INTO BARTLH(
BLAGER_ID_LAGERNR,
BSA_ID_LINKKEY)
VALUES(
:BLAGER_ID,
NEW.ID);

Und genau diese Funktion scheint das Datenbanksystem ans Limit zu bringen. Was da falsch läuft kann ich leider nicht sagen.

Nachdem ich die Funktion auskommentierte, lief alles blasenfrei und der Datenimport ist schnell durchgelaufen (ca. 3 Minuten bei 6000 Artikeln)

Die Lagerorte muss ich nun manuell anlegen...
Das ist aber kein Problem - musste man ja bei der alten DB-Version von Averp auch machen.

:?: Kann jemand erkennen, wieso diese Funktion das System deart in die Knie zwingt ?

Gruß Bastian
admin
Site Admin
Beiträge: 2673
Registriert: Di Feb 10, 2004 5:48 am
Wohnort: Bayreuth

Beitrag von admin »

Das ist eigentlich ganz normal, da für jeden Lagerort die Lagervorausplanung gemacht wird. Je nach dem, wie viele Tage hier im Firmenstamm eingestellt sind, kann das schon seine Zeit dauern. Die Zeit sollte man beim Import einfach auf einige wenige Tage einstellen. Dann klappts auch wieder mit dem Nachba..., emm, Import. :)
bastian
Beiträge: 36
Registriert: Di Jan 25, 2005 3:30 pm

Beitrag von bastian »

Das war es !!!

Danke für diesen Hinweis. :D

Lasse gerade den Artikelimport durchlaufen und habe die Lagervorausplanung auf einen Tag gesetzt.

Dauert nun zwar immernoch 2-3 Stunden, aber es bewegt sich was :)
*tanzaufdemtisch*


Gruß
Bastian
admin
Site Admin
Beiträge: 2673
Registriert: Di Feb 10, 2004 5:48 am
Wohnort: Bayreuth

Beitrag von admin »

Alternative: Keine Lager anlegen lassen. Diese manuell nach dem Import der Artikel anlegen lassen. Das geht dann schneller (warum, weiß wohl nur Interbase).
Antworten