Pufferung einer Tabelle

Aus SAP-Wiki
Zur Navigation springenZur Suche springen

Kleine Tabellen mit einigen Dutzend oder höchstens Hunderten Datensätzen, können auf der Datenbank gepuffert werden. Da in diesem Fall der Zugriff über den Arbeitsspeichers des Applikationsservers erfolgt, ist der Zugriff wesentlich schneller als der Zugriff über die Datenbank.

Um den Arbeitsspeicher des Applikationsservers nicht unnötig zu belasten, sollten nicht zu große Tabelle gepuffert werden. Da die Tabellen auf dem Applikationsserver zwar in kurzen Abständen von der Datenbank nachgelesen bzw. aktualisiert werden, sind die Daten möglicherweise nicht mehr aktuell. Für die Datenpufferung eignen sich daher vor allem Customizing-Tabellen, auf die häufig zugegriffen wird, sich mit den Daten aber selten ändert.

Es gibt drei Arten der Pufferung:

  • Einzelsatz-Pufferung
  • Vollständige Pufferung
  • Generische Pufferung

Einzelsatz-Pufferung

Bei der Einzelsatz-Pufferung werden nur die Sätze einer Tabelle in den Puffer geladen, auf die tatsächlich zugegriffen wird. Diese Art der Pufferung spart gegenüber vollständiger Pufferung Speicherplatz im Puffer. Der Verwaltungsaufwand ist aber höher und es sind zum Laden wesentlich mehr Datenbankzugriffe notwendig. Wann sollte Einzelsatz-Pufferung gewählt werden? Bei großen Tabellen, auf die häufig satzweise (mittels SELECT SINGLE ...) zugegriffen wird. Der Umfang der Sätze, auf die zugegriffen wird, sollte zwischen 100-200 KB liegen. Bei vergleichsweise kleinen Tabellen, bei denen die Zugriffsbreite groß ist, ist vollständige Pufferung in der Regel günstiger. Denn zum Laden einer solchen Tabelle ist bei vollständiger Pufferung nur ein Datenbank-Zugriff erforderlich, während bei Einzelsatz-Pufferung sehr viele Datenbank- Zugriffe notwendig sind.

Vollständige Pufferung

Bei der vollständigen Pufferung befindet sich die gepufferte Tabelle entweder ganz oder gar nicht im Puffer. Beim lesenden Zugriff auf einen Satz werden sämtliche Sätze der Tabelle in den Puffer übertragen. Wann sollte vollständige Pufferung gewählt werden? Bei Tabellen mit einem Umfang bis zu 30 KB. Wird auf eine Tabelle häufig lesend zugegriffen, kann dieser Wert auch überschritten werden.Bei größeren Tabellen, auf die häufig Mengenzugriffe erfolgen. Gelingt es jedoch, für diese Mengenzugriffe eine sehr selektive WHERE- Bedingung über einen Datenbankindex zu formulieren, kann es günstiger sein, auf vollständige Pufferung zu verzichten. Bei Tabellen, bei denen Zugriffe auf nicht vorhandene Daten überwiegen. Da sich die Tabelle vollständig im Puffer befindet, kann sehr schnell entschieden werden, ob ein Satz zu einem Schlüsseleintrag existiert.

Generisch gepufferte Tabelle

Beim lesenden Zugriff auf einen Satz einer generisch gepufferten Tabelle werden alle Sätze in den Puffer geladen, die mit diesem in einem linksbündigen Teil des Schlüssels (generischer Bereich) übereinstimmen. Bei Wahl dieser Pufferungsart muß der generische Bereich durch die Angabe einer Anzahl n von Schlüsselfeldern bestimmt werden. Die ersten n Schlüsselfelder der Tabelle bilden dann den generischen Schlüssel. Die einzugebende Anzahl von Schlüsselfeldern muß damit zwischen 1 und der Schlüsselfeldanzahl-1 liegen. Zum Beispiel sind für eine Tabelle mit 6 Schlüsselfeldern nur Werte zwischen 1 und 5 zulässig. Das Mandantenfeld wird dabei mitgezählt. Wann sollte generische Pufferung gewählt werden? Eine Tabelle sollte generisch gepuffert werden, falls in der Regel nur bestimmte Bereiche der Tabelle benötigt werden. Die einzelnen generischen Bereiche werden wie eigenständige Tabellen behandelt, die vollständig gepuffert werden. Beachten Sie deshalb bitte auch den Text zur vollständigen Pufferung. Der generische Schlüsselbereich sollte so gewählt werden, daß die generischen Bereiche nicht zu klein werden und damit nicht zu viele generische Bereiche entstehen. Gibt es pro generischen Bereich nur wenige Sätze, ist es effizienter, die Tabelle vollständig zu puffern. Generisches Puffern ist nur sinnvoll, wenn auf die Tabelle mit voll spezifiziertem generischen Schlüssel zugegriffen wird. Ist bei einem Zugriff ein Feld des generischen Schlüssels nicht mit einem Wert versorgt, so wird am Puffer vorbei direkt von der Datenbank gelesen.