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 / 545 / 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 / 4913 / 332 / 653 ) »
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 / 2010 / 271 / 425 ) »
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 / 2010 / 271 / 425 ) »
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

1
Antw.
4460
Views
Join mit Left Outer Join
von Rude1986 » 17.01.2021 19:53 • Verfasst in ABAP® für Anfänger
1
Antw.
2041
Views
Laufzeit
von christof » 23.03.2016 13:25 • Verfasst in ABAP® für Anfänger
3
Antw.
2667
Views
Types zur Laufzeit
von tpau » 27.09.2006 18:10 • Verfasst in ABAP® für Anfänger
1
Antw.
2301
Views
Programm Laufzeit Tabelle
von Neroringer » 22.11.2006 16:57 • Verfasst in ABAP® Core
1
Antw.
2978
Views
Konstanten definieren zur Laufzeit
von Kojak » 11.01.2007 13:48 • Verfasst in ABAP Objects®

Über diesen Beitrag


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

Aktuelle Forenbeiträge

LSMW-Problem
vor 6 Tagen von mazu gelöst 5 / 1799
ATC Finding in Smartforms
vor einer Woche von sap_enthusiast 2 / 1824

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.

Aktuelle Forenbeiträge

LSMW-Problem
vor 6 Tagen von mazu gelöst 5 / 1799
ATC Finding in Smartforms
vor einer Woche von sap_enthusiast 2 / 1824

Unbeantwortete Forenbeiträge

SFP/SEGW - Fehler beim Rendering
letzen Monat von Manfred K. 1 / 87620
Benutzerdefinierte Felder PSP
January 2026 von Rabea1103 1 / 140827