Home ORDIX AG             Dienstleistung             Trainingsshop    Kunden / Referenzen Aktuelles    Kontakt
Home  Pfeil  ORDIX News  Pfeil  1/2008  Pfeil  Datenbanken
suche: 
Dieser Artikel richtet sich an Datenbank- und Systemadministratoren, Entwickler und Entscheider im Datenbankumfeld.

Glossar

RTO
Recovery Time Objective. Zielvereinbarung in Sekunden, wie lange der DBServer nach einem Ausfall von der Startphase bis zum Zustand „Online“ benötigen darf.
LRU
Least Recently Used. Interne Verwaltung einer Pointer-Liste, die auf Daten im Shared Memory verweist.
AIO-VP
Informix Virtueller Prozess (Asynchronous I/O) für das Schreiben auf Platte.


IBM Informix Dynamic Server Version 11 (Teil II)

Dynamisches Ressourcen Tuning


In der ORDIX News 3/2007 [1] stellten wir den neuen Informix Dynamic Server (IDS) Version 11 vor und gaben einen ersten Überblick über Neuerungen im neuen OLTP-Datenbank-Flagschiff der IBM. Seit Mitte Juni 2007 ist nun der Informix Dynamic Server Version 11.10.(FU)C1 auf dem Markt erhältlich. Sehr viele neue Funktionen wurden in diese Version integriert. In diesem Teil der Reihe beleuchten wir das Thema „Dynamisches Ressourcen Tuning“.

RTO-Policy

KONFIGURATIONSPARAMETER Recovery Time Objective

RTO_SERVER_RESTART ## (Angabe in Sekunden)
# Zeit, die der Server für einen Recovery aus dem Offline
# maximal benötigen darf.
# 0=Off, die Angabe erfolgt in Sekunden im Bereich von 60-1800
# Dieser Wert beeinflusst u.a. das Checkpoint-Interval.

RAS_PLOG_SPEED ###
# Parameter für die Lesegeschwindigkeit des Physical Logs.
# Dieser Wert wird vom DB-Server beim Starten automatisch
# ermittelt und eingetragen.
# Standardwert: 10240 pages/sec (20 Mb/sec)
# Wert in pages written/second

RAS_LLOG_SPEED ###
# Parameter für die Lesegeschwindigkeit des Logical Logs
# Dieser Wert wird vom DB-Server beim Starten automatisch
# ermittelt und eingetragen.
# Wird als 1/8 von RAS_PLOG_SPEED initialisiert.
# Standardwert: 1280 pages/sec (2.5 Mb/sec)
# Wert in pages written/second
Abb. 1: Konfigurationsparameter der RTO-Policy.

Mit der IDS Version 11 kann sich der Datenbankadministrator das Leben etwas vereinfachen, z. B. mit der so genannten RTO-Policy. RTO steht für Recovery Time Objective und bedeutet soviel wie eine Vereinbarung einer Zielvorgabe für eine garantierte Wiederanlaufzeit (Recovery-Phase) nach einem Datenbankserverausfall.

Die RTO-Policy wird über den neuen Konfigurationsparameter RTO_SERVER_RESTART aktiviert. Mit der Angabe einer Zeitdauer in Sekunden wird festgelegt, wie lange eine Wiederanlaufzeit (Zeitspanne vom Beginn des Starts bis hin zum Zustand „Online“ des Datenbankservers) maximal sein darf. Der Wert kann im Bereich zwischen 60 und 1800 Sekunden liegen.

Sobald dieser Konfigurationsparameter gesetzt ist, aktiviert er automatisch ein Monitoring des Datenbankservers, um die RTO-Richtlinie einzuhalten. Unter der Voraussetzung, dass ein Physical Logfile mit einer Mindestgröße von 10 MB sowie ausreichend große Logical Logfiles zur Transaktionsprotokollierung zur Verfügung stehen, werden, abhängig von der Transaktionslast, Checkpoints durchgeführt, damit die Einhaltung der RTO-Policy garantiert werden kann. Bei aktivierter RTO-Richtlinie wird der Standardparameter für den Checkpoint Intervall CKTINTVL ignoriert.

Die beiden zusätzlichen Konfigurationsparameter RAS_PLOG_SPEED und RAS_LLOG_SPEED regeln die Lesegeschwindigkeit des Physical Logs und des Logical Logs. Beide Werte werden beim Starten vom Datenbankserver automatisch ermittelt und eingetragen. Eine Übersicht über die drei Konfigurationsparameter finden Sie in Abbildung 1.

Zusätzlich zum automatischen Monitoring wird bei Aktivierung einer RTO-Policy auch das dynamische Ressourcen Tuning gestartet. Dabei überprüft der Datenbankserver im laufenden Betrieb ständig die beiden Parameter LRU_MIN_DIRTY und LRU_MAX_DIRTY und führt, je nach Lastsituation, auch selbstständig Anpassungen durch.

Bei Bedarf werden durch den Datenbankserver im laufenden Betrieb weitere AIO_VPs (Informix Virtuelle Prozesse für das Schreiben und Lesen von Platte) und Page Cleaner Prozesse hinzugefügt, die für das Schreiben der geänderten Bufferpool Pages aus dem Shared Memory auf Platte (Synchronisation) verantwortlich sind.

LRU-Optimierung

Das Schreiben des Inhaltes eines Shared Memory Buffers auf die Platte (Synchronisation) wird im Englischen als „buffer flushing“ bezeichnet. Die automatische Ausführung dieser Aktion wird anhand der Schwellwerte der beiden LRU-Parameter LRU_MIN_DIRTY und LRU_MAX_DIRTY gesteuert.

Bisher hatten diese beiden Schwellwerte eine feste Größe, die nicht dynamisch angepasst werden konnte. Zukünftig optimiert der Datenbankserver die Werte bei entsprechendem Lastverhalten automatisch. Voraussetzung dafür ist entweder, dass der neue Konfigurationsparameter AUTO_LRU_TUNING = 1 gesetzt ist oder, wie bereits oben erwähnt, der RTO_SERVER_RESTART aktiviert ist.

Automatische Anpassung von LRU_MIN_DIRTY und LRU_MAX_DIRTY

12:02:02 Adjusting LRU for bufferpool - id 0 size 2k
12:02:02 Old max 78.4 min 68.6 New max 77.6 min 67.9
Abb. 2: Beispieleintrag im Message Logfile nach dynamischer Anpassung beider LRU-Parameter durch den DB-Server.

Stellt der Datenbankserver Engpässe in der LRU-Queue Verwaltung fest, dann werden die beiden Schwellwerte der LRU-Parameter LRU_MAX_DIRTY und LRU_MIN_DIRTY automatisch um 1 Prozent nach unten korrigiert. Durch das Herabsetzen der beiden LRU-Schwellwerte werden die geänderten Pages/Datensätze aus dem Shared Memory häufiger auf Platte geschrieben. Diesen Vorgang nennt man auch Synchronisation oder LRU-Flushing. Die Überprüfung der beiden LRU-Parameter erfolgt bei jedem ausgelösten Checkpoint (siehe Abbildung 2).

Die Standardeinstellungen für die Schwellwerte der beiden LRU-Parameter betragen 50 für LRU_MIN_DIRTY und 60 für LRU_MAX_ DIRTY. Bei aktivierter LRU-Optimierung können die Werte höher gesetzt werden. Eine Empfehlung lautet inzwischen, mit den Werten LRU_MIN_DIRTY = 70 und LRU_MAX_ DIRTY = 80 zu starten.

Die Einstellungen der LRU-Schwellwerte regeln das Schreiben der geänderten Daten aus dem Shared Memory Buffer auf die Platte. Wird der Schwellwert von LRU_MAX_DIRTY überschritten, werden solange modifizierte Datenseiten auf die Platte geschrieben, bis der untere Schwellwert LRU_MIN_DIRTY erreicht ist.

Achtung: Die automatischen LRU-Anpassungen sind nicht permanent und werden auch nicht in der ONCONFIG-Datei gespeichert. Falls keine manuelle Änderung der Konfigurationsparameter in der $ONCONFIG erfolgt, wird beim nächsten Neustart des Datenbankservers wieder auf die ursprünglichen Konfigurationswerte, die in der ONCONFIG-Datei enthalten sind, zurückgegriffen.

Nicht blockierende Checkpoints

Voraussetzungen für nicht blockierende Checkpoints:

  • Ausreichend groß dimensionierte Logfiles (Logical- und Physlog)
  • Bei zu kleinen Logfiles wird eine Meldung zusammen mit einem Vorschlagswert in das Logfile mitprotokolliert.

16:05:17 Performance Advisory: Based on the current workload,
the physical log might be too small to accommodate the time it
takes to flush the bufferpool.
16:05:17 Results: The server might block transactions during
checkpoints.
16:05:17 Action: If transactions are blocked during the
checkpoint, increase the size of the physical log to at least
14000 KB.

16:05:17 Performance Advisory: Based on the current workload,
the logical log space might be too small to accommodate the
time it takes to flush the bufferpool.
16:05:17 Results: The server might block transactions during
checkpoints.
16:05:17 Action: If transactions are blocked during the
checkpoint, increase the size of the logical log space to at
least 14000 KB.
Abb. 3: Eintrag im Online Logfile bei zu kleinen Logfiles.

Mit der Version 11 wurde der bisherige Checkpoint-Algorithmus durch einen praktisch nicht blockierenden Checkpoint-Algorithmus ersetzt. Durch das optimierte LRU-Flushing werden die modifizierten Buffer Pages außerhalb der Checkpointphase auf Platte geschrieben. Das einzige, was den Datenbankserver noch für geringe Sekundenbruchteile blockiert, ist das Schreiben des Checkpoint-Eintrages in das Logical Logfile.

Der Informix Dynamic Server überwacht die Auslastung und die bisherigen Checkpoint-Zeiten und löst Checkpoints bei Bedarf häufiger aus, damit kritische Ressourcen, wie das physische oder das logische Logfile, nicht erschöpft werden. Damit wird sichergestellt, dass Transaktionen während eines Checkpoints nicht blockiert werden.

Bei Anwendungen, die empfindlich auf Reaktionszeiten reagieren, kann die bisherige Methode geändert werden. Bei dieser wurde aggressives LRU-Flushing (Schreiben der Daten aus dem Shared Memory Bereich auf die Platte auf Basis von sehr niedrigen LRU-Parametereinstellungen) verwendet, um die Wartezeiten des Checkpoints zu verringern.

Es ist allerdings darauf zu achten, dass sowohl das Physical Logfile als auch die Transaktionsprotokolle ausreichend groß angelegt sind. Falls dies nicht der Fall sein sollte, werden blockierende Checkpoints durchgeführt. Gleichzeitig wird ein Eintrag in das Message Logfile des Datenbankservers vorgenommen, der auch einen Hinweis mit Empfehlung einer Mindestgröße enthält (siehe Abbildung 3).

Checkpoint Analyse

Das neue Kommando onstat -g ckp bietet eine Möglichkeit, die aufgetretenen Checkpoints zu überwachen und zu analysieren. Es wird ausgegeben, ob die Funktion AUTO_CKPTS an- oder ausgeschaltet ist, welcher Wert für RTO_SERVER_RESTART eingestellt ist, sowie die aktuell erwartete Restart-Zeit beim Recovery (siehe Abbildung 4).

mstoeb>onstat -g ckp


IBM Informix Dynamic Server Version 11.10.FC1    -- On-Line -- Up 04:18:43 -- 29696 Kbytes


AUTO_CKPTS=On   RTO_SERVER_RESTART=60 seconds  Estimated recovery time 24 seconds


Critical Sections                                                                      Physical Log      Logical Log
                   Clock                Total Flush Block #     Ckpt Wait Long # Dirty Dskflu Total Avg  Total Avg
Interval Time      Trigger LSN          Time  Time  Time  Waits Time Time Time Buffers /Sec   Pages /Sec Pages /Sec
150      15:35:45  Backup  52:0x1314c   0.1   0.0   0.0   0     0.0  0.0  0.0  0       0      0     0    1     1
151      15:36:14  Admin   55:0x18      0.0   0.0   0.0   0     0.0  0.0  0.0  0       0      0     0    4     0
153      15:36:22  Admin   55:0x203c    0.0   0.0   0.0   0     0.0  0.0  0.0  0       0      0     0    1     0
154      15:36:26  Admin   55:0x303c    0.2   0.0   0.0   0     0.0  0.0  0.0  0       0      0     0    1     0
155      15:36:334 Admin   55:0x403c    0.0   0.0   0.0   0     0.0  0.0  0.0  0       0      0     0    1     0
167      15:38:19  Backup  55:0x1411c   0.1   0.0   0.0   0     0.0  0.0  0.0  0       0      0     0    1     1
168      15:45:02  RTO     57:0x29015c  4.5   4.2   0.0   1     0.0  0.2  0.2  558     131    2224  5    4570  11
169      15:56:14  RTO     58:0x90d618  7.2   5.9   0.0   1     0.1  1.2  1.2  539     90     1602  2    4439  6
219      11:33:33  *User   93:0x8c6018  0.1   0.1   0.0   1     0.0  0.1  0.1  3       3      20    0    23    0
220      13:04:23  *Backup 98:0x4f1018  1.6   1.3   0.0   0     0.0  0.0  0.0  140     110    2567  0    8519  0
221      13:04:24  Backup  98:0x4f211c  0.1   0.0   0.0   0     0.0  0.0  0.0  0       0      0     0    1     0
222      13:18:01  Plog    102:0x8f44b8 10.9  10.3  0.0   1     0.0  0.5  0.5  755     73     6647  8    11585 14


Max Plog       Max Llog      Max Dskflush  Avg Dskflush  Avg Dirty    Blocked
pages/sec      pages/sec     Time          pages/sec     pages/sec    Time
200            200           6             69            0            0
Abb. 4: Beispielausgabe des Informix Kommandos onstat -g ckp.

Durch die Erweiterung der sysmaster Datenbank um die beiden Tabellen syscheckpoint und sysckptinfo kann man alternativ auch über ein selbst erstelltes SQL-Statement auf die gewünschten Informationen zugreifen.

Im Folgenden werden nun die wichtigsten Aussagen des Kommandos onstat -g ckp beschrieben, wie in Abbildung 4 zu sehen ist:

Danach folgen einige statistische Werte, wie z. B. Dirty Buffers = Anzahl der Buffer Pages, die auf Platte geschrieben wurden oder Total Time = komplette Dauer eines Checkpoint Requests in Sekunden.

Fazit

IBM hat den Schwerpunkt der neuen Funktionen der Version 11 ganz gezielt auf Performance und Skalierbarkeit, Reduktion des Administrationsaufwands sowie auf Ausfallsicherheit gelegt. Dadurch kommen die langjährigen, bereits bekannten Stärken des IDS, die effiziente Administration, Zuverlässigkeit und hochskalierbare Architektur besonders den Unternehmen zu Gute, die einen 24x7-Betrieb auf höchstem Niveau benötigen.

Alle hier vorgestellten Erweiterungen des Datenbankservers IDS 11 gehen einher mit einer Arbeitserleichterung für den Datenbankverantwortlichen. Damit ist ein weiterer Schritt in die von IBM propagierte „Administration Free Zone“ getan.

In einer der kommenden Ausgaben beleuchten wir die neuen Hochverfügbarkeitslösungen, die unter dem Codenamen MACH11 in den Informix Dynamic Server 11 integriert wurden.

Manfred Stöb (info@ordix.de).