Lade...
 

Datenbank-Cache

Datenbank-Cache

Um den Zugriff auf die Datenbank zu beschleunigen, hat jeder Client-Rechner einen eigenen Datenbank-Cache. Dieser Cache ist ein Speicherbereich, der von ObjectStores Cache-Manager verwaltet wird (das ist der Dienst "ObjectStore Cache Manager").

Die Größe des Caches wird beim Start von ClassiX® festgelegt. Es ist nicht möglich, den Cache im laufenden Betrieb zu verkleinern oder zu vergrößern. Der Cache teilt sich den RAM (also den physisch vorhanden Speicher) mit dem Betriebssystem und den anderen Programmen, die zu dem Zeitpunkt auf dem Computer laufen. Es gilt, den "goldenen Mittelweg" zu finden:

  • Auf der einen Seite soll der Cache so groß wie möglich sein, damit so viele Daten aus der Datenbank wie möglich auf dem lokalen Rechner vorgehalten werden.
  • Auf der anderen Seite sollte nur so viel Speicher für den Cache abgezweigt werden, dass andere Programme, und auch ClassiX® selbst, noch genügend Speicher zum Arbeiten haben. Andernfalls lagert Windows Speicher aus (Swappen), und alle Bemühungen, das System zu beschleunigen, waren vergebens.

Ist OS_CACHE_SIZE gesetzt, bestimmt dies, wie groß der Cache sein soll. Dabei ist zu beachten, dass die Größe in Bytes angegeben wird.

Ist OS_CACHE_SIZE nicht gesetzt und ClassiX wird über eine Remote-Desktop-Verbindung gestartet, wird angenommen, dass ClassiX auf einem Terminal-Server ausgeführt wird und sich den Cache mit anderen Clients teilen muss. Daher kommt die Umgebungsvariable CX_TS_CACHE_SIZE zum Einsatz, welche den Cache festsetzt.

Ansonsten kommt die Formel

Cache-Größe = (Freier physischer Speicher - Reserve) * CX_CACHE_SIZE_FACTOR

zum Einsatz.

Mit CX_NO_TS wird beim Start von ClassiX über Remote-Desktop die reguläre Cache-Größe anstatt von CX_TS_CACHE_SIZE verwendet. Dies ergibt insbesondere beim Arbeiten vom Home-Office aus Sinn, wenn man nicht wirklich auf einem Terminal-Server arbeitet, denn der Standard-Wert für CX_TS_CACHE_SIZE liegt nur bei 64MB, was für einen Einzelarbeitsplatzrechner zu wenig ist und das ClassiX-System nur ausbremsen würde.

Parameter Beschreibung Standard Einheit Funktion zum Abprüfen
OS_CACHE_SIZE Setzt die Cache-Größe auf einen festen Wert. Die Formel findet keine Anwendung. (8 MB) Bytes -
CX_TS_CACHE_SIZE Wenn ClassiX® auf einem Terminal Server läuft, findet die Formel keine Anwendung. Stattdessen wird der Cache auf eine feste Größe gesetzt. 64 MBytes GetTerminalServerCacheSize
CX_NO_TS Hierdurch wird beim Start von ClassiX über Remote-Desktop die reguläre Cache-Größe anstatt von CX_TS_CACHE_SIZE verwendet. nicht gesetzt, auf 1 setzen zur Aktivierung -  
CX_RESERVED_FOR_APPS Entspricht dem Parameter "Reserve" in der Formel.
Der Parameter steuert, wie viel Speicher anderen Programmen und ClassiX® selbst überlassen wird. ClassiX® selbst benötigt ca. 32 MBytes (daher der Standardwert).
32 MBytes GetMemoryReservedForApps
CX_CACHE_SIZE_FACTOR Entspricht dem Parameter "Cache-Faktor" in der Formel.
Der Parameter steuert, wie viel vom freien Speicher, abzüglich obiger Reserve, für den Cache verwendet werden soll. Der Wert 100 bedeutet, dass alles für den Cache reserviert werden soll, 0 bedeutet kein Cache (bzw. 8 MBytes, s.u.).
25 % GetCacheSizeFactor

 

Die minimale Cache-Größe liegt immer bei 8 MBytes, auch wenn die Formel einen kleineren Wert berechnet.

Beispiel

Folgende Umgebungsvariablen sind gesetzt:

  • CX_TS_CACHE_SIZE=64
  • CX_RESERVED_FOR_APPS=48
  • CX_CACHE_SIZE_FACTOR=75

Wenn ClassiX® auf einem Terminal Server gestartet wird, werden pauschal 64 MBytes für den Cache reserviert.

Ansonsten wird ein bestimmter Teil des freien physischen Speichers für den Cache reserviert. Auf einem Rechner mit z.B. 280 MBytes freiem physischem Speicher (s. Taskmanager) ergibt sich (280 MB - 48 MB) * 75% = 174 MB. Es verbleiben ca. 74 MB freier Speicher für andere Programme (280 MB - 174 MB Cache - 32 MB ClassiX® = 74 MB). Werden im weiteren Verlauf andere Programme gestartet (dazu gehören auch Controls wie z.B. Word oder Excel!), teilen diese sich den verbleibenden Speicher. Analoges gilt für ClassiX® selbst, wenn z.B. in größeren Läufen große Mengen an transienten Objekten erzeugt werden.

Um zu prüfen, wie groß der Cache letztendlich ist, kann über die Funktion GetCacheSize() vom Object-Manager die Cache-Größe abgefragt werden. Alternativ kann das Logging über die Umgebungsvariable CX_REPORT_STARTUP eingeschaltet werden. ClassiX® protokolliert, wie die Größe errechnet wird.