Anfang des Inhaltsbereichs

Hintergrunddokumentation Generischer und vollständiger Tabellenpuffer  Dokument im Navigationsbaum lokalisieren

Im generischen/vollständigen Tabellenpuffer TABL werden generische Tabellenbereiche bzw. vollständige Tabellen verwaltet. Die einzelnen generischen Bereiche werden im Puffer wie eigenständige, vollständig gepufferte Tabellen verwaltet.

Technische Realisierung und Pufferzugriff

Der generische/vollständige Tabellenpuffer besteht, wie auch der partielle Puffer, aus einer zentralen Verwaltungsstruktur, einem Tabellenverzeichnis und dem Datenbereich.

Der Hauptunterschied zum partiellen Puffer liegt in der Verwaltung des Datenbereichs. Der generische/vollständige Puffer teilt seinen Speicher in Bereiche (Extents) variabler Länge. Die Länge eines Bereichs beträgt ein vielfaches einer festen Blockgröße (256 Byte). Die Pufferverwaltung versucht, den Inhalt eines generischen Tabellenbereichs bzw. eine ganze Tabelle in einem Extent zu plazieren. Dies ermöglicht eine Reduzierung des Platzbedarfs gepufferter Daten im Vergleich zur satzweisen Pufferung.

Die Tabellennamen sind im Tabellenverzeichnis alphabetisch sortiert. Die Datensätze werden in einem Schritt - von der Datenbank bereits sortiert - in das entsprechende Extent eingelagert. Beim Pufferzugriff wird zunächst mittels binärer Suche der entsprechende Tabellenname im Tabellenverzeichnis gesucht. Dann wird ebenfalls mittels binärer Suche der entsprechende Datensatz im Extent gesucht.

Verdrängung

Im Gegensatz zum partiellen Puffer wird die Verdrängung beim generischen/vollständigen Puffer asynchron zu bestimmten Zeitpunkten durchgeführt. Diese Zeitpunkte werden dynamisch anhand der Anzahl der Zugriffe auf den Puffer bestimmt. Die Zeit zwischen zwei Verdrängungen hängt also von der Auslastung des Puffers ab.

Eine Verdrängung findet nur statt, wenn zum entsprechenden Zeitpunkt der freie Platz im Puffer einen voreingestellten Wert unterschreitet oder die Zugriffsqualität (d.h. die Anzahl der Zugriffe, die direkt aus dem Puffer befriedigt werden können) zu schlecht ist. Es wird dann versucht, einen bestimmten Platz im Puffer freizumachen. Es wird also zu bestimmten Zeitpunkten eine größere Menge von Tabellen verdrängt.

Hierbei werden die Tabellen verdrängt, auf die am seltensten zugegriffen wurde. Die Zugriffe auf eine Tabelle werden dabei, in Abhängigkeit vom Zeitpunkt an dem Sie erfolgten, verschieden gewichtet. Zugriffe, die weiter in der Vergangenheit liegen, werden geringer gewichtet als solche, die erst kurz vor dem Zeitpunkt der Verdrängung erfolgten.

Dieses Verfahren garantiert insbesondere, daß Tabellen, auf die nur zu einem bestimmten Zeitpunkt sehr häufig zugegriffen wird, die aber danach nicht mehr benutzt werden, nach einiger Zeit aus dem Puffer verdrängt werden können.

Bei generisch gepufferten Tabellen ist zu beachten, daß einzelne generische Bereiche im Puffer wie eigenständige Tabellen behandelt werden. Es können also einzelne generische Bereiche einer Tabelle verdrängt werden, während andere generische Bereiche der Tabelle im Puffer erhalten bleiben.

Nach dem Verdrängen von Tabellen findet in bestimmten Zeitintervallen eine Reorganisation des Puffers statt, um die Fragmentierung des Puffers zu vermindern.

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 generischen/vollständigen Puffers beschrieben.

Werden Veränderungen mit WHERE-Bedingungen durchgeführt (UPDATE dbtab WHERE..., DELETE FROM dbtab WHERE...), so wird zum Synchronisationszeitpunkt der gesamte betroffene generische Bereich bzw. die gesamte Tabelle 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. In den Puffern aller anderen Server wird aber der gesamte betroffene generische Bereich bzw. die gesamte Tabelle invalidiert.

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