Ulrichs Consulting Blog abonnieren

MariaDB 10.3 und MariaDB TX 3.0

1. August 2018

Nachdem seit 25. Mai 2018 die Version 10.3 des MariaDB Servers und MariaDB TX 3.0 als Komplettpaket für den Einsatz in unternehmenskritischen Anwendungen zur Verfügung stehen, ist es Zeit über ein paar erste Erfahrungen mit dieser Version zu berichten.

Die wesentliche Erweiterung in Version 10.3 ist die weitgehende Kompatibilität mit PL/SQL-Prozeduren. MariaDB kann jetzt mit Hilfe des SQL-Mode ORACLE in den Modus für die Erstellung von PL/SQL-Prozeduren gesetzt werden. Damit können PL/SQL-Anwendungen sehr einfach von Oracle DB nach MariaDB portiert werden. Im Zuge dieser Erweiterungen wurden auch Sequenzen in MariaDB eingeführt, so dass damit jetzt auch eine Alternative zu AUTO-INCREMENT besteht.

Als weitere wichtige Erweiterung stehen jetzt versionierte Tabellen (System Versioned Tables) zur Verfügung.

PL/SQL Kompatibilität

Ab Version 10.3 unterstützt MariaDB für Stored Routines neben der SQL/PSM basierten Syntax, die seit langem unterstützt wird, auch die PL/SQL-Syntax von Oracle in weitem Umfang. Um Prozeduren in PL/SQL-Syntax erstellen zu können, wurde mti Version 10.3 ein neuer SQL_Mode ORACLE eingeführt. Vor der Erstellung einer PL/SQL-Prozedur muss in der Session dieser SQL_Mode gesetzt werden. Damit wird der Parser angewiesen die folgenden Anweisungen als PL/SQL zu interpretieren. Da es syntaktische Überschneidungen zwischen SQL/PSM und PL/SQL gibt, ist diese Modus-Umschaltung erforderlich. Zur Verwendung von PL/SQL-Prozeduren ist allerdings diese Modus-Umschaltung nicht erforderlich. Desweiteren können SQL/PSM und PL/SQL in einem Server koexistieren und auch gemeinsam genutzt werden, was eine hohe Flexibilität in der server-seitigen Programmierung erlaubt.

Die PL/SQL-Kompatibilität erleichtert Anwendern, die umfangreiche PL/SQL-Bibliotheken nutzen, den Umstieg auf MariaDB. Damit steht auch für diese Anwendergruppe eine leistungsfähige Open-Source-Datenbank als Migrationsziel zur Verfügung. Details zur PL/SQL-Kompatibilität findet man jeweils aktuell im MariaDB Knowledgebase Artikel SQL_MODE=ORACLE From MariaDB 10.3.

Die Entwicklung der PL/SQL-Kompatibilität wurde weitgehend mit getragen von der Development Bank of Singapore (DBS), die ihre gesamten PL/SQL-Prozeduren nach MairaDB TX migriert hat. Nähere Informationen dazu findet man im Whitepaper und im Video-Mitschnitt der Präsentation der DBS an der diesjährigen User Konferenz M|18 in New York.

Sequenzen

Mit MariaDB 10.3 wurden in MariaDB Sequenzen eingeführt, wie sie von Oracle bekannt sind. Diese Sequenzen können sowohl in PL/SQL wie auch in SQL/PSM Syntax benutzt werden und stellen eine Alternative zu AUTO_INCREMENT dar. Sie unterliegen auch nicht den Beschränkungen, die von AUTO_INCREMENT her bekannt sind. Sequenzen in MariaDB werden über die SEQUENCE Storage Engine realisiert.

Um eine Sequenz zu nutzen, wird diese mit CREATE SEQUENCE angelegt. Dabei können table_options - wie bei CREATE TABLE - angegeben werden. So kann mit ENGINE=... festgelegt werden, mit welcher Storage Engine die Sequenz persistiert werden soll. Da die Persistierung absturzsicher sein sollte, bieten sich hier InnoDB und ARIA an.

System Versioned Tables

In vielen Anwendungsbereichen werden Daten versioniert bzw. müssen aufgrund regulatorischer oder gesetzlicher Auflagen versioniert und für eine bestimmte Zeit aufbewahrt werden. In der Vergangenheit war dies nicht so einfach möglich entweder haben Anwender dieses Problem applikatorisch gelöst und jeweils statt eines Updates einen neuen Satz mit den geänderten Daten erzeugt und den vorherigen als nicht aktiv gekennzeichnet oder die historischen Versionen applikatorisch oder mittels Triggern in eine History-Tabelle verlagert. Beide Vorgehensweisen haben einige Nachteile. Im ersten Fall werden die Tabellen zunehmend größer und damit die Zugriffszeiten länger oder man musste im zweiten Fall jeweils in der Applikation zwischen aktuellen und historischen Daten unterscheiden.

Mit den System Versioned Tables kann man das Versionierungsproblem dem Datenbankserver überlassen. Alles was dazu erforderlich ist, ist die Tabelle als versionierte Tabelle anzulegen bzw. dahin zu ändern. MariaDB unterstützt dazu die Syntax des SQL Standards SQL:2011 wie auch eine eigene vereinfachte Syntax. Beispiele dazu finden sich im MariaDB Knowledge Base Artikel System-Versioned Tables. Ein wesentlicher Vorteil der System Versioned Tables ist die Möglichkeit der Partitionierung auf Basis der Version mit einer aktuellen Partition und einer oder mehreren historischen Partitionen.

Upgrade auf MariaDB 10.3

Wer bereits MariaDB 10.1 oder 10.2 im Einsatz hat kann mit wenig Aufwand auf MariaDB 10.3 umsteigen. Die Upgrade-Prozedur von 10.2 nach 10.3 ist im zugehörigen MariaDB Knowledge Artikel Upgrading from MariaDB 10.2 to MariaDB 10.3 detailliert beschrieben. Auch beim Upgrade von 10.1 kann so verfahren werden. Die Erfahrung mit einigen Migrationen zeigt, dass ein Zwischenschritt über 10.2 nicht erforderlich ist. Allerdings sollte die Einstellungen der System-Variablen deren Default-Werte sich von 10.1 nach 10.2 geändert haben überprüft werden. Siehe hierzu auch den entsprechenden Knowledgebase Artikel Upgrading from MariaDB 10.1 to MariaDB 10.2.

MariaDB TX 3.0

Bei MariaDB TX 3.0 handelt es sich um das Bundle aus MariaDB 10.3, MaxScale 2.2 und Galera als komplette Enterprise-Lösung für OLTP-Anwendungen. MariaDB als Cluster oder Replication-Verbund zusammen mit MaxScale bietet hohe bis sehr hohe Verfügbarkeit und erleichtert zusätzlich den Upgrade der im Fall des Galera Clusters ohne Ausfallzeit möglich ist und bei Nutzung der MariaDB Replikation mit einer sehr kurzen Downtime auskommt.

In der Praxis kann mit MariaDB TX Cluster bei richtiger Konfiguration ein Zero-Downtime Betrieb realisiert werden.

Neue Algorithmen INSTANT und NOCOPY für ALTER TABLE

Mit dem neuen Algorithmus INSTANT ist es möglich Spalten am Ende einer Tabelle anzuhängen, ohne aktuell die Tablespace-Datei zu verändern. Damit sind solche rückwärtskompatiblen Tabellenänderungen sehr schnell und so kommt es insbesondere beim MariaDB Cluster nicht zu einem Blockieren der Anwendung, wenn auf diese Weise eine Spalte an eine Tabelle angefügt wird.

Die zweite Option NOCOPY erlaubt es einen neuen Index auf einer Tabelle zu erstellen, ohne dass dazu die Tabelle umkopiert wird, was ebenfalls Tabellenänderungen beschleunigt.

Weitere Neuerungen

Mit MariaDB 10.3 wurden auch die Storage Engines MyRocks, basierend auf der RocksDB von Facebook, und Spider, eine hochverfügbare Sharding Storage Engine, offiziell freigegeben.

Erstellen von eigenen Aggregatfunktionen: Neben den eingebauten Aggregatfunktionen wie z.B. AVG(), MAX(), MIN() können nun eigene Aggregatfunktionen erstellt werden.

Weitere Window Functions: Die Liste der in 10.2 eingeführten Window Functions wurde erweitert um die Funktionen PERCENTILE_CONT, PERCENTILE_DISC und MEDIAN.

FOR-Schleife: Verschiedene Arten der FOR-Schleife - über Schleifenvariable oder CURSOR - wurden implementiert.