Datenbanklast klein halten 

Im Gegensatz zu Applikationsservern und die Präsentationsservern ist der Datenbankserver eine nur einmal im System vorhandene Ressource. Daher sollte man versuchen, möglichst viel Last von der Datenbank zu nehmen. Folgende Mittel stehen dafür zur Verfügung:

Tabellen auf dem Applikationsserver puffern

Durch die Pufferung von Daten im Tabellenpuffer des Applikationsservers kann die Zugriffszeit auf Daten erheblich reduziert werden. Einen Einzelsatz aus der Tabelle T001 von der Datenbank zu lesen kann zwischen 8 - 600 Millisekunden dauern, während der Zugriff aus dem Tabellenpuffer in einer Zeitspanne zwischen 0.2 - 1 Millisekunden erfolgt.

Ob eine Tabelle gepuffert wird oder nicht, ist in den technischen Einstellungen der Tabelle im ABAP Dictionary definiert. Es gibt drei Pufferungsarten:

Bei einem lesenden Zugriff auf gepufferte Tabellen geschieht folgendes:

  1. Ein ABAP-Programm fordert Daten aus einer gepufferten Tabellen an.
  2. Der ABAP-Prozessor interpretiert die Open SQL Anweisung. Falls die Tabelle im ABAP Dictionary als gepufferte Tabellen definiert ist, prüft der ABAP-Prozessor im lokalen Puffer des Applikationsserver nach, ob die Tabelle (oder Teile davon) sich bereits im Puffer befinden.
  3. Falls die Tabelle noch nicht im Puffer vorhanden ist, wird die Anfrage an die Datenbank weitergereicht. Ansonsten werden die gewünschten Daten dem Programm übergeben.
  4. Der Datenbankserver übergibt die Daten an den Applikationsserver, wo die Daten in den Tabellenpuffer gestellt werden.
  5. Die Daten werden an das Programm übergeben

Bei einem ändernden Zugriff auf eine Datenbanktabelle geschieht folgendes:

  1. Die Datenbanktabelle wird geändert und gleichzeitig der Puffer des Applikationsservers aktualisiert. Von der Datenbankschnittstelle wird Die Update-Anweisung in der Tabelle DDLOG protokolliert. Falls mehrere Applikationsserver verwendet werden, wird der Puffer der anderen Applikationsserver nicht sofort aktualisiert.
  2. Jeder Applikationsserver liest periodisch den Inhalt der Tabelle DDLOG, um gegebenfalls den entsprechenden Inhalt seines Puffers zu löschen. Dabei hängt die Granularität von der Pufferungsart ab. Die Tabellenpuffer in einem verteilten System werdenin der Regel alle 60 sec (Parameter: rsdisp/bufreftime) synchronisiert.
  3. Innerhalb dieser Zeitspanne lesen Anwender auf nicht aktualisierten Applikationsservern alte Daten. Erst nach der Puffersynchronisation werden die Daten als ungültig markiert und bei einem erneuten Zugriff von der Datenbank gelesen.

Folgende Tabellen sollten gepuffert werden:

Wenn eine Tabelle gepuffert wird, sollte darauf geachtet werden, keine Open SQL-Anweisungen zu verwenden, welche die Pufferung umgehen.

Folgende SELECT-Anweisungen umgehen die Pufferung:

Weiterhin umgehen alle NATIVE SQL-Anweisungen die Pufferung.

Wiederholtes Lesen von Daten vermeiden

Die Vermeidung von wiederholtem Lesen der gleichen Daten hält nicht nur die Anzahl der Zugriffe klein, sondern nimmt auch Last von der Datenbank. Weiterhin wird auf Datenbanktabellen mit Ausnahme von Oracle ein 'Dirty Read' durchgeführt. Dadurch kann es vorkommen, daß bei einem zweiten Lesezugriff andere Daten gelesen werden, als beim ersten Lesezugriff. Um konsistente Daten im Programm zu haben, sollte nur einmal gelesen und die Daten in einer internen Tabelle zwischengespeichert werden.

Daten im ABAP-Programm sortieren

Der die ORDER BY-Klausel der SELECT-Anweisung wird vom Datenbanksystem nicht notwendigerweise optimal mit dem richtigen Index ausgeführt und führt daher oft zu hohen Laufzeitkosten. Nur wenn die Sortierung der Datenbank auch den zum Lesen verwendeten Index benutzt, sollte ORDER BY eingesetzt werden. Den verwendeten Index findet man mit dem Werkzeug SQL Trace des Performance Trace in der ABAP Workbench. Ansonsten ist es günstiger, die Datenbanktabelle in eine interne Tabelle oder einen Extrakt zu laden und diese im ABAP-Programm mit der Anweisung SORT zu sortieren.

Logische Datenbanken einsetzen

SAP liefert für alle Anwendungen logische Datenbanken aus. Dies sind ABAP-Programme, welche die Open SQL-Anweisungen von den Anwendungsprogrammen entkoppeln. Logischen Datenbanken sind für performante Datenbankzugriffe optimiert. Wichtig ist es aber, auch die richtige logische Datenbank einzusetzen. Die Struktur oder Teile Struktur der logischen Datenbank sollte die Hierarchie der zu lesenden Daten wiedergeben. Ansonsten können auch negative Effekte für die Performance auftreten. Wenn beispielsweise nur die Daten einer Tabelle gelesen werden sollen, die in der Hierarchie der logischen Datenbank weit liegen, sollte besser direkt mit der SELECT-Anweisung gelesen werden, da die logische Datenbank zumindest auch die Schlüsselfelder aller ihrer darüberliegenden Knoten liest.