Lade...
 

ObjectStore Server Parameters

ObjectStore Server Parameters

Unter Windows sind die Parameterwerte in der Registry gespeichert. Die Server-Parameter können entweder direkt in der Registry geändert werden oder man tut dies über den ObjectStore-Installer:

Systemsteuerung → Programme und Funktionen → ObjectStore... auswählen → Ändern → Next → "Yes - change Server parameters." auswählen, Next. Im folgenden Fenster können links Server-Parameter ausgewählt werden, die dann über den Knopf "Edit Value" angepasst werden können.

Anschließend kann per OK → Next → Next → Next → Finish der Dialog beendet werden.

Änderung der Werte mit dem Setup von ObjectStore: Geänderte Werte sind erst nach einem Neustart des Servers aktiv. (Server Parameter können auch als Text-File dem Server übergeben werden. Diese Methode wird nicht empfohlen.)
Abfrage der aktuellen Serverparameter mit ossvrstat host_name -parameters - siehe Beispiel.
 

Das Transaction-Log des Servers soll möglichst nie mit anderen Datenbanken auf einem gemeinsamen Drive liegen!

Für die meisten Parameter ist der vorgegebene Standardwert richtig.

Andere sollten an die konkrete Umgebung angepasst werden, mit dem Ziel, das Verhalten des Servers bei folgenden Aktionen zu verbessern:

  1. IO-Operationen im Transaction-Log minimieren
  2. wiederholtes Starten/Beenden von Threads vermeiden (Server Threads für IO-Handling)
  3. Wartezyklen bei der Netzwerk-Kommunikation ausschließen.

Ziel 1 - so wenig IO wie möglich beim Lesen im Transaction-Log

Propagation Buffer Size: möglichst großen Wert finden - damit fast ausschließlich im Puffer gelesen wird.
Aber: ein zu großer Wert triggert Memory Page Swapping des OS.

Kontrolle mit Process Explorer (siehe Abbildung).

Ziel 2 - Start und Beenden von Threads vermeiden:

Wert für Max AIO Threads erhöhen. Dieser sollte der Anzahl der gleichzeitig geöffneten Datenbank-Dateien entsprechen. Hierbei ist zu beachten, dass auch Schema-Datenbanken zu dieser Anzahl zählen.

ClassiX® verwendet 4 Schema-Datenbanken (SCHEMA_M.adb, SCHEMA_B.adb, schema_o.adb und SCHEMA_X.adb), ObjectStore nutzt ebenfalls 4 Schema-Datenbanken (osdynext_evol.adb, osquery.adb, ossevol.adb und os_coll.adb). Somit ist zu den per CX_DATABASE* angegebenen Datenbanken noch 8 hinzuzurechnen. Der Wert soll keinesfalls < 10 sein.
Beobachtung der Threads (mit dem Process Explorer beobachten) führten zum vorgeschlagenen Wert 30.

Hinweis: Nicht alle Threads des ObjectStore Servers sind IO Threads! Der Wert für Max AIO Threads ist dann zu klein, wenn ständig Threads neu gestartet und wieder beendet werden.

 

Ziel 3 - Netzwerk-Kommunikation optimieren

N Message Buffer und Message Buffer Size so weit erhöhen, bis ossvrstat kein "Message buffer wait" mehr zeigt.

Kontrolle mit ObjectStore Utility ossvrstat.

Preferred Network Receive Buffer Size und Preferred Network Send Buffer Size auf Maximalwert setzen.
Den gleichen Wert für OS_RCVBUF_SIZE und OS_SNDBUF_SIZE bei allen Clients (Empfehlung von ObjectStore).

empfohlene Werte:

Parameter empfohlener Wert Hinweise
Propagation Buffer Size 1048576 sectors = 512 MB

Das ist Maximal-Wert für Win 32 Platform. Reduzieren, wenn Memory Swapping auftritt.

Log Data Segment Max Size 16777216 segments = 8192MB 4 * Standardwert (ermöglicht auch sehr lange Transaktionen, siehe Hinweise)
N Message Buffers 30 bei ≈ 200 Clients kein Wait
Message Buffer Size 2048 sectors = 1 MB
Max AIO Threads 30 Bei default Wert=3 werden Threads ständig neu gestartet
Preferred Network Receive Buffer Size 65536 Bytes Gleichen Wert für Client Parameter OS_RCVBUF_SIZE und OS_SNDBUF_SIZE
Preferred Network Send Buffer Size

 

Hinweise zu wichtigen Parametern des ObjectStore Servers

Für den Normalbetrieb des ClassiX®-Systems wird immer der Standwert empfohlen.

Log Data Segment Max Size
bezieht sich auf die Maximalgröße des Transaction-Logs (osserver.log).

Die Größe eines Datensegments im Transaction-Log ist 512KB.
Standardwert = Einstellung nach der Installation ist 4194304. Das entspricht 2 GB.

Der ObjectStore Server vergrößert dieses File bei Bedarf automatisch. Es wird niemals wieder kleiner - um den Overhead für erneutes Vergrößern zu sparen. Erst wenn der vorgegebene Maximal-Wert erreicht ist, bricht die betreffende Transaktion mit Fehlermeldung ab. Bei sehr großen Reorganisationsläufen in einer Transaktion - Dauer 6 Stunden oder länger - wird dieses Limit tatsächlich erreicht. Vorher sollte also der Parameter vergrößert werden (ObjectStore erlaubt 2TB als Maximum). Gleichzeitig muss noch RPC Timeout erhöht werden, weil das Zurückschreiben der Daten nach einer extrem langen Transaktion auch lange dauert.

Beispielwerte: Log Data Segment Max Size = 67108864  (das sind 64MB), RPC timeout  =  14400.
Danach auf die Standardwerte zurücksetzen!

Spricht etwas degegen, die Parameter vom vornherein auf einen größeren Wert zu setzen?

Log Data Segment Max Size - Ja. Der Server macht das Transaction-Log ohnehin so groß wie nötig. Wenn es bei "Normalbetrieb" extrem groß wird, hat das einen unerwünschten Grund, dem man nachgehehen soll: mindestens ein Client hält eine Transaktion über Stunden oder Tage offen. Mit dem Maximal-Limit 2TB würde man das erst sehr spät feststellen.
 
RPC Timeout - Sehr viel! Dieser Parameter hat darauf Einfluß, wann
ein nicht mehr antwortender Client entdeckt wird.
 

Cache Manager Ping Time
Standardwert ist 300 (in Sekunden). Bisher wurde an dieser Stelle empfohlen, den Wert auf 60 zu reduzieren, damit nicht antwortende Clients die einen Lock halten vom Server schneller entdeckt werden. Der Preis ist eine höhere Netzwerk-Last. Wenn es noch inaktive Clients mit Lock gibt, ist Cache Manager Ping Time=60 ein Workaround, solange dieser Fehler nicht behoben ist. Empfelhlung ist aber der Standardwert.

Max Data Propagation Per Propagate
Mit Default 0 berechnet der Server diesen Wert: 0.1 * Propagation Buffer Size. Ein kleinerer Wert begünstigt Lese-Operationen zu ungunsten des Schreibens, bei einem größeren Wert ist es umgekehrt. Diese Balance ist schwer abzuschätzen - Empfehlung ist Standard.

Max Memory Usage
Standard ist 0 - der ObjectStore Server nimmt sich soviel Speicher wie er vom Betriebssystem bekommen kann. Das ist genau das gewünschte Verhalten. Diesen Wert also niemals ändern.