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 / 4849 / 313 / 642 ) »
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.
10402
Views
Löschen aus interner Tabelle
von Beginner014 » 21.11.2014 09:26 • Verfasst in ABAP® für Anfänger
17
Antw.
5088
Views
Sätze aus interner Tabelle löschen
von woddstock99 » 31.01.2019 18:22 • Verfasst in ABAP® für Anfänger
1
Antw.
2642
Views
daten aus interner tabelle lòschen
von slim » 12.06.2007 14:54 • Verfasst in ABAP® Core
6
Antw.
2172
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.
1261
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

Aktuelle Forenbeiträge

Trennen Strasse und Hausnummer
vor 10 Stunden von msfox 18 / 10982
Dialog-Container mit Toolbar/Status
vor 13 Stunden von black_adept gelöst 27 / 4100
IT0024 Qualifikationen CP-ID
vor 15 Stunden von ArjenR 1 / 106

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

Trennen Strasse und Hausnummer
vor 10 Stunden von msfox 18 / 10982
Dialog-Container mit Toolbar/Status
vor 13 Stunden von black_adept gelöst 27 / 4100
IT0024 Qualifikationen CP-ID
vor 15 Stunden von ArjenR 1 / 106

Unbeantwortete Forenbeiträge

IT0024 Qualifikationen CP-ID
vor 15 Stunden von ArjenR 1 / 106
aRFC im OO-Kontext
vor 4 Wochen von ralf.wenzel 1 / 3041
Hilfe bei SWEC/SWE2
September 2024 von retsch 1 / 9632