Anfang des Inhaltsbereichs

Hintergrunddokumentation Partieller Tabellenpuffer  Dokument im Navigationsbaum lokalisieren

Im partiellen Tabellenpuffer TABLP werden einzelne Sätze von satzweise gepufferten Tabellen verwaltet.

Technische Realisierung und Pufferzugriff

Der partielle Tabellenpuffer besteht aus einer zentralen Verwaltungsstruktur, einem Tabellenverzeichnis und dem Datenbereich. Der Datenbereich ist in Rahmen fester Größe (frames) organisiert (standardmäßig 4kB).

Die Tabellennamen sind im Verzeichnis alphabetisch sortiert. Die Tabelleneinträge liegen, ebenfalls sortiert, in den zugehörigen Rahmen des Datenbereichs.

Bei einem Pufferzugriff wird durch binäre Suche zunächst der Eintrag im Tabellenverzeichnis, anschließend der betreffende Rahmen und schließlich der gesuchte Satz innerhalb des Rahmens ermittelt.

Wenn neue Daten unter Beibehaltung der Sortierreihenfolge eingefügt werden, können Rahmen im Datenbereich überlaufen. Solche überlaufenden Rahmen müssen geteilt und ihre Verwaltungsstruktur muß aktualisiert werden. Hieraus erklärt sich auch, daß der partielle Tabellenpuffer etwas weniger effizient als der generische/vollständige Tabellenpuffer arbeitet. Im partiellen Tabellenpuffer müssen die Datensätze nach und nach unter Reorganisation der Rahmenstruktur eingebaut werden. Im generischen/vollständigen Puffer werden dagegen alle Daten einer Tabelle in einem Schritt - von der Datenbank bereits sortiert - eingelagert.

Verwaltung nicht vorhandener Sätze

Der partielle Puffer speichert auch Informationen über nicht vorhandene Sätze einer Tabelle. Wird versucht mit einem Schlüssel auf die Tabelle zuzugreifen, der nicht in der Datenbank vorhanden ist, so wird diese Information im Puffer gespeichert.

Dies geschieht über ein Flag, daß an jeden gespeicherten Satz im Puffer angehängt ist. Das Flag zeigt an, ob dieser Satz in der Tabelle existiert oder nicht. Wird versucht auf einen nicht vorhandenen Satz zuzugreiffen, so wird ein leerer Satz mit dem entsprechenden Schlüssel im Puffer abgespeichert und das Flag wird auf den Wert für Nichtexistenz gesetzt. Wird erneut versucht auf diesen Satz zuzugreifen, so kann direkt im Puffer festgestellt werden, daß dieser Satz nicht auf der Datenbank existiert.

Satzweise Pufferung ist also auch dann empfehlenswert, wenn oft wiederholt versucht wird, auf nicht existente Sätze einer Tabelle zuzugreifen.

Verdrängung

Wenn Sätze einer partiell gepufferten Tabelle gelesen und im Puffer gespeichert werden sollen, kann es aus Platzgründen unter Umständen notwendig sein, andere Sätze aus dem Puffer zu entfernen. In diesem Fall werden diejenigen Sätze der Tabelle aus dem Puffer entfernt, auf die am längsten nicht mehr zugegriffen wurde.

Globale Synchronisation

Die Modifikationen in den lokalen Puffern müssen in verteilten Systemen synchronisiert werden, um die gepufferten Daten konsistent zu halten. Das allgemeine Vorgehen bei der Synchronisation ist beschrieben in Synchronisation der lokalen Puffer.

Im folgenden werden die Auswirkungen verschiedener ABAP Befehle auf die lokale und globale Synchronisation des partiellen Puffers beschrieben.

Werden Veränderungen mit WHERE-Bedingungen durchgeführt (UPDATE dbtab WHERE..., DELETE FROM dbtab WHERE...), so wird die gesamte betroffene Tabelle zum Synchronisationszeitpunkt sowohl im Puffer des lokalen Servers (Server auf dem der Befehl abgesetzt wurde) als auch auf allen anderen Servern invalidiert.

Bei Veränderungen ohne WHERE-Bedingungen (UPDATE dbtab, INSERT dbtab, DELETE dbtab) werden zum Synchronisationszeitpunkt die betroffenen Sätze im Puffer des lokalen Servers geändert und in den Puffern aller anderen Server gelöscht.

Aus diesem Grunde belasten Veränderungen mit WHERE-Bedingung die Puffer-Verwaltung erheblich mehr als solche ohne eine WHERE-Bedingung.