Performance beim Löschen in interner Tabelle mit Ranges

Alles rund um die Sprache ABAP®: Funktionsbausteine, Listen, ALV
8 Beiträge • Seite 1 von 1
8 Beiträge Seite 1 von 1

Performance beim Löschen in interner Tabelle mit Ranges

Beitrag von ernst (ForumUser / 28 / 0 / 0 ) »
Hi an alle,

ich lösche aus einer grossen internen Tabelle Einträge mit Hilfe einer Range-Tabelle:

delete int_tab where feld not in range_tab.

Beide Tabelle sind gross (im Moment 400.000 in der int und 10.000 in der range).

Der Delete dauert sehr lange - die grosse Range-Tabelle ist hier sicher das Problem - ich trau mich gar nicht mir vorzustellen, in was für ein Monsterstatement das zur Laufzeit aufgelöst wird.

Gibt's irgendwelche Ideen, wie man ein solches Löschen clever performanter machen kann?

Grüsse,
Ernst

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


Beitrag von ereglam (Top Expert / 1829 / 2 / 7 ) »
probier's mal aus die SIGN umzutauschen (I->E, E->I)und anschliessend per WHERE IN range zu suchen.
Gruß
Ereglam


May the Force be with your code
|| .| |.|| | .... . ..|. ||| .|. |.|. . |... . .|| .. | .... |.|| ||| ..| .|. |.|. ||| |.. .

Beitrag von Gast ( / / 0 / 3 ) »
ereglam hat geschrieben:probier's mal aus die SIGN umzutauschen (I->E, E->I)und anschliessend per WHERE IN range zu suchen.
Hilft mit Sicherheit genau gar nichts.
Warum ist denn die Range so groß?
Was stehen da für Einträge drin? (Hoffentlich keine Duplikate)
Sind Range und/oder itab vielleicht sowieso schon nach dem Feld sortiert?

Beitrag von ernst (ForumUser / 28 / 0 / 0 ) »
Der Report erstellt Statistiken über relativ grosse Datenbestände und bei der Datenbeschaffung muss ich eben eine entsprechend grosse Menge herausfiltern - deshalb die grosse Range-Tabelle.

Die Range Tabelle ist von Duplikaten schon befreit. Beide Tabellen sind sortiert nach dem Schlüssel - die Datentabelle noch vom SELECT und die Range-Tabelle vom SORT und DELETE ADJACENT.
Aber die Sortierung hilft in diesem Falle nicht - oder doch?

Beitrag von Gast ( / / 0 / 3 ) »
ernst hat geschrieben:Der Report erstellt Statistiken über relativ grosse Datenbestände und bei der Datenbeschaffung muss ich eben eine entsprechend grosse Menge herausfiltern - deshalb die grosse Range-Tabelle.

Die Range Tabelle ist von Duplikaten schon befreit. Beide Tabellen sind sortiert nach dem Schlüssel - die Datentabelle noch vom SELECT und die Range-Tabelle vom SORT und DELETE ADJACENT.
Aber die Sortierung hilft in diesem Falle nicht - oder doch?
Bei einem SELECT ohne ORDER BY ist die Reihenfolge zufällig.
Sind in der Range nur Einzelwerte (SIGN 'I' OPTION 'EQ')?

Beitrag von ernst (ForumUser / 28 / 0 / 0 ) »
Beide Tabellen liegen sortiert vor. In der Range Tabelle sind nur Einzelwerte, keine Intervalle.

Ich werd's mal mit einem Loop über die Rangetabelle und einem Löschen in der Datentabelle probieren.

Beitrag von Gast ( / / 0 / 3 ) »
Versuch doch einfach aus den Einzelwerten, Ranges zu erstellen.

Wenn ein Loop, dann über die Range-Tabelle mit "read binary search" auf die Datentabelle.

Beitrag von ewx (Top Expert / 4787 / 295 / 629 ) »
Hi Ernst,

also ich könnte folgendes vorschlagen:
1. du probierst, deine interne Tabelle in kleineren Happen zu lesen und zu verarbeiten (vielleicht jeweils 50.000 Einträge?)
2. Du baust eine Indextabelle auf, die wirklich nur die Felder aus der itab enthält, die nötig sind (Schlüsselfelder, Felder nach der du mit der Rangetab zugreifst)
3. Da ja beide Tabellen sortiert sind: Loop über die itab mit ASSIGNING und dann READ RANGETAB BINARY SEARCH. If Sy-Subrc = 0. Delete itab.

Da bei 400.000 Einträgen Hauptspeicher ziemlich knapp werden dürfte, würde ich auf jeden Fall empfehlen, die itab zu optimieren (Siehe Punkt 2).

Vielleicht macht es auch sinn, einen anderen Tabellentyp zu nehmen (hashed oderwasauchimmerdakennichmichzuwenigaus...).

Auf jeden fall würde ich verschiedene Sachen ausprobieren und ein paar "get-run-time"-Befehle einbauen.

Vielleicht hilft dir auch der Hinweis, dass du dir im Debugger verschiedene Sachen anschauen kannst:
Menü: Springen - Weitere Bilder - Speicherverbrauch
Menü: Einstellungen - Tabellenspeicheranzeige an/aus

Gruß,
Enno

Seite 1 von 1

Vergleichbare Themen

14
Antw.
9837
Views
Löschen aus interner Tabelle
von Beginner014 » 21.11.2014 09:26 • Verfasst in ABAP® für Anfänger
1
Antw.
2473
Views
daten aus interner tabelle lòschen
von slim » 12.06.2007 14:54 • Verfasst in ABAP® Core
17
Antw.
4537
Views
Sätze aus interner Tabelle löschen
von woddstock99 » 31.01.2019 18:22 • Verfasst in ABAP® für Anfänger
6
Antw.
1839
Views
DB aus interner Tabelle ohne Kopfzeile löschen
von kibani » 05.03.2020 09:15 • Verfasst in ABAP® für Anfänger
7
Antw.
575
Views
Abfrage von Daten im Bezug auf RANGES Tabelle
von abap_frischling » 21.02.2022 23:26 • 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.