Für den Administrator

Speicher ist voll – was macht die Datenbank?

Bei den heutigen Storage-Kapazitäten im Terabyte-Bereich sollte der Speicher ja gar nicht mehr voll werden. Leider passiert dies dennoch, wenn auch nur sehr selten. Ab der Version 5.7.05 ist eine verbesserte Behandlung dieser Fälle durch den Datenbankserver realisiert.


Datenbankwachstum

Eine Vergrößerung des Datenraums (.ca1) findet statt, wenn entweder die Menge an freien Segmenten in der Datenbank ein bestimmtes Limit unterschreitet oder für ein BLOB kein ausreichend großer zusammenhängender Speicherbereich frei ist. Das Limit wird dynamisch festgelegt und beträgt 1% der Datenbankgröße, jedoch wird dieser Wert auf den Bereich zwischen 512 KB und 16 MB beschränkt. Fällt der freie Speicher unter dieses Limit, erfolgt eine Vergrößerung um den Limitwert.

Datenbank     Limit    Erweiterung
   5 MB      512 KB      512 KB
 200 MB        2 MB        2 MB
   1 GB       10 MB       10 MB
  50 GB       16 MB       16 MB

Bei der Erweiterung für ein BLOB beträgt die Erweiterung die Summe aus der unkomprimierten Größe des BLOBs plus den Limitwert. Bei einer Datenbank mit 1 GB Größe und einem neuen BLOB mit 20 MB findet demnach eine Erweiterung um 30 MB statt.

Der Vorgang der Erweiterung beinhaltet auch die Initialisierung des zusätzlichen Speicherbereichs in der Datenbank und verursacht daher eine Reihe von I/O-Operationen. Diese finden jetzt nicht mehr unmittelbar bei der Anforderung von freien Segmenten statt, sondern werden im Hintergrund durch den Update-Thread der Datenbank vorgenommen. Dadurch beschleunigen sich besonders Massenimporte, da eine Operation nicht mehr auf die erfolgreiche Vergrößerung warten muss. Außerdem wird vermieden, das die Segmentinitialisierung zeitgleich mit einem Update-Event stattfindet, was bisher zu einer I/O-Lastspitze führte.

Kein freier Speicher verfügbar

Falls der Erweiterungsvorgang mangels verfügbarem Massenspeicher fehlschlägt, wird die Warnung “Database expansion failed” geloggt. In diesem Fall wiederholt der Server den Versuch einer Erweiterung in Abständen von jeweils einer Minute, bei erneuten Fehlschlägen wird die Warnung allerdings nicht jedesmal neu generiert. Sofern auf dem Datenträger noch Platz geschaffen werden kann, läßt sich das Speicherproblem ohne zusätzliche Eingriffe beseitigen.

Sofern das angeforderte freie Segment beziehungsweise die Gruppe freier Segmente (beim BLOB) außerhalb der aktuellen Größe der .ca1 liegt, wird zusätzlich ein Test auf eine erfolgreiche Größenänderung der Datenbank durchgeführt. Schlägt dieser Test fehl, kann die Datenbank voraussichtlich nicht erfolgreich erweitert werden – damit ist auch eine Speicherung des neuen Segments in der Datenbank nicht möglich. Zur Vermeidung von potentiellen Datenverlusten wird die Datenbankoperation und die laufende Transaktion abgebrochen, der Benutzer abgemeldet und der Error “Database free space exhausted” geloggt.

Der Erweiterungstest kann nur erfolgen, wenn Schreib-/Lesezugriff auf die Datenbank besteht. Ist die Datenbank im Nur-Lesen-Betrieb, beispielsweise im Backup-Modus, während einer Diagnose oder der Hot-Standby-Synchronisation, wird der Erweiterungstest nicht durchgeführt – in diesem Fall kann die notwendige Erweiterung erst erfolgen, wenn die Datenbank wieder beschreibbar ist.

Problembehandlung

Falls die Datenbank nicht erweitert werden kann (Warnung “Database expansion failed”), sollte so rasch wie möglich Platz auf dem Datenträger geschaffen werden. In keinem Fall sollte die Datenbank geschlossen, der Datenbankserver gestoppt oder das System heruntergefahren werden, bevor wieder ausreichend Speicherplatz verfügbar ist. Bei Datenträgern, auf denen sich ausschließlich die Datenbank befindet, kann präventiv eine Dummy-Datei angelegt werden, die im Notfall gelöscht wird und somit freien Speicherplatz beschafft.

3 Kommentare

3 Kommentare “Speicher ist voll – was macht die Datenbank?”

  1. Und wenn wirklich kein Platz mehr ist ?
    Einbau einer neuen Festplatte und Übertragung der Datenbank wird wohl ohne Herunterfahren nicht gehen !
    (Wir können den Kunden ja nicht zwingen, rechtzeitig sein System aufzurüsten)

Kommentar abgeben