MariaDB Platform enthält eine Vielzahl von Speicher-Engines als austauschbare Komponenten von MariaDB Enterprise Server. Auf diese Weise können Sie die Speicher-Engine auswählen, die am besten für die Arbeitslast einer bestimmten Datenbank oder Tabelle geeignet ist.
Die Aria-Speicher-Engine wurde als absturzsicherer Ersatz für MyISAM entwickelt und befindet sich seit 2007 in aktiver Entwicklung. Wenn MariaDB Server nach einem Absturz neu gestartet wird, stellt Aria alle Tabellen auf den Stand beim Start einer Anweisung oder beim Start wieder her der letzten LOCK TABLES-Anweisung.
MariaDB-Speicher-Engines
Aktuelle Empfehlungen für die Speicher-Engine basierend auf der Arbeitslast:
- Leselastige Workloads:Aria
- Allgemeiner Zweck:InnoDB
- ACID:InnoDB
- Schreiblastige Workloads:MyRocks
- Komprimierung:MyRocks
- Sharded:Spinne
- Analytische Workloads:MariaDB ColumnStore
Warum Aria für MariaDB verwenden
Während InnoDB die Standardspeicher-Engine für mit MariaDB erstellte Datenbanken ist, wird Aria für die meisten internen Systemtabellen von MariaDB Enterprise Server 10.4 verwendet. Aria hat einen geringen Platzbedarf und ermöglicht ein einfaches Kopieren zwischen Systemen und eignet sich besonders für Workloads mit vielen Lesevorgängen. Aria verfügt über ein fortschrittliches seitenbasiertes Speicherformat, das eine überlegene Caching-Leistung ermöglicht und für Parallelität optimiert ist.
In realen Umgebungen liefert Aria bessere Ergebnisse für aggregierte Konstrukte (wie GROUP BY oder ORDER BY), die in der Analyse und Transaktionsverarbeitung weit verbreitet sind. Analytik und Transaktionsverarbeitung finden einfache Dinge wie Summen, Höchstwerte und Statistiken. Die meisten Anwendungen verlassen sich stark auf Abfragen, die diese Aggregatfunktionen verwenden.
MariaDB verwendet die Aria-Speicher-Engine für alle internen temporären Tabellen auf der Festplatte. Da diese Tabellen oft intern erstellt werden, um GROUP BY- und DISTINCT-Abfragen auszuführen, können diese Arten von Abfragen von der Leistung von Aria profitieren, selbst wenn die abgefragte Tabelle eine andere Engine verwendet.
Die Aria-Speicher-Engine ist standardmäßig in MariaDB einkompiliert. Aria ist ohne zusätzliche Installation oder Einrichtung in MariaDB Server (Enterprise und Community) enthalten.
Überlegungen zur Arie
Wie Aria am besten verwendet wird, hängt vom Anwendungsfall, Tabellendesign, Zugriffsmustern (SQL-Abfragen), Leistungszielen und Wiederherstellungszielen ab.
Vorteile von Aria | Nachteile von Aria |
| |
| |
| |
| |
| |
| |
| |
| |
|
Erwägen Sie die Verwendung von Aria:
- Wenn Ihre Anwendung viele VOLLTEXT-Suchen durchführt.
- Wenn Ihre Anwendung viele GROUP BY-Abfragen durchführt.
- Wenn Ihre Anwendung keine ACID-Konformität oder Fremdschlüssel benötigt.
- Wenn Ihre Anwendung derzeit MyISAM verwendet und eine fortschrittlichere Engine benötigt, um eine bessere Geschwindigkeit, Sicherungen und eine automatische Wiederherstellung nach einem Absturz zu ermöglichen.
Leistungsvergleiche
Es ist eine Sache, isolierte Abfragen zu vergleichen, und eine ganz andere, sich Beispiele aus der Praxis anzusehen. Wir haben einige Tests durchgeführt, in denen Aria, InnoDB und MyISAM verglichen wurden.
Leistungsergebnisse
InnoDB | Arie | MyISAM | |
SQL 1 | 2.389 | 0,580 | 0,634 |
SQL 2 | 2.169 | 0,530 | 0,598 |
Einfacher Benchmark:Aria vs. MyISAM vs. InnoDB
In diesem einfachen Benchmark wurde eine Tabelle erstellt und mit 2 Millionen Zeilen gefüllt. GROUP BY- und ORDER BY-Abfragen wurden durchgeführt und in alle drei alternativen Speicher-Engines kopiert:InnoDB, Aria und MyISAM. Jeder Test wurde 10 Mal ausgeführt, wobei die durchschnittliche Zeit (Sekunden) für alle Tests aufgezeichnet wurde.
Setup und zum Testen verwendete Befehle:
INSERT INTO fact VALUES (1,1,'Justin',md5(''), .1); INSERT INTO fact SELECT FLOOR(1+ rand()*9999), FLOOR(1 + rand()*499), (select name from names where id = 1 + rand() * 4), MD5(1+rand()*9999), rand() FROM fact;
Führen Sie die obige Einfügung weiter aus, bis etwa 2 Millionen Zeilen in der Tabelle sind.
MariaDB [test2]> SELECT count(*) from fact; +----------+ | count(*) | +----------+ | 2097152 | +----------+ MariaDB [test2]> SHOW CREATE TABLE fact; +-------+------------------------------- | Table | Create Table +-------+------------------------------- | fact | CREATE TABLE `fact` ( `dim1` int(11) DEFAULT NULL, `dim2` int(11) DEFAULT NULL, `name` varchar(20) DEFAULT NULL, `hash` varchar(32) DEFAULT NULL, `measure1` double DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
Bestätigen Sie, dass ein gutes Verhältnis von eindeutigen zu Gesamtzeilen vorhanden ist:
MariaDB [test2]> SELECT count(distinct (dim1)) from fact; +------------------------+ | count(distinct (dim1)) | +------------------------+ | 9999 | +------------------------+ MariaDB [test2]> SELECT count(distinct (dim2)) from fact; +------------------------+ | count(distinct (dim2)) | +------------------------+ | 499 | +------------------------+ MariaDB [test2]> SELECT count(distinct (name)) from fact; +------------------------+ | count(distinct (name)) | +------------------------+ | 1 | +------------------------+
Arie
CREATE TABLE `test2`.`fact2` ( `dim1` INT(11) NULL DEFAULT NULL, `dim2` INT(11) NULL DEFAULT NULL, `name` VARCHAR(20) NULL DEFAULT NULL, `hash` VARCHAR(32) NULL DEFAULT NULL, `measure1` DOUBLE NULL DEFAULT NULL ) ENGINE=ARIA TRANSACTIONAL=1; INSERT INTO `test2`.`fact2` (`dim1`, `dim2`, `name`, `hash`, `measure1`) SELECT `dim1`, `dim2`, `name`, `hash`, `measure1` FROM `fact`;
MyISAM
CREATE TABLE `test2`.`fact3` ( `dim1` INT(11) NULL DEFAULT NULL, `dim2` INT(11) NULL DEFAULT NULL, `name` VARCHAR(20) NULL DEFAULT NULL, `hash` VARCHAR(32) NULL DEFAULT NULL, `measure1` DOUBLE NULL DEFAULT NULL ) COLLATE='latin1_swedish_ci' ENGINE=MyISAM; INSERT INTO `test2`.`fact3` (`dim1`, `dim2`, `name`, `hash`, `measure1`) SELECT `dim1`, `dim2`, `name`, `hash`, `measure1` FROM `fact`;
Testen Sie 2 verschiedene SQLs in InnoDB, Aria und MyISAM:
— SQL1:
SELECT dim1, dim2 from fact group by dim1 order by dim1; -- 9999 rows in set
— SQL2:
SELECT dim1, dim2 from fact group by dim2 order by dim2; -- 499 rows in set
Benchmark-Zusammenfassung
Tests zeigen, dass Aria auf GROUP BY-Ebene viel schneller ist als InnoDB oder MyISAM. Aria ist etwas schneller als MyISAM und sorgt für eine absturzsichere Umgebung. Die Leistungstests haben ergeben, dass Aria viermal schneller ist als InnoDB. Aufgrund der Unterschiede in den Anwendungsfällen sollte jeder im MariaDB Enterprise Server mit Aria und InnoDB (oder je nach Bedarf einem anderen) getestet werden.
Zusammenfassung
Abhängig von Ihrer Arbeitslast könnte Aria Leistungsvorteile bieten. Da es in MariaDB Server enthalten ist und pro Datenbank oder pro Tabelle (ENGINE=ARIA) angewendet werden kann, können Sie die Leistung für Ihre spezifische Arbeitslast ohne zusätzliche Kosten und mit sehr geringem zusätzlichen Aufwand testen – schließen Sie es einfach an und probieren Sie es aus.
Weitere Informationen zu Speicher-Engines und Speicherarchitektur finden Sie unter Workload-optimierte Speicher-Engines.