Innovation oder Rechenleistung?

Innovation oder Rechenleistung?

Auf der Suche nach einer alternativen Möglichkeit, SAP-Transaktionsdaten aus einem SAP System für ein Online Reporting auszuwerten, kamen wir auf die Idee, mal den neuen Microsoft SQL Server 2016 auszuprobieren. Bisher wurde für diesen Zweck eine SAP-HANA Datenbank verwendet.

Zu diesem Zeitpunkt stand nur eine relativ finale Preview des SQL Servers 2016 zur Verfügung, daher fand der Test mit dieser Version statt. Der Preview war relativ schnell auf einer Maschine in der Azure Cloud installiert. Als Testmaschine wurde eine VM Standard DS13_v2 (8 Cores, 56 GB Memory) verwendet.

Die Transaktionsdaten für die Auswertung wurden über eine CSV-Datei in den SQL Server importiert. Insgesamt wurden so fast 26 Millionen Datensätze importiert.

Nach Anpassung der SQL-Abfrage für den SQL Server und den ersten Tests war die Ausführungszeit mit über einer Minute katastrophal.

Durch Einfügen zusätzlicher Indizes und Optimierung der SQL-Abfrage konnte die Ausführungszeit immerhin auf unter 15 Sekunden verbessert werden. Das war zwar eine deutliche Steigerung, aber im Vergleich zu der bisher verwendeten SAP-HANA Datenbank, die die Abfrage auf die gleichen Daten in unter einer Sekunde schaffte, immer noch nicht befriedigend. Das Anlegen der Tabelle als eine InMemory Tabelle brachte leider auch keinen weiteren Performance Gewinn.

Aber warum ist die HANA Datenbank so viel schneller als die MSSQL Server Datenbank. Klar, die HANA Datenbank läuft auf einer dedizierten Hardware und ist daher von der Hardware nicht direkt vergleichbar. Aber dies kann nicht der einzige Grund sein.

Hauptgrund für die bessere Performance ist eine andere Organisation der Daten in der Datenbank selbst. Daten in der HANA-DB werden vor allem als Column-Store gespeichert und nicht wie in einer klassischen SQL-Datenbank als Row-Store.

Eine Datenbank stellt die Daten als zwei dimensionale Tabellen dar. Im Hauptspeicher und auf einer Festplatte müssen die Daten aber sequenziell in eindimensionaler Form abgespeichert werden. Ein Row-Store speichert daher Zeile für Zeile ab, ein Column-Store speichert seine Daten Spalte für Spalte (siehe Abbildung)

Abbildung 1

 

Die spaltenweise Speicherung hat den Vorteil, dass einzelne Spalten sehr großer Tabellen sehr schnell geladen und Berechnungen (z.B. Summen) darauf sehr effizient ausgeführt werden können. Das Parallelisieren der Operation lässt sich hier wesentlich besser umsetzten.

Ein weiterer Grund, warum ein Column-Store in manchen Bereichen effizienter ist, ist die Kompression. Durch die Spaltenweise Speicherung lassen sich die Daten effektiver komprimieren (siehe Abbildung).

Abbildung 2

 

Die Komprimierung bietet zwei Vorteile:

1.      Die Daten werden komprimiert gespeichert und benötigen so deutlich weniger Platz im Hauptspeicher.

2.      Es wird so automatisch ein Index für jede Spalte der Tabelle erstellt.

Spalten-orientierte Tabellen haben allerdings auch Nachteile:

1.      Das Einfügen neuer Zeilen ist nicht so effizient.

2.      Das Lesen ganzer Zeilen mit vielen Spalten ist langsamer.

 

Diese Nachteile spielen aber normalerweise bei der Analyse von Massendaten keine Rolle.  

Auch der Microsoft SQL Server unterstützt Column-Store Tabellen seit der SQL Server Version 2012. Diese Version hatte aber noch einige Einschränkungen, die mittlerweile aber behoben sind.

Eine Column-Store Tabelle war im SQL Server schnell angelegt und die vorhandenen Daten wurden in die neue Tabelle importiert. Von der Verwendung unterscheidet sich eine Column-Store Tabelle nicht von einer Row-Store Tabelle. Daher konnte die ursprüngliche Abfrage einfach verwendet werden.

Das Ergebnis: Die Abfrage dauert unter zwei Sekunden und das ohne jegliche Optimierungen. Laut der Aussage von Microsoft werden die Abfragen bis zu 10-mal so schnell ausgeführt. In unserem Fall war es sogar der Faktor 30 gegenüber der ursprünglichen Abfrage.

Mein Fazit: Manchmal ist es hilfreicher, auf neue und intelligentere Lösungen zu setzten, anstatt Probleme ausschließlich über mehr Rechenleistung lösen zu wollen. In unserem Fall ist der Column-Store die Innovation und HANA benutzt diese Technologie sehr effizient.

Autor: Rüdiger Gutfleisch, Software Architekt bei Realtech

Kontakt:mailto:Ruediger.Gutfleisch@realtech.com

Comments

Schreibe einen Kommentar

Your email address will not be published. Required fields are marked *