MariaDB
 sql >> Datenbank >  >> RDS >> MariaDB

Wahl der Speicher-Engine:Aria

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
  • Gleichzeitiges Einfügen in dieselbe Tabelle aus mehreren Quellen
  • Ineffizientes Massenladen
  • Cache nach Seite
  • Sperren auf Tabellenebene
  • Effizient gesichert durch MariaDB Enterprise Backup

  • Fehlt Unterstützung für native Fremdschlüssel
  • Erweitertes PAGE-Zeilenformat:standardmäßig absturzsicher; Operationen; bietet eine bemerkenswerte Geschwindigkeitsverbesserung für das Daten-Caching, insbesondere unter Windows
  • Unterstützt INSERT DELAYED nicht.
  • Absturzsichere Tabellen und Indizes
  • Caching-Einschränkungen:mehrere Schlüssel-Caches und hängt vom Festplatten-Cache des Betriebssystems ab
  • Absturzwiederherstellung bis zum Beginn einer letzten Anweisung oder Sperre
  • Seitenformat-Overhead:minimale Dateigröße 16K; Lagerung kleiner Reihen; gleiche Seitengröße für Index und Daten.
  • Optimierter LASTINDEX
  • Unterstützt keine Transaktionen (d. h. ROLLBACK und COMMIT)
  • Kompatibel mit MyISAM ROW- und PAGE-Formaten
  • Geringe Gemeinkosten
  • 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.