Code: Alles auswählen.
PERFORM whatever_you_wanna_duh
schneller als die Auswertung, die ich ablösen möchte, und die vor vielen Jahren ohne Bedacht auf Laufzeit (oder Speicher) geschrieben wurde... und, wie erwähnt, Probleme macht.
natürlich, aber auch sehr abgespeckte Daten. Bei 10.000 Zeilen sollte noch lange nichts swappen.DeathAndPain hat geschrieben: ↑18.11.2019 16:47Irgendwas haut da nicht hin. So ein LOOP darf keine so langen Laufzeiten erzeugen. Habt ihr möglicherweise ein sehr stark abgespecktes Entwicklungssystem,
Fahre gerade einen Vergleich auf P über Belege eines Monats (ca. 25000 Zeilen im Ergebnis) und bin in der "Urversion" doch schon etwa doppelt so schnell wie das alte Programm. Wobei ich gerade gesehen habe, dass das alte Programm da schon wieder was dazuliest, was ich gar nicht ausgewählt habe... ich glaube, ich will das gar nicht verstehen...Auf dem Produktivsystem wird das aber sicherlich nicht so sein.
Das war auch meine Idee, und deshalb war ich ja verwundert. Nämlich gerade bei einem Umfang von ca. 10.000 Zeilen, wo man schon Laufzeiten ablesen kann (und ich nicht ewig auf das Ergebnis warten muss), aber keine Speicherprobleme haben sollte.Ich kann Dir nur raten, möglichst viel im Hauptspeicher zu rechnen und die Zahl Deiner SELECTs auf ein Minimum zu beschränken.
Das überlege ich mir wirklich noch...Was Du machen kannst und was ich Dir empfehlen würde, auch wenn es anfangs etwas mehr Tipparbeit für Dich bedeutet, ist, Dich von dem SELECT * zu verabschieden und Dir zu überlegen, welche Spalten aus der VBPA Du tatsächlich benötigst. Deklarier am Anfang Deines Programms einen lokalen Typ mit genau diesen Feldern, dann deklariere Deine lokale Tabelle lt_vbpa über diesen Typ (aber natürlich trotzdem sortiert mit gescheitem Schlüssel). Damit reduzierst Du vermutlich (je nachdem, wie viele der Spalten Du wirklich brauchst) ganz erheblich den Hauptspeicherbedarf,
Was bei der VBPA kein echtes Thema ist.und zugleich wird Dein Code im Debugger für Dich und für andere viel besser verständlich, weil man dann in der internen Tabelle nur Werte sieht, die im Zusammenhang Deines Programms tatsächlich bedeutsam sind, statt lauter irrelevantem Datenmüll.
Welche Rolle spielt das? Sollte Oracle sein.Was habt ihr überhaupt für eine Datenbank?
Ich bei meinem Programm schon - die Reduktion auf die nötigen Partner hat eine Beschleunigung gebracht.
"Sollte" oder hast Du es nachgeprüft? Vielleicht swappt die Kiste ja schon dadurch, dass SAP läuft? Dann rechnet jedes zusätzliche Byte auf der Festplatte (na gut, ist etwas übertrieben, aber Du verstehst, was ich meine).Bei 10.000 Zeilen sollte noch lange nichts swappen.
Hätte ja sein können, dass es HANA ist. Das hätte schon einen nicht unerheblichen Unterschied gemacht.Welche Rolle spielt das? Sollte Oracle sein.
Das kommt ja auf die dahinterstehende Hardware bzw. der Auslastung. Wenn der Hauptspeicher des Application-Server immer swopped, da alle die DB-Daten zuerst einmal dort ablegen, dafür der DB-Server sich die meiste Zeit langweilt, ist das Ergbnis der Verlagerung ja klar.
Dann ist die Lösung aber nicht, auf teure Datenbankzugriffe umzustellen, sondern den Application-Server in Ordnung zu bringen. Ein paar - auch größere - Tabellen in den Hauptspeicher zu laden mag vor 20 Jahren noch ein Thema gewesen sein. Bei heutigen Speichergrößenordnungen darf das aber nicht mehr der Fall sein. Entweder da laufen Programme drauf, die ganz katastrophal programmiert sind und z.B. erst mal im ganz großen Stil große, komplette Datenbanktabellen in den Hauptspeicher laden (und davon dann eine Kopie pro gestarteter Instanz des Programms), oder der Application Server ist zu knapp dimensioniert und braucht ein paar zusätzliche Speicherriegel. Stattdessen bei der Programmierung zu pfuschen ist nicht die Lösung. Man sucht und rechnet so weit wie möglich in internen Tabellen und greift so wenig wie möglich auf die Datenbank zu.Wenn der Hauptspeicher des Application-Server immer swopped, da alle die DB-Daten zuerst einmal dort ablegen, dafür der DB-Server sich die meiste Zeit langweilt, ist das Ergbnis der Verlagerung ja klar.