19 Existierende Mehrrechner-Datenbanksysteme
Tandem-Rechner verwenden traditionellerweise das Guardian-Betriebssystem, das u.a. sehr effiziente Kommunikationsmechanismen bereitstellt. Daneben wurde eine fehlertolerante Unix-Version realisiert. Beide Betriebssysteme basieren auf einem gemeinsamen Kern, dessen Komponente TMF (Transaction Management Facility) Dienste der Transaktionsverwaltung TP-Monitoren und DBS anbietet. Dazu zählt vor allem die Presumed-Abort-Variante eines verteiltes Zwei-Phasen-Commit-Protokolls. Die Auflösung globaler Deadlocks erfolgt über einen Timeout-Ansatz.
Tandem unterstützt bereits seit Anfang der achtziger Jahre verteilte Datenbanken, zunächst für das satzorientierte System Encompass [Bo81] und seit 1987 für das relationale NonStopSQL [Ta89]. Bei lokaler Verteilung repräsentiert NonStopSQL ein paralleles DBS vom Typ Shared-Nothing. Relationen können horizontal über bis zu 200 Knoten partitioniert werden; für Indexstrukturen (B*-Bäume) erfolgt eine analoge Partitionierung. Zunächst lag der Haupteinsatz von NonStopSQL im Bereich von OLTP-Anwendungen. Durch die in den letzten Versionen erfolgte umfassende Unterstützung von Intra-Query-Parallelität lassen sich jetzt jedoch auch komplexe DB-Anfragen - z.B. zur Entscheidungsunterstützung (decision support) - effizient bearbeiten. Die parallele Join-Verarbeitung kann sowohl über eine dynamische Replikation (Kap. 18.3.1) als auch über eine dynamische Partitionierung (Kap. 18.3.2) der Eingaberelationen erfolgen. Als lokale Join-Methode werden neben Nested-Loop- und Sort-Merge- auch Hash-Joins unterstützt. Hierzu wurde ein speicheradaptives Hash-Join-Verfahren (Kap. 18.3.3) realisiert, das die gleichzeitige Bearbeitung von OLTP-Transaktionen zuläßt [ZG90]. Für Mehr-Wege-Joins werden in NonStopSQL zur Begrenzung des Suchraums ausschließlich rechts-tiefe Operatorbäume (Kap. 18.3.4) berücksichtigt.
Abb. 19-7 zeigt die bei der Ausführung von SQL-Operationen involvierten Systemkomponenten, wenn keine Intra-Query-Parallelität verwendet wird. Dabei werden der SQL-Executor und das SQL-Dateisystem im Prozeß des Anwendungsprogrammes ausgeführt. Daneben besteht für jede DB-Platte ein eigener Disk-Prozeß, der sämtliche Datenzugriffe auf die Platte durchführt sowie für die Puffer- und Sperrverwaltung der betreffenden Daten verantwortlich ist. Der SQL-Executor kontrolliert die Ausführung der vom SQL-Compiler erzeugten Ausführungspläne. Das Dateisystem verwaltet die Dateipartitionen und zerlegt die Operationen einer Relation in Teilanfragen, die auf jeweils einer Partition (Platte) vom zuständigen Disk-Prozeß bearbeitet werden können. Die Disk-Prozesse sind i.a. über verschiedene Rechner verteilt und können relationale Operatoren auf ihren Partitionen auszuführen. Dies ist wesentlich zur Reduzierung des Kommunikationsaufwandes, da durch Ausführung von Selektionen und Projektionen in den Disk-Prozessen nur die relevanten Daten an den Executor zu übertragen sind. Die parallele Query-Verarbeitung erfolgt in mehreren, parallel laufenden Hilfsprozessen (Executor Server Processes), die vom Executor koordiniert werden und ihrerseits mit den Disk-Prozessen unterschiedlicher Partitionen zusammenarbeiten [Ze90, Le91].