Anfang des Inhaltsbereichs

Funktionsdokumentation Technische Realisierung des Tabellenpuffers  Dokument im Navigationsbaum lokalisieren

Verwendung

Der Tabellenpuffer verwendet das Shared Memory des Applikationsservers.

Technische Realisierung und Pufferzugriff

Der Tabellenpuffer besteht aus einer zentralen Verwaltungsstruktur, einem Tabellenverzeichnis und dem Datenbereich. Einzelne generische Bereiche einer generisch gepufferten Tabelle werden wie autonomome vollständig gepufferte Tabellen verwaltet.

Der Tabellenpuffer teilt seinen Speicher in Bereiche (Extents) variabler Länge. Die Länge eines Extent is ein Vielfaches einer festen Blockgröße (128 Byte bei nicht-Unicode-Systemen und  256 Byte bei Unicode-Systemen). Die Pufferverwaltung stellt den Inhalt einer gepufferten Tabelle in ein oder mehrere Extents.

Die Tabellennamen werden im Tabellenverzeichnis alphabetisch sortiert. Die Datensätze einer generisch oder vollständig gepufferten Tabelle werden in einem Schritt - von der Datenbank bereits sortiert - in das entsprechende Extent eingelagert. Bei einer partiell gepufferten Tabelle wird nur jeweils eine Zeile geladen, und die Sortierung findet beim Einlesen der Daten in den Puffer statt. 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.

Aktivitäten

Verdrängung

Die Verdrängung gepufferter Tabellen wird asynchron zu bestimmten festgelegten Zeitpunkten durchgeführt. Diese Zeitpunkte werden dynamisch anhand der Anzahl der Zugriffe auf den Puffer bestimmt. Die Zeit zwischen zwei Verdrängungen hängt von der Auslastung des Puffers ab.

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

Hierbei werden die Tabellen, auf die am seltensten zugegriffen wurde, verdrängt. 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, dass 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.

Die einzelnen generischen Bereiche des Puffers von generisch gepufferten Tabellen werden wie eigenständige Tabellen behandelt. Dies erklärt, warum bestimmte 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. Informationen zum allgemeinen Vorgehen bei der Synchronisation finden Sie unter Synchronisation lokaler Puffer.

Im folgenden wird beschrieben, wie sich verschiedene ABAP-Anweisungen auf die lokale und globale Synchronisation auswirken.

      Wenn Sie Veränderungen mit WHERE-Bedingungen durchführen (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 der Änderung von Einzelzeilen (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 der gesamte generische Bereich bzw. die gesamte Tabelle invalidiert.  

Hinweis

Änderungen mit einer WHERE-Bedingung belasten die Pufferverwaltung erheblich mehr als Änderungen von Einzelzeilen.

 

 

 

Ende des Inhaltsbereichs