Laufzeit von einem inner join messen??

Getting started ... Alles für einen gelungenen Start.
6 Beiträge • Seite 1 von 1
6 Beiträge Seite 1 von 1

Laufzeit von einem inner join messen??

Beitrag von L0w-RiDer (Expert / 535 / 83 / 2 ) »
Hallo,

ich habe eine Frage und zwar ist es im Debugger oder andersweitig möglich, die Laufzeit eines Inner Joins zu messen? Falls ja, wie wäre das möglich? Ich möchte schauen ob es Alternativen zum Inner Join gibt, die eventuell schneller wären, da dieser Inner Join mit For all Entries extrem langsam ist.

Nebenfrage: Was ist eine schnellere Alternative zu einem inner join über 2 Tabellen mit FOR ALL Entries ?? Ich hab gelesen eventuell wäre ein Outter Join besser. Meinungen dazu ?

Vielen Dank im Voraus.

Gruß

L0w-Rider

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Re: Laufzeit von einem inner join messen??

Beitrag von ewx (Top Expert / 4786 / 294 / 629 ) »
Laufzeitmessung (Transaktion SAT) anschmeißen.
SQL-Trace gibt evtl. auch Aufschlüsse.
Einfach andere Varianten probieren - da gibt es kein Patentrezept.
Sicherstellen, dass du immer die gleiche Ergebnismenge hast... ;)

Re: Laufzeit von einem inner join messen??

Beitrag von nickname8 (Specialist / 134 / 17 / 19 ) »
Vergiss nicht die duplikate in der Treiber-Tabelle zu entfernen. Könnte manchmal helfen.

Re: Laufzeit von einem inner join messen??

Beitrag von DeathAndPain (Top Expert / 1802 / 214 / 396 ) »
Im einfachsten Fall nutzt Du einfach den Befehl GET RUN TIME (siehe dessen F1-Doku) vor und nach Deinem SELECT. Damit kannst Du verschiedene Zugriffsalternativen ausprobieren und die Zeiten vergleichen. Achte aber darauf, mehrfach zu messen, da die Ausführungszeiten stark schwanken. Außerdem stehst Du an dieser Stelle vor der Heisenbergschen Unschärferelation, derzufolge sich ein System dadurch verändert, dass man es beobachtet. In diesem Fall: Bei der ersten Ausführung füllt die Datenbank ihre Caches, so dass jede weitere Messung eine deutlich kürzere Laufzeit ergeben wird, da vieles eben nicht mehr von der Platte gelesen werden muss.

FOR ALL ENTRIES IN ist eigentlich eine sehr performante Zugriffsmethode und meistens die der Wahl. Wenn sie bei Dir lahm läuft, prüfe, ob Du über vernünftige Datenbankindizes zugreifst. Außerdem gibt es verschiedene Systemparameter, die festlegen, wie das System den FOR ALL ENTRIES IN datenbankseitig umsetzt. Diese müssen passend für Deine Datenbank gesetzt sein, sonst geht es auch auf die Performance. Das würde ich an Deiner Stelle prüfen. Gibt da diverse SAP-Hinweise, die jetzt herauszusuchen ich zu faul bin. Nur ein Beispiel: In aller Regel setzt FOR ALL ENTRIES IN einen SELECT datenbankseitig in einen IN-Operator um, hinter dem die einzelnen Werte aufgezählt werden. Werden es zu viele Werte, dann wendet der Datenbankoptimierer seine Indizes nicht mehr an. Deshalb muss SAP die Anfrage in mehrere einzelne SELECTs zerlegen, von denen jeder gerade so viele Werte im IN-Operator zu stehen hat, dass die Datenbank noch indexgestützt zugreift. Wie viele das sind, hängt von der Datenbank ab und wird in solch Systemparameter festgelegt. Oracle soll da wohl nur fünf Werte akzeptieren, wohingegen der Parameter bei Sybase auf 128 stehen soll.

Re: Laufzeit von einem inner join messen??

Beitrag von nickname8 (Specialist / 134 / 17 / 19 ) »
Kurze weitere Info aus der ABAP-Hilfe, die nicht vergessen werden sollte:

Da Join-Ausdrücke die SAP-Pufferung umgehen, sollten sie nicht auf gepufferte Tabellen angewendet werden. Statt dessen kann in solchen Fällen immer noch die Verwendung des Zusatzes FOR ALL ENTRIES vorteilhaft sein, der auf den Tabellenpuffer zugreifen kann.

Re: Laufzeit von einem inner join messen??

Beitrag von DeathAndPain (Top Expert / 1802 / 214 / 396 ) »
Da Join-Ausdrücke die SAP-Pufferung umgehen, sollten sie nicht auf gepufferte Tabellen angewendet werden.
Diese Aussage ist nicht falsch, aber ich halte sie für überbewertet. Gepufferte Tabellen sind in aller Regel Customizingtabellen mit überschaubar vielen Einträgen. Wenn ich solch Tabelle in einem Programm öfter brauche, dann lese ich sie komplett in eine sortierte interne Puffertabelle ein. Der Zugriff darauf ist auf jeden Fall noch schneller als jede automatische Tabellenpufferung (zumal ich mir da einen beliebigen, für mein Programm optimalen Suchschlüssel festlegen kann). Ob der eine Lesezugriff beim Füllen der Puffertabelle (in der ich womöglich gar nicht alle Einträge aus der Datenbank brauche, sondern eine für mein Programm passende Vorfilterung vornehme) den Puffer umgeht oder nicht, ist performancetechnisch schnuppe.

Seite 1 von 1

Vergleichbare Themen

7
Antw.
7173
Views
Laufzeit messen und ausgeben
von gse » 05.12.2005 13:50 • Verfasst in ABAP® Core
1
Antw.
774
Views
Join mit Left Outer Join
von Rude1986 » 17.01.2021 19:53 • Verfasst in ABAP® für Anfänger
1
Antw.
1162
Views
Laufzeit
von christof » 23.03.2016 13:25 • Verfasst in ABAP® für Anfänger
2
Antw.
1532
Views
Frage zur Laufzeit
von Achimbsp » 26.10.2005 18:09 • Verfasst in ABAP® Core
3
Antw.
1923
Views
Types zur Laufzeit
von tpau » 27.09.2006 18:10 • Verfasst in ABAP® für Anfänger

Über diesen Beitrag


Unterstütze die Community und teile den Beitrag für mehr Leser und Austausch

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.