Parallelverarbeitung durch Transbase® Dynamic Multithreading

Transbase® Dynamic Multithreading wurde konzipiert, um die Möglichkeiten von Multiprozessorarchitekturen (Multi-Core-CPUs heute auch in Notebooks Standard) auch bei rechenintensiven Abfragen nutzen zu können.

Dies erfolgt durch die dynamische Parallelisierung bestimmter dafür geeigneter Teilberechnungen. Über Transbase® Dynamic Multithreading werden die ausgewählten Teilberechnungen in mehrere gleichartige Threads aufgeteilt, wobei die Parallelität nahezu beliebig verändert werden kann. Die Aufteilung erfolgt über ASYNC (spezieller Operatorbaumknoten), der sämtliche Aspekte der Parallelverarbeitung in sich konzentriert.

Aufgaben von ASYNC:

  • Bereitstellung eines Tupelpuffers, in die darunterliegende Knoten ihre Tupel ablegen und aus denen darüberliegende Knoten ihre Tupel abholen.
  • Starten und beenden von Threads und Synchronisation der Pufferzugriffe. Die Anzahl der generierten Threads ist dynamisch und hängt von der Verarbeitungsgeschwindigkeit der Threads ab.

Ergibt sich an einer Stelle im Operatorbaum ein 'Stau', so werden zum Abbau des Staus weitere Threads kreiert. Dadurch ergibt sich ein dynamisches Gleichgewicht der Threads mit der Folge, dass sie weder wegen voller noch wegen leerer Puffer zu oft warten müssen.

Während also bei vielen gleichzeitigen Anfragen schon die Verteilung dieser Anfragen auf verschiedene Transbase® Kernel-Prozesse für die Ausnutzung der CPUs sorgt, ist es im Fall geringer Anfrage-Parallelität Aufgabe des einzelnen Prozesses, mehrere CPUs gleichzeitig auszunutzen.

Dies geschieht typischerweise durch Zerlegung des Prozesses in mehrere Threads, die dann parallel an einer einzelnen Query arbeiten können. Die Zerlegung in Threads erfolgt über zwei verschiedene Ansätze:

1. Zerlegung in verschiedenartige Threads

z.B. IO-Threads, Restriktions-Threads, Sortier-Threads, etc. Hierbei sind der Parallelität gewisse Grenzen gesetzt, die sich durch die verschiedenen Funktionen der Threads ergeben.

Dynamisches Multithreading zur Query-Optimierung

2. Zerlegung in mehrere gleichartige Threads

Hier kann die Parallelität fast beliebig verändert werden, soweit eine gewisse Datenparallelität gegeben ist. Diese Zerlegung erfolgt als Dynamisches Multithreading (siehe Grafik), wobei die Anzahl der parallel arbeitenden Threads dynamisch während der Ausführung angepasst wird.

Die Parallelverarbeitung erstreckt sich insbesondere auch auf die IO-relevanten Phasen der Query-Verarbeitung. Dadurch wird automatisch auch der IO-Durchsatz deutlich gesteigert, so dass große RAID-Systeme optimal ausgelastet werden können. IO-relevant sind insbesondere die B-Baum-Algorithmen für den Blattzugriff - Sequential Scan und Intervallzugriff -  die Hypercube-Algorithmen - multidimensionaler Zugriff - sowie die Sortieralgorithmen, die je nach Sortiervolumen eine hohe IO-Last erzeugen können.

Lesen Sie mehr zu Transbase® in unserem Info-Center.