PostgreSQL 8: Schneller und flexibler
Artikel erschienen in Swiss IT Magazine 2005/03
Seit Mitte Januar ist die neuste Version des freien Datenbankservers PostgreSQL endlich verfügbar. Sie bringt unter anderem einen nativen Windows-Service, Savepoints, Point-in-Time-Recovery, flexible Tablespaces, verbessertes Buffer-Management und schnellere Wartungsfunktionen mit. Damit kann PostgreSQL die eigene Position gegenüber der Konkurrenz wie MS SQL oder MySQL MaxDB weiter stärken.
Eines der grössten Mankos, vor allem in den Augen vieler Entwickler, war der fehlende Windows-Support von PostgreSQL. Zwar liess sich PostgreSQL mit Hilfe eines Subsets des Unix-Emulators Cygwin unter Windows betreiben, allerdings war dies vor allem wegen der nicht ganz einfachen Installation für viele Entwickler zu umständlich. Dieses Problem wurde nun behoben: Die Version 8.0 läuft nun nativ als Windows-Service. Zur Installation wird ein MSI-Installer (www.pgfoundry.org/projects/pginstaller) verwendet, der die Datenbank auf Windows 2000, Windows XP sowie Windows 2003 einrichtet.
Die Funktionalität von PostgreSQL wurde im Rahmen der Version 8 vor allem bei den Transaktionen sowie der Datensicherheit stark erweitert. So unterstützt PostgreSQL nun sogenannte Savepoints. Sie erlauben, grosse Transaktionen in kleinere Teiltransaktionen aufzuteilen, die ausgeführt werden, selbst wenn eine dieser Teiltransaktionen fehlschlägt. In früheren Versionen war dieses Verhalten, das vor allem bei der Fehlerbehandlung in grossen Transaktionen nützlich ist, noch nicht verfügbar, und so wurde im Fehlerfall die komplette Transaktion zurückgerollt.
Die Steuerung einer Transaktion mit Hilfe der Savepoints ist verhältnismässig simpel. Ein Savepoint wird mit SAVEPOINT mein_savepoint; gestartet. Nachher können beliebig viele Aktionen ausgeführt werden. Tritt während einer dieser Aktionen ein Fehler auf oder stellt man fest, dass das Resultat der Operationen unerwünscht ist, werden mit ROLLBACK TO mein_savepoint; sämtliche Aktionen rückgängig gemacht, die seit dem Setzen des Savepoint mittels SAVEPOINT mein_savepoint; ausgeführt wurden. PostgreSQL setzt dann die Arbeit hinter ROLLBACK TO mein_savepoint; fort, ohne dass die gesamte Transaktion abgebrochen wird.
PostgreSQL hält, um eine grössere Datensicherheit zu gewährleisten, ein sogenanntes Write Ahead Log (WAL) vor. Dieses Logfile enthält sämtliche Änderungen an den Daten einer Datenbank, damit im Falle eines Absturzes des Servers die Daten wieder rekonstruiert werden können. Dies ist nötig, da PostgreSQL in der Zeit zwischen einzelnen Checkpoints Daten nicht auf die Festplatte schreibt, sondern diese für eine gewisse Zeit im Cache vorhält. Während die bisherigen Mechanismen für die meisten Desaster ausreichen, konnte man im Fall eines Festplattenschadens nur ein Backup zurückspielen oder die replizierten Daten von einem Slave verwenden. Die Daten, die in der Zeit zwischen dem Backup und dem Ausfall verändert wurden, waren ohne einen Slave verloren. Dieses Problem lässt sich nun mit Hilfe einer kontinuierlichen Archivierung der WAL-Dateien auf ein externes Medium lösen. Im Falle eines Ausfalls können dann mit Hilfe der WAL-Dateien die fehlenden Daten bis zu einem gewünschten Zeitpunkt rekonstruiert werden.
Weitere Verbesserungen wurden bezüglich der Arbeitsgeschwindigkeit von PostgreSQL vorgenommen. So wurde einerseits der Caching-Algorithmus auf das Adaptive-Replacement-Cache-Verfahren umgestellt. Dieses sorgt im Vergleich zur früher verwendeten Strategie, welche die zuletzt benutzten Speicherseiten im Cache hielt, für eine bessere Skalierbarkeit, da nun nicht nur der zeitliche Abstand der Nutzung berücksichtigt wird, sondern auch deren Häufigkeit. Für eine weitere Beschleunigung und eine ausgeglichenere Last auf dem Server sorgt ein Background-Writer. Dieser schreibt nun kontinuierlich geänderte Daten auf die Festplatte, während dies in früheren Versionen nur alle paar Minuten auf einmal während der Erzeugung eines Checkpoints passiert ist. Zudem lässt sich das Wartungsprogramm VACUUM so steuern, dass die Wartungszyklen über eine längere Zeit verteilt werden, womit das Löschen unbenötigter Daten ressourcenschonender ablaufen kann.
nativer Windows-Service
Unterstützung für Subtransaktionen
Point-in-Time-Recovery
Tablespaces lassen sich auf andere Festplatten verlagern
verbessertes Cache-Management
kontinuierliches Schreiben von Checkpoint-Daten
feinere Steuerung von VACUUM
Änderungen von Spaltentypen mit ALTER TABLE möglich
neue Version von PL/Perl unterstützt u.a. Triggers
COPY unterstützt CSV-Daten