Lade...
 

CX_OBJECT_MANAGER::SetDefaultClusterSizeLimit

CX_OBJECT_MANAGER::SetDefaultClusterSizeLimit

213694
Beschreibung:

Diese Methode definiert die maximale Größe (in Bytes) der Default-Cluster eines Segments.

Dieses Limit wird vom neuen Cluster-Switching-Mechanismus verwendet, um zu entscheiden, wann ein neuer Default-Cluster in einem Segment angelegt wird. Dieser Mechanismus löst das konzeptionell falsche Segment-Splitting und das Overflow-Segment ab.

Im Normalfall gibt es keine Notwendigkeit, die Default-Konfiguration des Cluster-Switchings anzupassen. Diese Methode dient hauptsächlich zum einfacheren Testen, ob der Cluster-Switch korrekt durchgeführt wird. Der Wert sollte nicht leichtfertig in einer Produktionsumgebung zu niedrig oder zu hoch gesetzt werden. Ersteres würde die Datenbank mit Clustern überfüllen und die Performance von persistenten Allokationen beeinträchtigen und letzteres potenziell zu schlechten Ladezeiten, weil im Cluster eines Objekts zu wenig Platz bleibt, um die dazugehörigen Slots zu allokieren.

Achtung: Diese Angabe ist eine rein transiente Konfiguration des Clients. Wird diese Angabe verändert, dann müssen alle Clients den veränderten Wert verwenden, ansonsten werden die neuen Limits nicht zuverlässig eingehalten.

 

Der Default-Wert für 32-Bit Anwendungen ist 500MB und für 64-Bit Anwendungen 750MB. Dieser Wert wurde so gewählt, damit die in einem Cluster allokierten Objekte noch mindestens genausoviel Speicher für ihre Slots allokieren können, bevor die hart definierte Grenze von 1GB (32-Bit) und 1,5GB (64-Bit) erreicht wird und alle weiteren Allokationen in einem anderen Cluster vorgenommen werden müssen. Das von ObjectStore definierte Größenlimit eines Clusters beträgt 2GB. Das Größenlimit für 32-Bit wurde so gewählt, damit eine Datenbankevolution auf 64-Bit jederzeit möglich ist (hierdurch verdoppelt sich die größe eines Clusters potenziell) und das Limit für 64-Bit wurde so gewählt, dass auch in einem "offiziell" vollem Cluster immer noch genug Platz für Allokationen ist und dieser Platz genutzt werden könnte, falls er für Reorganisations-/Reparaturläufe benötigt würde.

 

Der Cluster-Switching-Mechanismus allokiert Speicher für Default-Allokationen (CreatePersObject, CreatePersCollection) bis zu der hier festgelegten Größe im aktuellen Default-Cluster (meist 0) des vordefinierten Segments. Wird das hier definierte Größenlimit ereicht, dann wird ein neuer Cluster in dem Segment angelegt und als Default-Cluster für dieses Segment festgelegt.
Wenn Allokationen in der Nähe eines Referenz-Objekts durchgeführt werden sollen (Slots, CX_LAZY_CREATOR), dann wird die Allokation auch beim Überschreiten der hier festgelegten Größe noch in dem Cluster des Objekts allokiert und erst, wenn das harte Limit (1,5GB) erreicht wird, wird stattdessen in dem aktuellen Default-Cluster des Segments allokiert.

 

ObjectStore definiert kein Größenlimit für Segmente. Es ist lediglich auf 232 Cluster beschränkt, wovon 230 tatsächlich für ClassiX zur Verfügung stehen. Nimmt man ein Größenlimit von 750MB pro Cluster an, dann kann in jedem Segment 750EB an persistenten Daten allokiert werden.

Falls das hier angegebene Limit unter 1MB liegt oder über dem harten Limit (1,5GB), dann wird das Limit auf den Default-Wert zurückgesetzt.

 

Die interne technische Dokumentation des Cluster-Switchings befindet sich im Intranet.

Code-Beispiel:
1024 1024 * GetManager(OBJECT) Call(SetDefaultClusterSizeLimit) // Set 1 MB as cluster switch limit (DON'T DO THIS IN PRODUCTION!!!)
...
0 GetManager(OBJECT) Call(SetDefaultClusterSizeLimit) // Reset to default value

 

Stack
Stack Position Objekttyp Kurzbeschreibung
Stack(In) Top CX_OBJECT_MANAGER  
  Top-1 INTEGER Größenlimit in Bytes
Stack(Out) Top - -
Funktionsaufruf: Call(SetDefaultClusterSizeLimit)