ich bin gerade dabei eine nicht von mir zusammengeschusterte MS-Access DB
nach
Oracle zu portieren. Die Anwendung selbst ist nach diesem typischen
Frontend-Backend Muster aufgebaut.
Nachdem ich das Backend nun nach in eine Oracle DB portiert habe, versuche
ich die dadurch evtl. entstandenen
Geschwindigkeitsnachteile zu minimieren indem ich das Frontend unter die
Lupe nehme.
Im Moment habe ich ein Problem mit einem Bericht, das zwei Unterberichte
enthält. Die Ladezeit ist im Vergleich zu der Produktivversion
unverhältnismäßig hoch. Die drei Abfragen, die den einzelnen Berichten
zu Grunde liegen, werden relativ fix ausgeführt. Pro Abfrage dauert es ca.
20 Sekunden bis auch der letzte Datensatz auf
dem Bildschirm erscheint, was bei den übertragenen Datenmengen o.k. ist.
Im SQLPlus-Fenster ist es auch nicht schneller...
Der Hauptbericht ohne die beiden Unterberichte, oder die beiden
Unterberichte einzeln werden zügig
generiert (ca.20 Sekunden pro Bericht). Wenn aber die beiden Unterberichte
im Hauptbericht eingebunden werden,
steigt die Ladezeit für den Hauptbericht auf 5 Minuten, dann ist die erste
Seite sichtbar.
In der Produktivversion, also mit dem Access-Backend sind es ca. 20
Sekunden.
Kann mir jemand von euch vielleicht sagen, woher so etwas kommt?
Wir verwenden zur Zeit MS-Access97 auf WinNT 4.0 und Oracle 8.1.7 auf einem
SUN Solaris Server.
Die Tabellen werden über ODBC verknüpft.
Vielen Dank im voraus
Bojan Kovacevic
mittlerweile habe ich herausgefunden warum das ganze so langsam ist.
Bei einer Bericht/Unterbericht Konstellation wird die Abfrage, die dem
Unterbericht zu Grunde liegt, bei jedem Datensatz aufgerufen und nicht
nur einmal für den ganzen Unterbericht.
Bei einem Access-Backend wird das wohl effektiver im Access-Frontend
zwischengespeichert, als bei einem Oracle-Backend - hier werden die
Daten immerwieder vom neuen vom Server geholt.
Ich werde wohl den Inhalt der Abfrage als Tabelle im Access-Frontend
zwischenspeichern müssen...
Oder fällt jemandem eine besser Lösung ein?
Gruß
Bojan
> mittlerweile habe ich herausgefunden warum das ganze so langsam ist.
> Bei einer Bericht/Unterbericht Konstellation wird die Abfrage, die dem
> Unterbericht zu Grunde liegt, bei jedem Datensatz aufgerufen und nicht
> nur einmal für den ganzen Unterbericht.
Das ist einer der Gründe, warum ich versuche Unterberichte zu vermeiden.
> Bei einem Access-Backend wird das wohl effektiver im Access-Frontend
> zwischengespeichert, als bei einem Oracle-Backend - hier werden die
> Daten immerwieder vom neuen vom Server geholt.
> Ich werde wohl den Inhalt der Abfrage als Tabelle im Access-Frontend
> zwischenspeichern müssen...
> Oder fällt jemandem eine besser Lösung ein?
Was besseres fällt mir auch nicht ein, kann aber sein, dass Du damit vom Regen in die Traufe kommst, weil Tabellenerstellung nun mal nicht zu den schnellsten Dingen gehört, ganz zu schweigen vom Aufblähen des Frontends (regelmäßiges Komprimieren kostet dann ja auch Zeit...)
Gruß
Doerthe
> Das ist einer der Gründe, warum ich versuche Unterberichte zu vermeiden.
Der Hauptgrund warum ich mich überhaupt damit auseinander setze, ist
die Vermeidung von Access. Dass Access überhaupt verwendet wurde,
ist das Problem. Aber so wie das halt immer ist, ein Schritt nach dem
anderen.
> Was besseres fällt mir auch nicht ein, kann aber sein, dass Du damit
>vom Regen in die Traufe kommst, weil Tabellenerstellung nun mal nicht
>zu den schnellsten Dingen gehört, ganz zu schweigen vom Aufblähen
>des Frontends (regelmäßiges Komprimieren kostet dann ja auch Zeit...)
Ja, das weiß ich ja... Aber einmal am Tag ein-zwei Minuten mit der
Kompression zu verlieren ist weniger schlimm, als pro Berichterstellung
fuenf Minuten zu verlieren. Die Zeit für die Tabellenerstellung ist nicht
so dramatisch, nach 20 Sekunden ist das Ding im Kasten.
Vielleicht fällt mir auch was besseres ein.
> Gruß
> Doerthe
Gruß
Bojan