Was ist eigentlich MySQL und wozu kannst du es nutzen? In diesem Artikel erfährst du, welche Funktionen mit MySQL 8 neu dazugekommen sind und was es für dich bedeutet wenn du schon eine Vorgängerversion von MySQL nutzt.
Inhaltsverzeichnis
Was ist MySQL
MySQL ist das beliebteste quelloffene und kostenlose relationale Datenbank–Management System (RDBMS) weltweit. Warum? Weil es schnell, nutzerfreundlich und stabil ist.
Bereits seit 1995 im Einsatz und seit 2010 der Oracle Corporation zugehörig erfreut sich MySQL seit jeher sehr großer Beliebtheit, was auch in seinem großen Leistungsumfang begründet liegt. Seit der Übernahme durch Oracle hat sich außerdem das Projekt MariaDB abgespalten, das unter der MariaDB Foundation durch eine große Entwickler-Community als 100 Prozent MySQL-kompatibler Ersatz weiterentwickelt wird.
Woher kommt der Name MySQL?
Der Name MySQL setzt sich aus zwei Teilen zusammen: „My“ ist der Name der Tochter des Mitbegründers und „SQL“ steht für „Structured Query Language“ und bezeichnet eine Programmiersprache, mit der du auf Daten in einer relationalen Database zugreifen und diese verwalten kannst.
Was ist ein Datenbankverwaltungssystem?
Ein Datenbankverwaltungssystem ist eine Sammlung von Daten, mit dem du Daten einfach strukturieren und abrufen kannst. Beispielsweise für deine WordPress-Seite sind diese „Daten“ der Text deines Beitrages, Einstellungskonfigurationen, automatisch geladene Daten oder Informationen für registrierte User auf deiner Website. Gerade für WordPress ist MySQL das einzige, von WordPress offiziell unterstützte Datenbanksystem.
Du bist noch auf der Suche nach einem superschnellen WordPress-Hosting inklusive bestem Experten-Support? Dann schau dir einmal die WordPress-Hosting-Tarife von dogado an.
Doch welche Vorteile hast du nun mit MySQL?
MySQL ist vergleichsweise schnell und zuverlässig. Du kannst die Daten mit dem internen SQL-Befehlssatz verwalten. Es ist multi-User- und multitaskingfähig und kann auch große Datenmengen schnell bewältigen. Du kannst MySQL entweder auf einem einzelnen PC oder aber auch auf großen Netzwerken betreiben. Du profitierst von einem leicht zu verwaltendem Berechtigungskonzept und einer optimalen Performance auch bei großem Traffic-Aufkommen. Dazu kommt die hohe Flexibilität: Du kannst MySQL auf mehr als 20 verschiedenen Plattformen anwenden, darunter Linux, Windows und Mac OS.
In Webhosting-Paketen findest du MySQL-Datenbanken meist nicht nur einzeln, sondern in mehrfacher Ausführung. 5 oder sogar 300 MySQL-Datenbanken sind kein überflüssiger Luxus, sondern bieten dir mehr Möglichkeiten für deine Webprojekte und bedeuten gleichzeitig auch mehr Sicherheit. Bei den Webhosting-Tarifen von dogado stehen dir – je nach Tarif – bis zu 300 MySQL-Datenbanken zur Verfügung. Hier kommst du zu den Webhosting-Tarifen von dogado.
Datenbanksysteme – so auch MySQL – bestehen aus, klar, Datenbanken, aber auch aus Tabellen und Hilfsdaten. Außerdem stehen dir Tools zum Bearbeiten deiner Daten zur Verfügung: MySQL-Monitor und phpMyAdmin.
Der Befehlssatz von MySQL ist dem der Standard-Abfragesprache SQL sehr ähnlich.
Was kann MySQL?
Du kannst mit MySQL Daten in Tabellen anzeigen, verwalten, speichern und ändern. Leider kannst du mit MySQL die erhobenen Daten nicht in optisch ansprechender Weise darstellen lassen - da hat das System leider seine Grenzen. Dafür könntest du aber beispielsweise PHP nutzen. Einen Blogbeitrag zu PHP 8.1 findest du hier.
Einsatzarten von MySQL
Du hast mehrere Möglichkeiten, mit MySQL-Befehle auszuführen:
- Als Script (Start einer *.sql-Datei)
- In der SQL-Shell (Kommandozeilen-orientiert)
- Mittels der grafischen Benutzeroberfläche phpMyAdmin
Best Practice ist allerdings, wenn du die Befehle in Programmiersprachen einbettest. Am besten ist dafür PHP geeignet, da es mehrere spezielle Funktionen für MySQL-Datenbanken enthält. Alternativ kannst du Microsoft-Access-Anwendungen mit MySQL-Tabellen verknüpfen. So kannst du den kompletten Funktionsumfang von Access nutzen und dich über die höhere Geschwindigkeit von MySQL freuen.
Wie funktioniert MySQL?
MySQL verwaltet, zeigt, speichert und ändert Daten in Tabellen – die klassische Aufgabe eines relationalen Datenbank-Management-Systems (RDBMS). Es funktioniert dabei als Client-Server-System: Die jeweilige Datenbank ist der Server. Die Software auf der Client-Seite schickt Befehle an die Datenbank und diese führt die Befehle aus und sendet die Ergebnisse zurück an den Client.
So, ab hier wird es jetzt technischer 😉 …denn wir gehen jetzt ans Eingemachte und erläutern nun die Features, die mit MySQL 8 kamen:
MySQL 8: die neuen Features
Im Jahr 2018 erschien die MySQL-Version 8.0, die neben der erhöhten Sicherheit auch eine gesteigerte Leistungsfähigkeit mitbringt. Im Übrigen wäre nach MySQL 5.7 die Version 5.8 an der Reihe gewesen, doch dies wäre den vielen Änderungen nicht gerecht geworden, daher hat man sich für die Versionsnummer 8 entschieden.
Mit dem Versionssprung kommt auch ein erweitertes SQL-Vokabular, eine bessere Konsistenzprüfung sowie die Anbindung an dokumentierte (NoSQL-) Datenbanken einher.
Wir müssen allerdings auch sagen, dass MySQL nun nicht die allererste unter den freien Datenbanken ist, die diese Funktionen einführt – da waren MariaDB und PostgreSQL deutlich schneller bei der Umsetzung.
Wir gehen im Folgenden auf die wichtigsten Neuerungen von MySQL 8 ein:
Schnellere Performance von InnoDB
Das Subsystem InnoDB ist mit MySQL 8 zuverlässiger als zuvor. Die Statements der Datendefinitionssprache (DDL-Statements) sind nun atomar und damit stabiler - besonders im Falle eines zeitlichen Serverausfalls. Weiterhin wurden die Lese- und Schreibraten erhöht, im Speziellen bei hoher Input-Output-Last und fokussierten Hotspot-Lasten. Weiterhin lassen sich nun verschiedene Hardware-Ressourcen für einen bestimmten Task bündeln.
MySQL 8: Erhöhte Sicherheit
Die Datenbanken sind jetzt von vornherein besser abgesichert, außerdem wurden die OpenSSL-Verschlüsselung sowie die SQL-Rollen verbessert. Weiterhin können nun Parameter wie Passwortstärke und das Superuser-Privileg analysiert werden. Außerdem wird die voreingestellte Authentifizierungsmethode vom nativen Passwort auf ein Sha2-Passwort umgestellt (caching_sha2_password).
Wenn du das JSON-Format für gespeicherte Daten nutzt, so wirst du dich über eine erweiterte Syntax freuen - sowie über einen besseren Sortieralgorithmus, Teilupdates und eine JSON-Tabellenfunktion.
Common Table Expressions
Mit den Common Table Expressions – kurz CTE – kannst du komplexe Queries in kleinere Teile aufteilen, mit denen du im Anschluss leichter umgehen kannst. Du kannst sie anhand ihres Namens auch mehrfach verwenden. So reduzierst du Fehler und Redundanz.
Window Functions
Mit MySQL 8 kamen auch die Window Functions: Mit ihnen kannst du ein Fenster von Datensätzen definieren. Du erhältst im Gegensatz zu Aggregatfunktionen die Eingabezeilen nicht in einer einzelnen Ausgabezeile und du kannst auf vorige und nachfolgende Zeilen zugreifen oder Zeilen nummerieren.
Gemeinsamer Tabellenausdruck
MySQL 8.0 bietet (rekursive) Common Table Expressions (CTEs). Nicht-rekursive CTEs können als "verbesserte abgeleitete Tabellen" erklärt werden, da sie es erlauben, auf die abgeleitete Tabelle mehr als einmal zu verweisen. Ein rekursiver CTE ist ein Satz von Zeilen, der iterativ aufgebaut wird: Aus einem anfänglichen Satz von Zeilen leitet ein Prozess neue Zeilen ab, die den Satz vergrößern. Diese neuen Zeilen werden erneut in den Prozess eingespeist, wodurch weitere Zeilen erzeugt werden, und so weiter, bis der Prozess keine weiteren Zeilen mehr erzeugt.
NOWAIT und SKIP LOCKED
MySQL 8.0 bietet die Alternativen NOWAIT und SKIP LOCKED in der SQL-Sperrklausel. Wenn eine Zeile aufgrund eines UPDATE oder eines SELECT ... FOR UPDATE gesperrt ist, muss normalerweise jede andere Transaktion warten, um auf die gesperrte Zeile zuzugreifen. In einigen Anwendungsfällen besteht die Notwendigkeit, entweder sofort zurückzukehren, wenn eine Zeile gesperrt ist oder gesperrte Zeilen zu ignorieren. Eine Sperrklausel, die NOWAIT verwendet, wartet niemals darauf, eine Zeilensperre zu erhalten. Stattdessen wird die Abfrage einen Fehler auswerfen. Eine Sperrklausel, die SKIP LOCKED verwendet, wartet nicht darauf, eine Zeilensperre für die aufgelisteten Tabellen zu erhalten. Stattdessen werden die gesperrten Zeilen übersprungen und überhaupt nicht gelesen.
Absteigende Indizes
MySQL 8.0 bietet Unterstützung für Indizes in absteigender Reihenfolge. Die Werte in einem solchen Index werden in absteigender Reihenfolge angeordnet und werden vorwärts gescannt. Vor 8.0 wurde, wenn ein Benutzer einen absteigenden Index erstellt hat, ein aufsteigender Index erstellt und dieser rückwärts gescannt.
Ein Vorteil: Vorwärts-Index-Scans sind schneller als Rückwärts-Index-Scans. Ein weiterer Vorteil eines echten absteigenden Indexes ist, dass er es ermöglicht, Indizes anstelle von Filesort für eine ORDER BY-Klausel mit gemischten ASC/DESC-Sortierschlüsselteilen zu verwenden.
GROUPING
Die GROUPING()-Funktion unterscheidet zwischen Super-Aggregat-Zeilen und normalen gruppierten Zeilen. GROUP BY-Erweiterungen wie ROLLUP erzeugen Super-Aggregat-Zeilen, bei denen die Menge aller Werte durch Null dargestellt wird. Mit der Funktion GROUPING() kannst du eine Null, die die Menge aller Werte in einer Super-Aggregat-Zeile darstellt, von einer NULL in einer regulären Zeile unterscheiden.
Optimierer-Hinweise
In MySQL 5.7 wurde eine neue Syntax für Optimierungshinweise eingeführt. Mit der neuen Syntax kannst du Hinweise direkt nach den Schlüsselwörtern SELECT | INSERT | REPLACE | UPDATE | DELETE in einer SQL-Anweisung angeben, eingeschlossen in Kommentare im Stil von /*+ */. In MySQL 8.0 wird das Bild durch die vollständige Nutzung dieses neuen Stils vervollständigt:
MySQL 8.0 fügt Hinweise für INDEX_MERGE und NO_INDEX_MERGE hinzu. Damit kannst du das Verhalten der Index-Zusammenführung für eine einzelne Abfrage steuern, ohne den Optimizer-Schalter zu ändern.
Mit den Hinweisen JOIN_FIXED_ORDER, JOIN_ORDER, JOIN_PREFIX und JOIN_SUFFIX kannst du die Tabellenreihenfolge für die Join-Ausführung steuern.
Auch neu: Der SET_VAR-Hinweis setzt den Wert für eine bestimmte Systemvariable nur für die nächste Anweisung. Der Wert wird also auf den vorherigen Wert zurückgesetzt, wenn die Anweisung beendet ist.
Da sich die neuen Hinweise nicht mit SQL vermischen, können sie an vielen Stellen in einen Abfrage-String eingefügt werden. Sie haben auch eine klarere Semantik, da es sich um einen Hinweis (im Gegensatz zu einer Richtlinie) handelt.
Neue JSON-Funktionen in MySQL 8
MySQL 8.0 hat neue JSON-Funktionen hinzugefügt und verbessert die Leistung beim Sortieren und Gruppieren von JSON-Daten.
Erweiterte Syntax für Ranges in JSON-Pfadausdrücken
MySQL 8.0 erweitert die Syntax für Bereiche in JSON-Pfadausdrücken. Beispielsweise ergibt SELECT JSON_EXTRACT('[1, 2, 3, 4, 5]', '$[1 bis 3]'); [2, 3, 4].
JSON-Tabellenfunktionen
MySQL 8.0 fügt JSON-Tabellenfunktionen hinzu, die die Verwendung der SQL-Engine für JSON-Daten ermöglichen. JSON_TABLE() erstellt eine relationale Ansicht von JSON-Daten. Sie bildet das Ergebnis einer JSON-Datenauswertung auf relationale Zeilen und Spalten ab. Du kannst das von der Funktion zurückgegebene Ergebnis als reguläre relationale Tabelle mit SQL abfragen, z. B. Join, Project und Aggregation.
JSON-Aggregationsfunktionen
MySQL 8.0 fügte die Aggregationsfunktionen JSON_ARRAYAGG() zur Erzeugung von JSON-Arrays und JSON_OBJECTAGG() zur Erzeugung von JSON-Objekten hinzu. Damit ist es möglich JSON-Dokumente in mehreren Zeilen zu einem JSON-Array oder einem JSON-Objekt zu kombinieren.
JSON-Zusammenführungsfunktionen
Die Funktion JSON_MERGE_PATCH() entfernt Duplikate nach dem Vorrang des zweiten Dokuments. Beispiel: JSON_MERGE('{"a":1, "b":2 }','{"a":3, "c":4 }'); # liefert {"a":3, "b":2, "c":4}.
Die Funktion JSON_MERGE_PRESERVE() hat die Semantik von JSON_MERGE(), das in MySQL 5.7 implementiert ist und alle Werte beibehält, zum Beispiel JSON_MERGE('{"a": 1, "b":2}','{"a":3, "c":4}'); # gibt {"a":[1,3], "b":2, "c":4} zurück.
JSON-Pretty-Funktion
MySQL 8.0 fügt eine JSON_PRETTY()-Funktion in MySQL ein. Die Funktion akzeptiert entweder einen nativen JSON-Datentyp oder eine String-Darstellung von JSON und gibt einen JSON-formatierten String in einer für den Menschen lesbaren Form mit neuen Zeilen und Einrückung zurück.
JSON-Größenfunktionen
Außerdem kannst du nun JSON-Funktionen nutzen, die sich auf die Speicherplatznutzung für ein bestimmtes JSON-Objekt beziehen. JSON_STORAGE_SIZE() gibt die tatsächliche Größe in Bytes für einen JSON-Datentyp zurück. JSON_STORAGE_FREE() gibt den freien Speicherplatz eines binären JSON-Typs in Bytes zurück, einschließlich der Fragmentierung und des für die Inplace-Aktualisierung gespeicherten Auffüllens.
Verbesserte JSON-Sortierung
MySQL 8.0 bietet weiterhin eine bessere Leistung beim Sortieren/Gruppieren von JSON-Werten durch die Verwendung von Sortierschlüsseln variabler Länge.
Partielle JSON-Aktualisierung
Freue dich auf Unterstützung für partielle Aktualisierungen für die Funktionen JSON_REMOVE(), JSON_SET() und JSON_REPLACE(). Wenn nur einige Teile eines JSON-Dokuments aktualisiert werden, werden Informationen dazu übergeben, was geändert wurde, so dass die Speicher-Engine und die Replikation nicht das gesamte Dokument schreiben müssen. In einer replizierten Umgebung kann nicht garantiert werden, dass das Layout eines JSON-Dokuments auf dem Primary und Secondary genau gleich ist, so dass die physischen Unterschiede nicht verwendet werden können, um die Netzwerklast für zeilenbasierte Replikation zu reduzieren. Daher bietet MySQL 8.0 logische Diffs, die die zeilenbasierte Replikation über die Leitung senden und auf dem Secondary wieder anwenden kann.
Geographische Unterstützung: GIS
MySQL 8.0 bietet geographische Unterstützung: Dazu gehört die Unterstützung von Metadaten für das Spatial Reference System (SRS) sowie von SRS-fähigen räumlichen Datentypen, räumlichen Indizes und räumlichen Funktionen. Kurz gesagt, MySQL 8.0 versteht Längen- und Breitengradkoordinaten auf der Erdoberfläche und kann beispielsweise die Entfernungen zwischen zwei Punkten auf der Erdoberfläche in jedem der etwa 5000 unterstützten räumlichen Bezugssysteme korrekt berechnen.
Räumliches Bezugssystem: SRS
Die Informationsschema-Sicht ST_SPATIAL_REFERENCE_SYSTEMS liefert Informationen über die verfügbaren räumlichen Bezugssysteme für Geodaten. Diese Ansicht basiert auf dem SQL/MM-Standard (ISO/IEC 13249-3). Jedes räumliche Bezugssystem wird durch eine SRID-Nummer identifiziert. MySQL 8.0 wird mit etwa 5000 SRIDs aus dem EPSG Geodetic Parameter Dataset ausgeliefert, die georeferenzierte Ellipsoide und 2D-Projektionen (das heißt alle 2D-Raumbezugssysteme) abdecken.
SRID-fähige Geodatentypen
Räumliche Datentypen können mit der Definition des räumlichen Bezugssystems verknüpft werden, beispielsweise mit SRID 4326 wie folgt: CREATE TABLE t1 (g GEOMETRY SRID 4326). Das SRID ist hier ein SQL-Typ-Modifikator für den GEOMETRY-Datentyp. Werte, die in eine Spalte mit einer SRID-Eigenschaft eingefügt werden, müssen in dieser SRID sein. Der Versuch, Werte mit anderen SRIDs einzufügen, führt dazu, dass eine Ausnahmebedingung ausgelöst wird. Unveränderte Typen, also Typen ohne SRID-Spezifikation, akzeptieren wie bisher alle SRIDs.
MySQL 8.0 fügt die Ansicht INFORMATION_SCHEMA.ST_GEOMETRY_COLUMNS hinzu. Dieser View listet alle GEOMETRY-Spalten in der MySQL-Instanz auf und gibt für jede Spalte den Standard SRS_NAME , SRS_ID und GEOMETRY_TYPE_NAME an.
SRID-bewusste räumliche Indizes
Räumliche Indizes können auf räumlichen Datentypen erstellt werden. Spalten in räumlichen Indizes müssen als NOT NULL deklariert werden. Zum Beispiel so: CREATE TABLE t1 (g GEOMETRY SRID 4326 NOT NULL, SPATIAL INDEX(g));
Spalten mit einem räumlichen Index sollten einen Modifikator vom Typ SRID haben, damit der Optimierer den Index verwenden kann. Wenn ein räumlicher Index für eine Spalte erstellt wird, die keinen SRID-Typ-Modifikator hat, wird eine Warnung ausgegeben.
SRID-bewusste räumliche Funktionen
Außerdem wurden räumliche Funktionen wie ST_Distance() und ST_Length() erweitert, um zu erkennen, dass ihre Parameter in einem geografischen (ellipsoidischen) SRS liegen, und um die Entfernung auf dem Ellipsoid zu berechnen. Bislang unterstützen ST_Distance und räumliche Beziehungen wie ST_Within, ST_Intersects, ST_Contains, ST_Crosses usw. geografische Berechnungen.
Zeichensatz: UTF8MB4
UTF8MB4 ist nun Standardzeichensatz: Die SQL-Leistung, zum Beispiel beim Sortieren von UTF8MB4-Zeichenfolgen, wurde in 8.0 um den Faktor 20 gegenüber 5.7 verbessert.
MySQL-Datentypen
Bit-weise Operationen auf binäre Datentypen
MySQL 8.0 hat die bitweisen Operationen ('bitweises UND' usw.) erweitert, so dass sie auch mit [VAR]BINARY/[TINY|MEDIUM|LONG]BLOB funktionieren. Vor 8.0 wurden bitweise Operationen nur für Ganzzahlen unterstützt.
IPV6-Manipulation
Die Nutzbarkeit der IPv6-Manipulation durch die Unterstützung bitweiser Operationen auf BINARY-Datentypen wurde verbessert.
UUID-Manipulationen
Weiterhin wurde die Benutzerfreundlichkeit von UUID-Manipulationen durch die Implementierung von drei neuen SQL-Funktionen verbessert: UUID_TO_BIN(), BIN_TO_UUID() und IS_UUID(). Die erste konvertiert von UUID-formatiertem Text in VARBINARY(16), die zweite von VARBINARY(16) in UUID-formatierten Text, und die letzte prüft die Gültigkeit eines UUID-formatierten Textes.
MySQL 8: Sicherheitsfunktionen
Neues Standard-Authentifizierungs-Plugin
Das Standard-Authentifizierungs-Plugin ist nun caching_sha2_password. Dementsprechend wird auch libmysqlclient caching_sha2_password als Standard-Authentifizierungsmechanismus verwendet. Das neue caching_sha2_password kombiniert bessere Sicherheit (SHA2-Algorithmus) mit hoher Leistung (Caching).
OpenSSL als Standard in der Community Edition
OpenSSL ist die Standard-TLS/SSL-Bibliothek - sowohl für die MySQL Enterprise Edition als auch für die MySQL Community Edition.
OpenSSL ist dynamisch verknüpft
MySQL 8.0 ist dynamisch mit OpenSSL verknüpft: Aus Sicht des MySQL-Repository-Benutzers hängen die MySQL-Pakete von den OpenSSL-Dateien ab, die vom jeweiligen Linux-System bereitgestellt werden. Durch die dynamische Verknüpfung können OpenSSL-Aktualisierungen bei Verfügbarkeit angewendet werden, ohne dass ein MySQL-Upgrade oder -Patch erforderlich ist.
Verschlüsselung von Undo und Redo Log
MySQL 8.0 hat die Data-at-Rest-Verschlüsselung von UNDO- und REDO-Logs implementiert.
SQL-Rollen
Eine SQL-Rolle ist eine benannte Sammlung von Privilegien, deren Zweck darin besteht, die Verwaltung von Benutzerzugriffsrechten zu vereinfachen.
Gewährung und Entzug von Rechten für PUBLIC
Neu ist auch die Konfigurationsvariable mandatory-roles, die du für die automatische Zuweisung und Gewährung von Standardrollen verwenden kannst, wenn du neue Benutzer anlegst.
Aufspaltung der Superprivilegien
Mit neuen granularen Privilegien für verschiedene Aspekte kannst du die Zugriffsrechte der Benutzer auf das beschränken, was für die jeweilige Aufgabe erforderlich ist.
Neues Modell zur Verwaltung von XA-Transaktionen
MySQL 8.0 hat ein neues Systemprivileg XA_RECOVER_ADMIN eingeführt, das die Fähigkeit kontrolliert, die Anweisung XA RECOVER auszuführen.
Richtlinie zur Passwortrotation
Außerdem wurde die Wiederverwendung von Kennwörtern eingeschränkt: Die Einschränkungen können sowohl auf globaler Ebene als auch auf der Ebene einzelner Benutzer konfiguriert werden. Der Passwortverlauf wird sicher aufbewahrt, da er Hinweise auf Gewohnheiten oder Muster einzelner Benutzer geben kann, wenn diese ihr Passwort ändern.
Verlangsamung von Brute-Force-Angriffen auf Benutzerkennwörter
MySQL 8.0 hat eine Verzögerung im Authentifizierungsprozess eingeführt, die auf aufeinanderfolgenden erfolglosen Anmeldeversuchen basiert. Damit sollen Brute-Force-Angriffe auf Benutzerkennwörter verlangsamt werden.
Hinzufügen der mysqld_safe-Funktionalität zum Server
Es wurden Teile der Logik implementiert, die sich im mysqld_safe-Skript innerhalb des Servers befand. Die Arbeit verbessert die Benutzerfreundlichkeit des Servers in einigen Szenarien, zum Beispiel bei Verwendung der Startoption --daemonize.
Leistung
MySQL 8.0 bietet eine bessere Leistung für Lese-/Schreib-Arbeitslasten, IO-gebundene Arbeitslasten und "Hot-Spot"-Arbeitslasten mit hoher Auslastung.
Skalierung von Lese-/Schreib-Arbeitslasten
Bei intensiven RW-Arbeitslasten wurden bessere Leistungen bereits ab vier gleichzeitigen Benutzern sowie eine mehr als zweifach bessere Leistung bei hoher Last im Vergleich zu MySQL 5.7 beobachtet. Die Skalierbarkeit für Read/Write-Workloads wurde signifikant verbessert.
Nutzung der IO-Kapazität (schneller Speicher)
MySQL 8.0 ermöglicht es dir, jedes Speichergerät mit voller Leistung zu nutzen.
Bessere Leistung bei hoher Beanspruchung ("hot rows")
Die Leistung bei stark umkämpften Arbeitslasten wurde erheblich verbessert.
Ressource-Gruppen
Es wurden weiterhin globale Ressourcengruppen eingeführt, mit denen du die Zuordnung zwischen Benutzer-/System-Threads und CPUs verwalten kannst.
Protokoll
Du kannst nun eine Option nutzen, mit der die Erzeugung und Übertragung von Metadaten für Ergebnismengen ausgeschaltet werden kann.
C-Client-API
Die C-API von libmysql wurde um eine stabile Schnittstelle zum Abrufen von Replikationsereignissen vom Server in Form eines Stroms von Paketen erweitert.
Memcached
Die InnoDB-Memcached-Funktionalitäten wurden um mehrere Get-Operationen und Unterstützung für Bereichsabfragen erweitert.
Persistente Autoinc-Zähler
MySQL 8.0 hält außerdem die AUTOINC-Zähler fest, indem es sie in das Redo-Log schreibt.
Weitere neue Features mit MySQL 8
Abfrageoptimierer berücksichtigt Datenpufferung
MySQL 8.0 wählt Abfragepläne auf der Grundlage des Wissens darüber aus, ob sich die Daten im Speicher oder auf der Festplatte befinden.
Histogramme des Optimizers
Mit Histogrammen kannst du Statistiken über die Datenverteilung für eine Spalte in einer Tabelle erstellen.
Höhere Verlässlichkeit
Die allgemeine Zuverlässigkeit von MySQL wurde erhöht: So werden Metadaten in InnoDB gespeichert, einer bewährten transaktionalen Speicher-Engine.
Eine Quelle möglicher Inkonsistenzen wurde beseitigt: In 8.0 gibt es nur noch ein Datenwörterbuch.
MySQL 8.0 gewährleistet eine atomare, absturzsichere Datenbanksprache (Data Definition Language = DDL): Damit wird dir garantiert, dass jede DDL-Anweisung entweder vollständig oder gar nicht ausgeführt wird.
Beobachtbarkeit
Das Informationsschema wurde neu implementiert: So sind die Informationsschema-Tabellen einfache Sichten auf Data-Dictionary-Tabellen, die in InnoDB gespeichert sind.
Leistungsschema (Geschwindigkeitssteigerung)
MySQL 8.0 beschleunigt Performance-Schema-Abfragen durch das Hinzufügen von mehr als 100 Indizes auf Performance-Schema-Tabellen.
Konfigurationsvariablen
MySQL 8.0 bietet nützliche Informationen über Konfigurationsvariablen, wie zum Beispiel den Variablennamen, Minimal-/Maximalwerte, woher der aktuelle Wert stammt, wer die Änderung vorgenommen hat und wann sie vorgenommen wurde.
Client-Fehlerberichterstattung - Zählung der Meldungen
Mit MySQL 8.0 ist es möglich, die Anzahl der vom Server gemeldeten Client-Fehlermeldungen in aggregierter Form zu betrachten. Du kannst dir Statistiken aus fünf verschiedenen Tabellen ansehen: Gesamtanzahl, Zusammenfassung pro Thread, Zusammenfassung pro Benutzer, Zusammenfassung pro Host oder Zusammenfassung pro Konto.
Anweisungs-Latenz-Histogramme
Du kannst nun Leistungsschema-Histogramme für die Latenz von Anweisungen nutzen, um die Antwortzeiten von Abfragen besser sichtbar zu machen.
Diagramm der Abhängigkeiten von Datensperrungen
MySQL 8.0 instrumentiert Datensperren im Leistungsschema: Wenn Transaktion A die Zeile R sperrt und Transaktion B auf dieselbe Zeile wartet, wird B effektiv von A blockiert. Die hinzugefügte Instrumentierung zeigt, welche Daten gesperrt sind (R), wer die Sperre besitzt (A) und wer auf die Daten wartet (B).
Beispiel einer Digest-Abfrage
Weiterhin wurden Änderungen an der Leistungsschematabelle events_statements_summary_by_digest vorgenommen, um eine vollständige Beispielabfrage und einige Schlüsselinformationen über dieses Abfragebeispiel zu erfassen.
Metadaten über Instrumente
Der Tabelle setup_instruments wurden des Leistungsschemas Metadaten wie Eigenschaften, Volatilität und Dokumentation hinzugefügt.
Fehlerprotokollierung
Auch das MySQL-Fehlerprotokoll wurde umfassend überarbeitet: Aus Sicht der Softwarearchitektur wird das Fehlerprotokoll zu einer Komponente der neuen Dienstinfrastruktur. Das bedeutet, dass fortgeschrittene Nutzer auf Wunsch ihre eigene Implementierung des Fehlerprotokolls schreiben können.
Weiterhin wurde ein Log-Writer-Dienst (API) und eine Standardimplementierung des Log-Writer-Dienstes (Komponente) implementiert. Log-Writer nehmen ein Log-Ereignis entgegen und schreiben es in ein Log.
Fehlernummerierung: Das Format ist eine Nummer der Reihe 10000, der ein "MY-" vorangestellt ist, zum Beispiel "MY-10001".
Systemmeldungen: Systemmeldungen werden als [System] statt als [Fehler], [Warnung], [Hinweis] in das Fehlerprotokoll geschrieben.
Reduzierte Ausführlichkeit: Die Voreinstellung von log_error_verbosity ändert sich von 3 (Hinweise) auf 2 (Warnung).
Quellkomponente: Jede Meldung ist mit einem der drei Werte [Server], [InnoDB], [Replic] versehen, die angeben, von welchem Subsystem die Meldung stammt.
Unsichtbare Indizes
MySQL 8.0 bietet dir die Möglichkeit, die Sichtbarkeit eines Indexes umzuschalten: sichtbar oder unsichtbar. Ein unsichtbarer Index wird vom Optimizer nicht berücksichtigt, wenn er den Abfrageausführungsplan erstellt. Der Index wird jedoch weiterhin im Hintergrund verwaltet, so dass es günstig ist, ihn wieder sichtbar zu machen.
Flexible Verwaltung: Undo-Tablespaces
Volle Kontrolle über die Undo-Tablespaces: Wie viele Tabellenbereiche, wo werden sie platziert und wie viele Rollback-Segmente enthalten sie.
1. Kein Undo-Log mehr im System-Tablespace. Das Undo-Protokoll wird beim Upgrade aus dem System-Tablespace in den Undo-Tablespace migriert.
2. Undo-Tablespaces können getrennt vom System-Tablespace verwaltet werden.
3. Du kannst Speicherplatz zurückgewinnen, der für ungewöhnlich große Transaktionen belegt wurde (online).
4. Du kannst dich für bis zu 127 Undo-Tablespaces entscheiden, von denen jeder bis zu 128 Rollback-Segmente hat.
SET PERSIST für globale Variablen
Mit MySQL 8.0 ist es möglich, globale, dynamische Servervariablen zu persistieren. Viele Servervariablen sind sowohl GLOBAL als auch DYNAMISCH und können neu konfiguriert werden, während der Server läuft.
Fernverwaltung
Mit dem SQL-Befehl RESTART wird dir die Möglichkeit der Fernverwaltung eines MySQL-Servers über eine SQL-Verbindung gegeben, zum Beispiel um eine nicht-dynamische Konfigurationsvariable durch SET PERSIST gefolgt von einem RESTART zu setzen.
Tabellenbereich umbenennen (SQL DDL)
MySQL 8.0 hat ALTER TABLESPACE s1 RENAME TO s2 implementiert: ein gemeinsam genutzter/allgemeiner Tabellenbereich ist eine für den Benutzer sichtbare Entität, die er CREATE, ALTER und DROP kann.
Spalte umbenennen (SQL DDL)
MySQL 8.0 implementiert ALTER TABLE ... RENAME COLUMN old_name TO new_name;
Dies ist eine Verbesserung gegenüber der bestehenden Syntax ALTER TABLE <table_name> CHANGE ..., die eine Neuspezifizierung aller Attribute der Spalte erfordert.
MySQL 8: Unser Fazit
MySQL 8.0 beinhaltet eine große Anzahl neuer Funktionen und Leistungsverbesserungen. Auch wenn dieser Beitrag schon recht lang geworden ist: Wir haben längst nicht alle neuen Features von MySQL 8.0 beschrieben.
In den Webhosting-Tarifen von dogado ist MySQL 8 bereits für dich verfügbar.