Kapitel 11. Datenbanken

Datenbanken sind so vielfältig und individuell, wie wir Menschen. Man muß sie daher qualitativ beurteilen, nicht quantitativ. Eine Auswahl von Datenbanken, die sich sehr bewährt haben, mit ihren Werkzeugen, Tools, u.s.w. ist Gegenstand der Beschreibugen in den folgenden Abschnitten. Hierbei wurde Wert auf folgende Qualitätskriterien gelegt:

Eine ganze Anzahl von Datenbanken kommt hierbei in Betracht, die in ihren Eigenschaften durchaus mit kommerziellen Datenbanken mithalten können:

Eigenschaft

MySQL

PostgreSQL

SAPDB

Firebird

Pervasive

Informix

DB2

MS SQL 2000

Oracle

Verbreitung, Support

++

++

[a]

+

++

+

++

++

++

Sprachumfang

ANSI SQL 92 entry

ANSI SQL 99 entry

ANSI SQL 92

ANSI SQL 99 entry

ANSI SQL 92

ANSI SQL 92

ANSI SQL 99

ANSI SQL 99 entry

ANSI SQL 99

Orthogonalität SQL

--

++

+

+

+

+

++

+

++

Fulltext Index

+

+

-/-

-/-

-/-

-/-

++

+

++

Multidimensionale Indizes

++

++

+

+

-

+

++

+

++

GIS/Spatial Index

++

++

+

+

++

+

++

++

++

R-Tree Index

++

++

+

+

++

+

++

++

++

Grid File

++

++

+

+

++

+

++

++

++

Schreiben während Indexing

++

++

+

+

++

+

++

++

++

Transaktionen

++

++

+

+

++

+

++

++

++

Makrofähigkeiten

++

++

+

+

++

+

++

++

++

Oracle Kompatibilität

++

++

+

+

++

+

++

++

++

Locking Verhalten, MVCC

++

++

+

+

++

+

++

++

++

Verhalten bei vielen gleichzeitigen Schreibzugriffen

++

++

+

+

++

+

++

++

++

Verhalten bei langen Transaktionen

++

++

backup nicht mehr möglich

+

++

+

++

++

++

Stabilität bei hoher Last

++

++

+

+

++

+

++

++

++

Unterstützt ASYNC I/O

++

++

+

+

++

+

++

++

++

Skaliert auf mehreren CPUs

++

++

+

+

++

+

++

++

++

Synchrone Replikation

++

++

+

+

++

+

++

++

++

Load Balancing mit LVS

++

++

+

+

++

+

++

++

++

Asynchrone Replikation

++

++

+

+

++

+

++

++

++

Automatische Resynchronisation

++

++

+

+

++

+

++

++

++

GRID - Fähigkeit

++

++

+

+

++

+

++

++

++

Hot Backups

++

++

+

+

++

+

++

++

++

Automatische Query - Optimierung

++

++

+

+

++

+

++

++

++

Automatische Defragmentierung

++

++

+

+

++

+

++

++

++

Write Ahead Logs

++

++

+

+

++

+

++

++

++

Indexing Logs

++

++

+

+

++

+

++

++

++

Update/Delete Logs

++

++

+

+

++

+

++

++

++

ODBC/FreeTDS/JDBC Treiber

++/++/++

++

+

+

++

+

++

++

++

SOAP/XML-RPC/CORBA Interface

++

++

+

+

++

+

++

++

++

WebDAV, FTP, HTTP

++

++

+

+

++

+

++

++

++

XML Input/Output

++/++

++

+

+

++

+

++

++

++

++

++

+

+

++

+

++

++

++

++

++

+

+

++

+

++

++

++

++

++

+

+

++

+

++

++

++

Bemerkungen:
a. test

Bisher galten Open Source bzw. Freeware Datenbanken immer als Spielzeug. In Computer - Zeitschriften werden Geschwindigkeitsvergleiche zwischen MySQL, PostgreSQL, MS SQL, ... angestellt - nur ein Hersteller verbietet explizit solche Benchmarktests, Oracle. Aus gutem Grund. Sie spielen nämlich kaum eine Rolle. Die Ausstattung der Datenbank, insbesondere welche Arten von Indizes verwendet werden, entscheiden viel mehr über die Performance, als irgendetwas sonst. Die Mächtigkeit des SQL Dialektes, die Möglichkeit, serverseitig Programme laufen lassen zu können, Möglichkeiten zum Feintuning, wie z.B. Vergrößerung der Sortierpuffer, können ebenfalls in erheblichen Umfange die Performance verbessern. Desweiteren bestimmen das Vorhandensein von Transaktionsmechanismen, Möglichkeiten zum stufenweisen "Rollback" bei verschachtelten Transaktionen, Authentifizierungsmöglichkeiten gegen AD, PDC, LDAP, ..., die Vielseitigkeit der Makrosprache, die Bedienungswerkzeuge-, Administrations-, und Programmierwerkzeuge und viele, versteckte Details den Alltag des Datenbankadministrators. So z.B. sperren bestimmte Datenbanken beim Reindizieren oder update statistics, optimize table die Tabelle, blockieren beim Schreiben in (offene Transaktion) alle Lesezugriffe, unabhängig von dem Transaktionsmodus (MS SQL 2000+ mit Access - Eingabe/Ausgabe). Andere Datenbanken knicken in der Performance zusammen, sobald mehr als 5 User gleichzeitig aktiv sind, wieder andere beherrschen kein hot backup, also Backup der Daten tagsüber, im laufenden Betrieb, ohne daß die Datenbankperformance leidet. Wieder andere werden im Laufe der Zeit immer langsamer, ohne daß es einen erkennbaren Grund gibt. Welche Techniken dahinter stecken, welche Werkzeuge und Möglichkeiten es gibt, zeigen die nachfolgenden Abschnitte.

11.1. Hot Backup Technik

Betrachten wir z.B. MS SQL 2003, so , unterstützt diese hot backups. Der Datenbankandministrator hat den Eindruck, daß die Datenbank ohne Einschränkungen weiter arbeitet. Dem ist nicht so. Intern wird die die Datenbank entweder ganz oder teilweise für Schreibzugriffe gesperrt. Damit die Datenbank trotzdem noch weiter funktionieren kann, werden sämtliche Transaktionen, also inserts und updates solange in sog. transaktions logs und redo logs (Oracle) , bzw. physical logs, logical logs (Informix) genannt, gespeichert, wo sie, zumeist in einem in Klartext lesbarem Format, abgelegt sind. Sobald eine Datenbank - Query durchgeführt wird, so wird die reguläre, gesperrte Datenbank durchsucht, aber auch anschließend die Logs, bevor das Ergebnis ausgegeben wird. Je länger ein Backup dauert, umso langsamer wird dann der Datenbankserver, insbesondere, wenn in die Datenbank sehr viel geschrieben wird. Damit der Effekt nicht so extrem ist, wird die Datenbank in sog. pages logisch aufgeteilt. Das Backup - Programm erlaubt dann dem Datenbankserver teilweise wieder das Schreiben in die Datenbank, und zwar überall, nur nicht in die page (MS SQL), oder den split block (Oracle), die gerade gesichert wird (page lock). Es versteht sich von selber, das die Datenbank in sich selber inkonsistent wird. Daher ist es extrem wichtig, bei Beendigung des Backups, alle Änderungen, die in transaktions logs und redo logs aufgelaufen sind, in die Datenbank einzuarbeiten, was bei sehr vielen Schreibzugriffen dazu führen kann, daß dies auch nach Abschluß des Backups sehr lange dauert.

Lang laufende Transaktionen, z.B. für die Erstellung von Statistiken, Optimierungen, Analysen sind das Ende jedes hot backup, weil dieses gewöhnlich nur nach dem checkpointing (Oracle, PostgresSQL, Informix, z.B.) erfolgen kann, also dann, wenn die Datenbank für einen Moment in sich konsistent ist, keine Transaktion mehr läuft. Wenn mehrere lang laufende Transaktionen sich verschachteln, gibt es einen solchen konsistenten Zustand nicht. Das bedeutet, daß man zwar ein hot backup durchführen kann, jedoch nach einem Crash, wenn die transaktions logs in die Datenbank eingearbeitet werden, alle Datensätze verloren sind, bis zu dem Punkt, wo die Datenbank in sich einmal (zufällig) konsistent gewesen ist. Microsoft empfielt daher, Transaktionen möglichst kurz zu halten, sodaß bei vielen ausgeführten Transaktionen es immer "Lücken" dazwischen gibt, in denen ein konsistenter Zustand erreicht wird, ab welchem dann die Daten so gesichert werden können, sodaß es beim Wiederherstellen keine Probleme gibt.

Informix, z.B. vermerkt in den physical logs den Zustand des Datensatzes vor der Änderung, und in den logical logs werden die Datensätze nach der Änderung gespeichert, mit Ausnahme bei update, z.B., wo der Datensatz vor und nach seiner Änderung gespeichert abgelegt wird. Somit ist sowohl rollback, als auch rollforward von Transkationen oder Teilen davon möglich. Eine wenig beachtete Eigenschaft von SQL - Datenbanken ist, daß nicht alle versprochenen Features mit allen möglichen Typen von Indizes verfügbar sind.

PostgreSQL z.B. unterstützt write ahead logging (WAL), was den redo logs, transaction logs entspricht, jedoch nur in Verbindung mit b-tree Indizes, nicht jedoch mit HASH, R-Tree, GiST, FULLTEXT, ... PostgreSQL benötigt WAL nur im Falle eines Crashes. Stattdessen unterstützt PostgreSQL multi versioning concurrency control (MVCC), auch bekannt als snapshot isolation. Jede Query wird, ohne daß Datensätze gelockt werden müssen auf einem Schnappschuß der kompletten Datenbank ausgeführt. Auch Inserts, Updates werden zunächst isoliert ausgeführt. Hinterher wird geschaut, ob eine Query evtl. mit einem insert oder update kollidiert ist. In diesem Falle wird die Transaktion rückgängig gemacht. Ein hot backup unter PostgreSQL läuft immer auf einem in sich konsistenten Schnappschuß der kompletten Datenbank ab. Der Administrator kann also mit einer Transaktion, wo die komplette Datenbank gesichert wird, im laufenden Betrieb gefahrlos sein hot backup durchführen. Auch lang andauernde Transaktionen und ein hot backup sind kein Problem, weil MVCC dafür sorgt, daß sich der Datenbankserver immer in einem konsistenten Zustand befindet, und man kann mit Hilfe der WALs genau festlegen, welche Zustand der Datenbank zu welchem Zeitpunkt wieder hergestellt werden soll. Dies ist kein Problem für PostgreSQL, da ja ein Snapshot immer die Daten zeigt, die Der Grund dafür liegt auch in dem OO - Kern von PostgreSQL. Mehr hierzu siehe Abschnitt 11.18.

MySQL beherrscht ebenfalls MVCC, man kann also hot backups einfach während des Betriebes machen. Die von InnoDB zusätzlich kostenpflichtig zu erwerbenden Werkzeuge, mit denen man über ein externes Programm hot backups durchführen kann, wird nicht wirklich benötigt. Jedoch kann MVCC nicht genutzt werden, wenn MySQL im Cluster, also im Master - Slave Modus arbeitet, ebenso entfallen dann Transaktionen und Foreign Keys

Datenbanken, wie Firebird, Informix, LogicSQL beherrschen ebenfalls MVCC und man kann Datenbanken stets im laufenden Betrieb sichern. Oracle beherrscht MVRC (Multi Versioning Read Concurrency) beherrscht. Unter Oracle kann nur eine Transaktion schreiben, und viele lesend zugreifen, ohne sich zu behindern, bei MVCC können mehrere Transaktionen gleichzeitig schreibend und lesend zugreifen. Mehr zu hot backups unter Oracle, siehe Oracle hot backup

Objektorientierte Datenbanken arbeiten völlig anders. Hier existieren von jedem einzelnen Datensatz immer mehrere Versionen, daher ist jede OO - Datenbank immer hot backup - fähig. Im Gegensatz zu MVCC, wo das versioning sich stets auf Gruppen von Datensätzen bezieht, nämlich diejenigen, die innerhalb einer Transaktion betroffen sind, so können OO - Datenbanken zu jedem Datensatz attribute anfügen, der genau Auskunft darüber gibt, wann wo und von wem welcher Datensatz geändert wurde - eine völlig andere Technik, siehe Abschnitt 11.30. Diese Technik wird inzwischen auch in Filesysteme eingeführt, siehe Abschnitt 7.23.