Ermittlung der Tabellengrößen in einem System

Werbung
1
Ermittlung der Tabellengrößen
in einem
System
Walldorf, 1. Oktober 2014
Dr. Joachim Jacobitz
2
Aufgabenstellung
Eine Datenbank zum Betrieb eines SAP-Systems enthält gemäß nachfolgender Abbildung vor allem
Indizes und Tabellen. Für die Portierung einer konventionellen Datenbank nach SAP HANA genügt aber
in erster Linie die Kenntnis der Tabellengrößen, weil zum Beispiel die Indizes nicht übertragen werden.
Die Tabellengröße ST in Bytes [B] bestimmt daher zusammen mit der Transferrate r [B/s] und der
Anzahl paralleler Prozesse p Є N+ > 0 im Wesentlichen die Dauer t [s], die für eine Übertragung der
Daten nach SAP HANA benötigt wird.
Datenbankgröße,
zum Beispiel 600 GB
T1
T1
Daten
R
Reserve
M
Metadaten
I
Indexbereich
Vorbelegung (8 kB)
.
.
T
.
.
Tn
T1
Daten
Tabellen
Vorbelegung (8 kB)
Zur Bestimmung der Tabellengröße wurden daher Objekte in Form von Funktionsbausteinen oder SQLSkripten gesucht, die nicht nur bis Release 4.6 D abwärtskompatibel sind, sondern auch alle
Datenbanken unterstützen, die zum Betrieb eines SAP-Systems eingesetzt werden:
1. Oracle (Oracle)
2. DB2, DB4, DB6 (IBM)
3. MS SQL Server (Microsoft)
4. Adabas = maxDB (Software AG)
5. SAPDB (SAP AG)
6. Sybase (SAP AG)
Getestet wurde in den Systemen YI3 (SAP NetWeaver 7.4) mit einem Gesamtbestand von 20490
Tabellen und BWV (SAP EHP 1 for SAP NetWeaver 7.0) mit einem Gesamtbestand von 42235 Tabellen.
Testumfeld und Befragungen
Alle Objekte, die in diesen Systemen gefunden wurden, waren jedoch entweder zu langsam oder zu
ungenau. Die Programmausführung wurde in den meisten Fällen selbst bei vergleichsweise kleinen
Datenbeständen wegen Zeitüberschreitung im Profilparameter abap/timeout abgebrochen. Dabei
erzeugten Module, die zum Beispiel via EXEC SQL oder SQL-Skript direkt in die Datenbank zugreifen,
stets eine Überschreitungen der Laufzeit, während diejenigen Bausteine hinreichend schnell sind, die
Aufzeichnungen des Datenbankmonitors auswerten.
Die Ungenauigkeiten rühren daher, dass die verwendeten Bausteine nicht die tatsächlich vorhandene
Datenbelegung messen, sondern die von der Datenbank verursachten Segmentvorbelegungen
einbeziehen. So werden zum Beispiel für eine Tabelle je nach Datenbank 8 kB angelegt, obwohl diese
leer ist oder nur wenige Einträge enthält. Aus dem gleichen Grund können auch die Längenangaben
des ABAP-Dictionary (SE11) gemäß Zeilenanzahl • Zeilenbreite nicht verwendet werden, weil deren
Ergebnis zum Teil erheblich von der tatsächlichen Belegung der einzelnen Felder abweicht. Zudem wird
3
die Komprimierung von Tabelleninhalten nur unzureichend behandelt, denn in Transaktion
DBACOCKPIT wurden bisher nur Angaben für Oracle gefunden.
Im Einzelnen wurden folgende Programmeinheiten und Transaktionen geprüft, wobei der Platzhalter
<DB> die jeweilige Datenbank angibt, zum Beispiel ORA für Oracle oder ADA für Adabas. Auffallend ist,
dass die meisten Bausteine nicht für alle Datenbankplattformen verfügbar sind.














Funktionsbaustein DB_<DB>_TABLES_HISTORY
Funktionsbaustein SEL_SERVERDBSTATISTICS_<DB>
Funktionsbaustein GET_TABLE_SIZE_<DB>
Funktionsbaustein /SDF/HANA_TABLE_SIZE
Funktionsbaustein DB_STATISTICS_DATA_READ
Funktionsbaustein FB RSDU_ESTIMATE_COUNT
ABAP-Anweisungen ∑ STRLEN(Feld) je Tabelle
ABAP-Anweisungen ∑ (Zeilenanzahl · Zeilenlängen)
C-Funktion dbdd_get_size() im Header dbdd.h
Form SDB_ADD_EXACT_TABLE_SIZE (SAPLSADD)
Form IMPORT_GE_OVERVIEW (RSORADIS)
Transaktion DB02
Transaktion DBACOCKPIT
Transaktion ORA_PERF
In Ergänzung zu den eigenen Prüfungen wurde gleichzeitig eine Vielzahl von SAP-Kollegen mit der Bitte
um Auskunft angeschrieben und befragt, deren Abteilungen in den betroffenen Themenbereich fallen
und daher in der nachfolgend Aufzählung enthalten sind:







DB2 for Linux, Unix & Windows
PA & TS und P & S Application
PI HANA Plat ABAP Platform & VM Tech (AG)
PI HANA Platform & BW Engineering Serv (AG)
PI HANA Plat IMS ABAP
PI HANA Plat IMS BW (AG)
Oracle Platform
Außerdem wurden unter www.service.sap.com/quicksizer ein kostenloser SAP Quick Sizer
gefunden und zwei Hinweise zum Thema Datenbankgröße, die sich vor allem mit der Bestimmung des
zukünftigen HANA-Speicherbedarfs befassen, nämlich:
 1793345 - Sizing for SAP Suite on HANA
 1872170 - Suite on HANA memory sizing report
Lösungsvorschlag
Zusammenfassend könnte die gestellte Aufgabe auf Basis der vorgenommenen Prüfungen und
Befragungen durch folgendes Vorgehen gelöst werden:
1. Die Größenrangfolge aller Tabellen eines SAP-Systems wird mit Hilfe des Funktionsbausteines
DB_STATISTICS_DATA_READ bestimmt, der die Anforderungen an die Ausführungszeit erfüllt und
für alle von SAP unterstützten Datenbanken verfügbar ist. Hier kann überlegt werden, die Auswahl
der Tabellen nicht auf eine bestimmte Anzahl zu beschränken, sondern auf ihr Verhältnis zur
Gesamtgröße aller vorhandenen Tabellen - also nicht die 50 größten Tabellen, sondern diejenigen
Tabellen, deren Einträge zum Beispiel 10 Prozent der Gesamtgröße ausmachen. Damit dieser
Baustein auch brauchbare Ergebnisse liefert, muss der Datenbankmonitor rechtzeitig vor der
Datenübertragung eingeschaltet werden.
4
2. Die Bestimmung der Rangfolge kann für große oder kritische Tabellen derart ergänzt werden, dass
diese Tabellen mittels Funktionsbaustein /SDF/HANA_TABLE_SIZE einzeln auf ihre tatsächliche
Größe s untersucht werden. Deren Verhältnis zur statistischen Belegung s̈ könnte für n Є N+ > 0
untersuchte Tabellen eine mittlere Belegung in Form eines dimensionslosen Belegungsfaktors f̅
liefern, der die Berechnung der Übertragungsdauer in Stunden t [h] gemäß folgender Gleichung
verbessert:
n
f̅ ·St
1
s
−1
̅
[h]
t
=
· 3600 mit f = ∑
r· p
n
s̈
Dieser Baustein ist der einzige, der für die Messung der tatsächlichen Tabellengröße gefunden wurde.
Er ist allerdings nur für Basisstände > 7.0 verfügbar und kein Bestandteil eines Basissystems. Seine
Ergebnisse haben in wenigen Fällen Belegungen s > s̈ ergeben, was vermutlich auf veralteten
Statistikdaten oder einer nicht repräsentativen Zeilenauswahl beruht.
Wegen Verflachung der Strukturen, die von der Datenbank zur Bearbeitung von Anfragen verwendet
werden, könnte in Absprache mit den Kunden zuvor eine Reorganisation der Datenbank durchgeführt
werden. Diese bereinigt den vorhandenen Datenbestand, indem vorhandene Daten zusammengefasst
und gelöschte Daten entfernt werden, womit auch überschüssige Vorbelegungen entfallen. Außerdem
können die Statistiken des Datenbankmonitors auf Betriebssystemebene mit dem Befehl brconnect u / -c -f stats -t all -f allsel,collect,space -p 4 aktualisiert werden, sodass der Baustein
DB_STATISTICS_DATA_READ nur die seitdem vorgenommenen Aufzeichnungen verwendet.
Beispielprogramm
Ein Beispielprogramm, das im Mandanten 001 des Systems BWV angelegt wurde, enthält beide
Funktionen und kann mit Transaktion ZJJ_TAB_PROGRAM gestartet werden. Das Programm ermittelt
die Bruttogröße aller Tabellen in MB, die zum Betrieb eines SAP-Systems in der Datenbank vorhanden
sind. Dieser Wert enthält neben den reinen Anwendungsdaten auch die Segmentvorbelegungen, die
von der Datenbank bei jeder Sicherung automatisch angelegt werden.
5
Der Steuerbereich der Transaktion, dessen Breite durch Ziehen mit der linken Maustaste verändert
werden kann, ist mit den Funktionen zur Tabellenrangfolge und Einzelprüfung stets gleich aufgebaut,
während im Arbeitsbereich die Ergebnisse der beiden Funktionen angezeigt werden. Die Bestimmung
der Tabellengrößen umfasst sowohl transparente als auch Pool- und Clustertabellen, außerdem alle
Basistabellen, die in der Liste rot markiert sind.
Die in der GUI-Oberfläche platzierten Funktionen Back, Exit und Cancel übernehmen die Steuerung
zwischen den einzelnen Bildern des Arbeitsbereiches. Durch Einfachklick auf das Symbol Back wird
jeweils in das Startbild verzweigt. Durch Einfachklick auf das Symbol Exit wird das SAP-Menü samt
Favoritenliste aufgerufen. Durch Einfachklick auf das Symbol Cancel wird im aktuellen Bildschirmbild
verblieben, wobei alle Daten im Arbeitsbereich gelöscht werden.
Bei allen Bildschirmbildern sind die drei ersten Symbole der GUI-Oberfläche immer sichtbar. Sie
beziehen sich nicht auf einzelne Bearbeitungsobjekte, sondern auf globale Funktionen, die während der
gesamten Ausführungszeit zur Verfügung stehen:
1. GUI-Symbol Control Area für das Ein- und Ausblenden des Steuerbereichs
2. GUI-Symbol Information mit einer Kurzbeschreibung der wichtigsten Funktionen
3. GUI-Symbol Internet für den Aufruf einer Internet-Seite zum Thema SAP HANA
Tabellenrangfolge
Nach Eingabe einer Tabellenanzahl n > 0, die im Feld Number of tables mit dem Wert 100 vorbelegt ist,
wird eine Liste der Tabellen erstellt, sobald die Funktion Ranking (F8) in der GUI-Oberfläche des SAPFensters ausgelöst wurde. Diese Liste ist absteigend nach Bruttogrößen sortiert und darin enthaltene
Tabellen, die für SLT geeignet sind, werden in der Listenspalte slt grün gekennzeichnet. Falls nach Start
der Transaktion keine Eingaben vorgenommen werden, erscheint auf dem Bildschirm eine Liste mit den
100 größten Tabellen eines SAP-Systems.
6
Sicherung ausgewählter Tabellen
Einzelne Zeilen oder ganze Blöcke können ausgewählt werden, indem gleichzeitig die Tasten <Strg>
oder <> gedrückt und die erste Spalte einer Tabellenzeile durch einen Einfachklick mit der linken
Maustaste markiert werden. Nach Auslösen der Funktion Log in der GUI-Oberfläche des SAP-Fensters
werden die Namen der ausgewählten Tabellen in eine Datei mit der Bezeichnung SLT_TABLES.txt auf
dem ABAP-Applikationsrechner abgelegt, sofern sie für SLT geeignet sind. Ausgewählte Tabellen ohne
SLT-Eignung, erkennbar an der roten Markierung, werden in einem Dialogfenster als fehlerhaft
gemeldet, nach deren Bestätigung die Protokollierung fortgesetzt wird.
Das Verzeichnis wird automatisch ermittelt und danach zusammen mit dem Tabellennamen im Feld File
description angezeigt. Die Datei ist zu jedem Zeitpunkt nur ein Mal vorhanden, weil sie bei erneuter
Ablage mit den Daten der aktuellen Auswahl überschrieben wird. Die ersten vier Zeilen enthalten die
nachfolgenden Verwaltungseinträge, gefolgt von den Größenangaben und den Namen der markierten
Tabellen, jeweils getrennt durch eine Leerzeile:
# Tables to be used by DMO_SLT
# Generated by transaction ZJJ_TAB_PROGRAM
# Timestamp dd.mm.yyyy hh:mm:ss h
# User <sy-uname>
Ihre Inhalte können nach Start der Transaktion AL11 überprüft werden, wenn im Startbild der
Transaktion ein Doppelklick auf die Zeile mit dem Eintrag DIR_PUT und im Folgebild ein Doppelklick
auf die Zeile mit dem Eintrag Filename = bin abgesetzt werden. Durch Auslösen der Funktion Find in
der GUI-Oberfläche des SAP-Fensters und Eingabe des Suchbegriffs SLT_TABLES.txt wird in die
betroffene Zeile verzweigt, die wiederum einen Doppelklick mit der linken Maustaste erfordert, um die
gewünschten Inhalte anzuzeigen.
Berechnung eines Belegungsfaktors
Die Belegungen s/s̈ werden berechnet, wenn die GUI-Funktion Occupancy rate in der Oberfläche des
SAP-Fensters ausgelöst wird, nachdem zuvor bestimmte Tabellen mit Hilfe der Tasten <Strg> oder
<> und einem Mausklick markiert wurden. Die Tabellenauswahl darf aus Laufzeitgründen eine Anzahl
> 100 nicht überschreiten, die in dieser Größenordnung auch durchgeführt würde, wenn keine Auswahl
erfolgt wäre.
Der Belegungsfaktor f̅ als Durchschnitt aus n Einzelbelegungen wird samt den Namen und Größen der
geprüften Tabellen in eine Datei mit Namen SLT_SIZES.txt auf dem ABAP-Applikationsrechner
abgelegt. Analog zur Sicherung der Rangfolgen wird der Dateipfad automatisch ermittelt und die Datei
nach erneutem Auslösen der GUI-Funktion Occupancy rate überschrieben. Deren Inhalt kann wie bei
der Rangfolge durch Aufruf der Transaktion AL11 angezeigt werden kann.
Da die Berechnung wegen der Einzelzugriffe auf die Datenbank zeitaufwendig ist, wird die Bearbeitung
im Hintergrund durchgeführt. Sobald die Verarbeitung im Hintergrund abgeschlossen wurde, erhält
derjenige Benutzer eine Systemnachricht, der die Transaktion gestartet hat. Zu diesem Zeitpunkt ist
auch die Datei SLT_SIZES.txt verfügbar, die einen Belegungsgrad für jede Tabelle und davor die
Durchschnittsbelegung für die vorgenommene Auswahl enthält.
Die Güte des Belegungsfaktors f̅ könnte erhöht werden, wenn die Berechnung statt einer individuellen
Auswahl eine Stichprobe verwenden würde, deren Umfang eine gewünschte Sicherheit z für die
Gesamtgröße ST erfüllt. Gemäß den beiden Vorschlägen zu Beginn dieses Dokumentes würde eine
derartige Lösung genau diejenigen Tabellen einbeziehen, deren Größen den Belegungsfaktor mit einer
Wahrscheinlichkeit von x Є R+ Prozent bestätigen, stets bezogen auf die Gesamtgröße ST aller
Tabellen. Umgekehrt könnte die Wahrscheinlichkeit bestimmt werden, die für die Genauigkeit des
Belegungsfaktors hinsichtlich ST gilt, wenn eine Auswahl A < ST oder A << ST vorgenommen wurde.
7
Unter den Annahmen, dass die Tabellenanzahl N endlich ist und die Streuung der Verhältnisse s/s̈ einer
Normalverteilung entspricht, könnte der Umfang der Stichprobe n < N bei einer absoluten Genauigkeit
g = gr * f̅ und bekannter Varianz  berechnet werden zu:
𝑛
n>
N · z 2 · σ2
1
mit σ2 =
∑( s𝑖 − s̅ )2
2
2
2
(N − 1) · g + 𝑧 · σ
n−1
Dabei wird die relative Genauigkeit meistens als Prozentwert angegeben mit der Vorgabe, dass der in
der Stichprobe ermittelte Wert höchsten um | gr | vom wirklichen Wert der Grundgesamtheit abweichen
darf. Die Aussagewahrscheinlichkeit der Stichprobe wird durch den Parameter z bestimmt, der als
genormter Wert die Form einer mathematischen Konstante besitzt, die tabellarisch abgelegt ist.
Größenbestimmung einzelner Tabellen
Ein Doppelklick mit der linken Maustaste auf eine einzelne Zeile der Rangliste veranlasst, dass neben
der Bruttogröße der ausgewählten Tabelle zusätzlich deren Nettowert in einem neuen Arbeitsbereich
angezeigt wird, also nur die eigentlichen Anwenderdaten ohne jede Segmentvorbelegung. Dabei wird
die Belegung der Tabelle als Verhältnis f = s/s̈ im Feld Rate angezeigt.
Diese Art der Anzeige wird auch ausgeführt, wenn im Steuerbereich des SAP-Fensters ein Doppelklick
auf den Knoten Table abgesetzt wird. Danach muss das Feld Table name mit einer Eingabe versehen
und die Funktion Single size (F9) in der GUI-Oberfläche ausgelöst werden. Von hier aus können auch
die Struktur (SE11) und Inhalte (SE16) einer einzelnen Tabelle angezeigt werden.
Testvergleich
Neben dem Funktionsbaustein /SDF/HANA_DB_SIZE wurden weitere Objekte getestet, die ebenfalls
die tatsächliche Belegung einzelner Tabellen oder deren zukünftige Größe in einer HANA-Datenbank
zur Verfügung stellen:
8
 Die Tabelle DBSTATTORA liefert gemäß SAP-Hinweis 554031 für SAP-Systeme mit einer OracleDatenbank die statistische Tabellengröße samt Segmentvorbelegung durch Addition der Felder
OCCTB + HTLMB, während die Felder NROWS * AROWL + HTLMB die tatsächliche Belegung ergeben.
 Der Funktionsbaustein /SDF/HANA_DB_SIZE gibt im Feld DATA_SIZE_SAMPLED die tatsächliche
Größe einer einzelnen Tabelle mittels SQL-Skript aus, wobei der Laufzeit wegen nur signifikante
Tabelleneinträge berücksichtigt werden.
 Der Report /SDF/HDB_SIZING ist Objekt des SAP-Hinweises 1872170 und dient ausschließlich der
Bestimmung der Tabellengröße in einer HANA-Datenbank. Er berechnet die zukünftige Belegung
anhand einer Stichprobe von höchstens 1000 Tabellenzeilen.
 Der Report ZJJ_TAB_REPORT berechnet die ABAP-Größe einer einzelnen Tabelle durch Addition
der Einzelfelder. Ungenauigkeiten entstehen bei numerischen Feldern, deren Größe nur pauschal
verfügbar ist und zudem von der Notation der jeweiligen Datenbank abhängt.
Zur Messung der Inhalte wurde die ABAP-Nachrichtentabelle T100 ausgewählt, die vor allem im Feld
Text eine breite Streuung aufweist. Die Prüfungen wurden am 25. August 2014 im Mandanten 001 des
SAP-Systems BWV durchgeführt, dem als Speichermedium eine Oracle-Datenbank der Version
11.2.0.4.0 dient. Die nachfolgende Aufstellung enthält die Ergebnisse der einzelnen Objekte in MB:
Objekt
Tabelle
Funktionsbaustein
Report
Report
Bezeichnung
DBSTATTORA
/SDF/HANA_DB_SIZE
/SDF/HDB_SIZING
ZJJ_T100_REPORT
Bruttogröße
207,17
207,17
-
Nettogröße
130,92
114,88
223,58
HANA-Größe
48,78
-
Da diese Aufstellung große Unterschiede zu Report ZJJ_TAB_REPORT Report aufweist, wurde eine
zweite Messung mit der größten Tabelle /BI0/AFIGL_O0200 in diesem System durchgeführt, die
folgende MB-Werte lieferte:
Objekt
Tabelle
Funktionsbaustein
Report
Report
Bezeichnung
DBSTATTORA
/SDF/HANA_DB_SIZE
/SDF/HDB_SIZING
ZJJ_T100_REPORT
Bruttogröße
222 067,66
222 067,66
-
Nettogröße
189 397,87
142 111,08
297 743,06
HANA-Größe
40 018,23
-
Wie in der ersten Aufstellung hält sich auch hier die Abweichung zwischen der Statistik der OracleTabelle DBSTATTORA und dem verwendeten Funktionsbaustein /SDF/HANA_DB_SIZE in Grenzen, so
dass die in Transaktion ZJJ_TAB_PROGRAM erzielten Resultate eine hinreichend genaue Bestimmung
der tatsächlichen Tabellenbelegung und der damit verbundenen Dauer der Datenübertragung erwarten
lassen.
Zusammenfassung
Obwohl für die Bestimmung von Tabellen- und Indexgrößen eine Vielzahl an Objekten verfügbar ist,
fehlt genau der Baustein, der für die Lösung der Aufgabenstellung gesucht wurde. Gründe hierfür sind
im Wesentlichen die folgenden:




Einbeziehung von Segmentvorbelegungen
Fehlende Verfügbarkeit für alle Datenbanken
Unzureichende Formate von Datenobjekten
Laufzeitverhalten bei großen Datenmengen
Daher wird in Transaktion ZJJ_TAB_PROGRAM zunächst die Bruttogröße der Tabellen gemessen, mit
der die Obergrenze der zu übertragenden Datenmenge bestimmt wird. Durch zusätzliche Prüfungen
einzelner Tabellen und Berechnung des durchschnittlichen Belegungsfaktors kann gleichzeitig die
zugehörige Untergrenze geschätzt werden. Diese Werte bestimmen wiederum ein Intervall, das für eine
9
durchzuführende Datenübertragung nach SAP HANA mit hinreichender Wahrscheinlichkeit weder übernoch unterschritten wird.
Alle Entwicklungsobjekte, die im Rahmen dieses Projektes zur Umsetzung der vorgegebenen Aufgabe
angelegt wurden, können nach Start der Transaktion SE80 im Mandanten 001 des SAP-System BWV
angezeigt und bearbeitet werden, wenn als Objekt das Paket ZJJ eingegeben wird. Zwecks Transport
in andere SAP-Systeme wurde der Auftrag BWVK900028 eröffnet, der in Transaktion SE09 unter dem
Benutzer SAPSUPPORT abgelegt ist.
Herunterladen