MariaDB Server ist einer der beliebtesten Open-Source-Datenbankserver. Es wurde von den ursprünglichen Entwicklern von MySQL erstellt und wurde bekannt, weil es schnell, skalierbar und robust ist. MariaDB verfügt über ein reichhaltiges Ökosystem aus Speicher-Engines, Plugins und anderen verfügbaren Tools, die es für eine Vielzahl von Anwendungsfällen sehr vielseitig machen.
Bei der MariaDB-Speicher-Engine haben Sie verschiedene Typen zur Auswahl, wie XtraDB, InnoDB, MyRocks, MyISAM oder sogar Aria. Es gibt keinen besten Speicher-Engine-Typ, da dieser von der Arbeitslast selbst abhängt. Die letztgenannte, Aria Storage Engine, wird standardmäßig aus MariaDB 5.1 kompiliert und muss beim Start des MariaDB-Dienstes „in Verwendung“ sein.
In diesem Blog werden wir sehen, was die Aria Storage Engine ist und wie sie in einem MariaDB-Server verwendet wird.
Was ist Aria Storage?
Aria ist eine Speicher-Engine für MySQL und MariaDB. Es wurde ursprünglich mit dem Ziel entwickelt, die standardmäßige transaktionale und nicht-transaktionale Speicher-Engine für MariaDB und MySQL zu werden.
Derzeit unterstützt es Verschlüsselung und Deadlock-Erkennung und bietet außerdem eine absturzsichere Alternative zu MyISAM. Wenn MariaDB nach einem Absturz neu gestartet wird, stellt Aria alle Tabellen auf den Stand zu Beginn einer Anweisung oder zu Beginn der letzten LOCK TABLES-Anweisung wieder her.
Aria unterstützt die externe und interne Überprüfung, Reparatur und Komprimierung von Zeilen, verschiedene Zeilenformate, verschiedene Indexkomprimierungsformate, aria_chk und mehr.
Diese Speicher-Engine wird seit der Version 10.4 für die MariaDB-Systemtabellen verwendet.
Unterschiede zwischen Aria und MyISAM
Sehen wir uns einige grundlegende Unterschiede zwischen Aria und seinem direkten Konkurrenten an:MyISAM, und dann die Vor- und Nachteile der Aria Storage Engine.
- Aria verwendet große Protokolldateien (standardmäßig 1 GB).
- Aria hat eine Protokollsteuerdatei (aria_log_control) und Protokolldateien (aria_log.%). Die Protokolldateien können automatisch gelöscht werden, wenn sie nicht benötigt werden, oder bei Bedarf gelöscht werden.
- Aria verwendet standardmäßig 8K-Seiten, während MyISAM 1K verwendet. Dadurch wird Aria etwas schneller, wenn Schlüssel mit fester Größe verwendet werden, aber langsamer, wenn gepackte Schlüssel mit variabler Länge verwendet werden.
Vorteile der Aria-Speicher-Engine
- Daten und Indizes sind absturzsicher.
- Bei einem Absturz werden Änderungen auf den Zustand des Beginns einer Anweisung oder einer letzten LOCK TABLES-Anweisung zurückgesetzt.
- Aria kann fast alles aus dem Protokoll wiedergeben. Die Dinge, die noch nicht wiedergegeben werden können, sind:
- Batch-INSERT in eine leere Tabelle.
- ALTER TABLEs.
- LOAD INDEX kann Indexblöcke für unerwünschte Indizes überspringen.
- Unterstützt alle MyISAM ROW-Formate und das neue PAGE-Format, in dem Daten in Seiten gespeichert werden.
- Mehrere gleichzeitige Inserter in dieselbe Tabelle.
- Bei Verwendung des PAGE-Formats werden Zeilendaten vom Seiten-Cache zwischengespeichert.
- Aria hat Einheitentests für die meisten Teile.
- Unterstützt sowohl absturzsichere als auch nicht transaktionale Tabellen.
- PAGE ist das einzige absturzsichere/transaktionale Zeilenformat. Das
- PAGE-Format sollte eine bemerkenswerte Geschwindigkeitsverbesserung auf Systemen mit schlechtem Daten-Caching bewirken.
- Ab MariaDB 10.5 beträgt die maximale Schlüssellänge 2000 Byte, verglichen mit 1000 Byte in MyISAM.
Nachteile der Aria Storage Engine
- Aria unterstützt INSERT DELAYED nicht.
- Aria unterstützt nicht mehrere Schlüssel-Caches.
- Die Speicherung sehr kleiner Zeilen (<25 Byte) ist für das PAGE-Format nicht effizient.
- MERGE-Tabellen unterstützen Aria nicht.
- Aria-Datenseiten im Blockformat haben einen Overhead von 10 Byte/Seite und 5 Byte/Zeile. Die Unterstützung von Transaktionen und mehreren gleichzeitigen Schreibern verbraucht einen zusätzlichen Overhead von 7 Byte für neue Zeilen, 14 Byte für gelöschte Zeilen und 0 Byte für alte komprimierte Zeilen.
- Keine externe Sperrung.
- Aria hat eine Seitengröße für Index und Daten. MyISAM unterstützt unterschiedliche Seitengrößen pro Index.
- Kleiner Overhead pro Indexseite (15 Byte).
- Die minimale Datendateigröße für das PAGE-Format beträgt 16 KB.
- Aria unterstützt keine Indizes für virtuelle Felder.
Die Aria-Speicherformate
Es unterstützt drei verschiedene Tabellenspeicherformate.
Feste Länge
Diese Tabellen enthalten Datensätze fester Länge. Jede Spalte hat für alle Datensätze die gleiche Länge, unabhängig vom tatsächlichen Inhalt. Es ist das Standardformat, wenn eine Tabelle keine BLOB-, TEXT-, VARCHAR- oder VARBINARY-Felder hat und kein ROW FORMAT angegeben ist.
Eigenschaften:
- Schnell, da MariaDB immer weiß, wo ein Datensatz beginnt.
- Einfach zu cachen.
- Beanspruchen mehr Platz als dynamische Tabellen, da jedem Datensatz die maximale Menge an Speicherplatz zugewiesen wird.
- Eine Rekonstruktion nach einem Crash ist durch die festen Positionen unkompliziert.
- Keine Fragmentierung oder Neuorganisation erforderlich, es sei denn, Datensätze wurden gelöscht und Sie möchten Speicherplatz freigeben.
Tabellen, die BLOB- oder TEXT-Felder enthalten, können nicht FIXED werden, da dies per Design dynamische Felder sind.
Dynamisch
Diese Tabellen enthalten Datensätze variabler Länge. Es ist das Standardformat, wenn eine Tabelle BLOB-, TEXT-, VARCHAR- oder VARBINARY-Felder enthält und kein ROW FORMAT angegeben ist.
Eigenschaften:
- Jede Zeile enthält eine Überschrift, die die Länge der Zeile angibt.
- Zeilen neigen dazu, leicht fragmentiert zu werden. Das AKTUALISIEREN eines längeren Datensatzes wird wahrscheinlich sicherstellen, dass er an verschiedenen Stellen auf der Festplatte gespeichert wird.
- Alle Zeichenfolgenspalten mit einer Länge von vier oder mehr sind dynamisch.
- Sie benötigen viel weniger Platz als Tabellen mit fester Länge.
- Das Wiederherstellen nach einem Absturz ist komplizierter als bei FIXED-Tabellen.
Seite
Dies ist das Standardformat für Aria-Tabellen und das einzige Format, das verwendet werden kann, wenn TRANSACTIONAL auf 1 gesetzt ist.
Eigenschaften:
- Es wird vom Seitencache zwischengespeichert, was eine bessere Zufallsleistung liefert, da weniger Systemaufrufe verwendet werden.
- Es fragmentiert nicht so leicht wie das DYNAMISCHE Format während UPDATES. Die maximale Anzahl an Fragmenten ist sehr gering.
- Aktualisiert schneller als dynamische Tabellen.
- Hat einen geringen Speicheraufwand, der sich hauptsächlich bei sehr kleinen Zeilen bemerkbar macht.
- Langsamer, um einen vollständigen Tabellenscan durchzuführen.
- Langsamer, wenn es mehrere doppelte Schlüssel gibt, da Aria zuerst eine Zeile schreibt, dann Schlüssel und erst dann nach Duplikaten sucht.
Um das von einer Tabelle verwendete Speicherformat zu erfahren, können Sie die SHOW TABLE STATUS-Anweisung verwenden.
Transaktionsoptionen für Aria Storage Engine
Tatsächlich bedeutet transaktional für Aria absturzsicher und wird für partitionierte Tabellen nicht unterstützt. Es erfordert auch das PAGE-Zeilenformat, damit es funktioniert.
Die Tabellenoptionen TRANSACTIONAL und ROW_FORMAT interagieren wie folgt:
- Wenn TRANSACTIONAL=1 gesetzt ist, dann ist das einzige unterstützte Zeilenformat PAGE. Wenn ROW_FORMAT auf einen anderen Wert gesetzt ist, gibt Aria eine Warnung aus, erzwingt aber dennoch das Zeilenformat PAGE.
- Wenn TRANSACTIONAL=0 gesetzt ist, dann ist die Tabelle nicht absturzsicher und jedes Zeilenformat wird unterstützt.
- Wenn TRANSACTIONAL auf keinen Wert gesetzt ist, wird jedes Zeilenformat unterstützt. Wenn ROW_FORMAT festgelegt ist, verwendet die Tabelle dieses Zeilenformat. Andernfalls verwendet die Tabelle das standardmäßige PAGE-Zeilenformat. Wenn die Tabelle in diesem Fall das PAGE-Zeilenformat verwendet, ist sie absturzsicher. Wenn es ein anderes Zeilenformat verwendet, ist es nicht absturzsicher.
Verwendung der Aria-Speicher-Engine auf MariaDB-Server
Zuerst müssen Sie eine Datenbank erstellen (falls Sie noch keine erstellt haben) und diese verwenden:
MariaDB [(none)]> create database db1;
Query OK, 1 row affected (0.003 sec)
MariaDB [(none)]> use db1
Database changed
Erstellen Sie dann eine Tabelle mit der „Aria“-Engine:
MariaDB [db1]> CREATE TABLE table1 (id int(11) DEFAULT NULL, name text)
-> ENGINE=Aria
-> TRANSACTIONAL=1;
Query OK, 0 rows affected (0.025 sec)
Wir haben den TRANSACTIONAL-Wert in 1 angegeben, um ihn hier zu sehen, aber wie bereits erwähnt, ist dies nicht erforderlich, da er standardmäßig 1 ist, wenn wir Aria verwenden, ohne Zeilenformat und Transaktionswerte anzugeben. Jetzt haben Sie die Tabelle erstellt:
MariaDB [db1]> SHOW CREATE TABLE table1\G
*************************** 1. row ***************************
Table: table1
Create Table: CREATE TABLE `table1` (
`id` int(11) DEFAULT NULL,
`name` text DEFAULT NULL
) ENGINE=Aria DEFAULT CHARSET=latin1 PAGE_CHECKSUM=1 TRANSACTIONAL=1
1 row in set (0.000 sec)
Und im Tabellenstatus können Sie sowohl die Transaktions- als auch die Zeilenformatwerte überprüfen:
MariaDB [db1]> SHOW TABLE STATUS\G
*************************** 1. row ***************************
Name: table1
Engine: Aria
Version: 10
Row_format: Page
Rows: 0
Avg_row_length: 0
Data_length: 8192
Max_data_length: 17592186011648
Index_length: 8192
Data_free: 0
Auto_increment: NULL
Create_time: 2020-06-30 18:59:17
Update_time: 2020-06-30 18:59:17
Check_time: NULL
Collation: latin1_swedish_ci
Checksum: NULL
Create_options: transactional=1
Comment:
Max_index_length: 137438945280
Temporary: N
1 rows in set (0.001 sec)
Im Zusammenhang mit der Aria Storage Engine müssen viele Parameter konfiguriert werden. Eine vollständige Liste finden Sie auf der offiziellen Dokumentationsseite.
Aria Storage Engine-Tools
Sehen wir uns einige Tools zum Arbeiten mit dieser Speicher-Engine an.
aria_chk
Aria_chk wird zum Prüfen, Reparieren, Optimieren, Sortieren und Abrufen von Informationen über Aria-Tabellen verwendet. Mit dem MariaDB-Server können Sie CHECK TABLE, REPAIR TABLE und OPTIMIZE TABLE verwenden, um ähnliche Dinge zu tun.
Dieses Tool sollte nicht verwendet werden, wenn MariaDB läuft, da es davon ausgeht, dass die Tabelle während seiner Verwendung nicht geändert wird.
$ aria_chk [OPTIONS] aria_tables[.MAI]
Ähnlich wie bei MyISAM werden die Aria-Tabelleninformationen in zwei verschiedenen Dateien gespeichert:
- MAI-Datei enthält Basistabelleninformationen und den Index.
- MAD-Datei enthält die Daten.
Aria_chk takes one or more MAI files as arguments.
For example, to check all your tables and repairs only those that have an error, run this command in your data directory:
$ aria_chk --check --force --sort_buffer_size=1G */*.MAI
Checking Aria file: db1/table1.MAI
Data records: 0 Deleted blocks: 0
- check file-size
- check key delete-chain
- check index reference
- check record links
...
aria_pack
Aria_pack ist ein Tool zum Komprimieren von Aria-Tabellen. Die resultierenden Tabellen sind schreibgeschützt und normalerweise etwa 40 % bis 70 % kleiner. Der von diesem Tool verwendete Dateiname ist die .MAI-Indexdatei.
$ aria_pack [options] file_name [file_name2...]
Aria_pack komprimiert jede Spalte separat, und wenn die resultierenden Daten gelesen werden, müssen nur die einzelnen erforderlichen Zeilen und Spalten dekomprimiert werden, was ein schnelleres Lesen ermöglicht.
$ aria_pack /var/lib/mysql/world/country
Compressing aria_pack /var/lib/mysql/world/country.MAD: (549 records)
- Calculating statistics
- Compressing file
37.71%
Remember to run aria_chk -rq on compressed tables
Sobald eine Tabelle gepackt wurde, verwenden Sie den Befehl aria_chk -rq, um ihre Indizes neu aufzubauen.
$ aria_chk -rq --ignore-control-file /var/lib/mysql/world/country
Recreating table '/var/lib/mysql/world/country'
- check record delete-chain
- recovering (with sort) Aria-table '/var/lib/mysql/world/country'
Data records: 549
- Fixing index 1
State updated
aria_read_log
Aria_read_log ist ein Tool zum Anzeigen und Anwenden von Protokolleinträgen aus einem Aria-Transaktionsprotokoll.
$ aria_read_log OPTIONS
Sie müssen eine der Optionen „-d“ oder „-a“ verwenden:
- a:Protokoll auf Tabellen anwenden:ändert Tabellen. Sie sollten zuerst ein Backup erstellen. Zeigt viele Informationen an, wenn Sie den Parameter --silent nicht verwenden.
- d:Zeigt kurze Informationen aus dem Header der Datensätze.
$ cd /var/lib/mysql
$ aria_read_log -d
You are using --display-only, NOTHING will be written to disk
The transaction log starts from lsn (1,0x2007)
TRACE of the last aria_read_log
Rec#1 LSN (1,0x2007) short_trid 0 redo_create_table(num_type:30) len 1042
Rec#2 LSN (1,0x2421) short_trid 0 redo_create_table(num_type:30) len 527
Rec#3 LSN (1,0x2638) short_trid 61986 long_transaction_id(num_type:36) len 6
Rec#4 LSN (1,0x2641) short_trid 61986 file_id(num_type:35) len 22
Rec#5 LSN (1,0x265d) short_trid 61986 undo_bulk_insert(num_type:39) len 9
Rec#6 LSN (1,0x266a) short_trid 0 incomplete_log(num_type:37) len 2
Rec#7 LSN (1,0x266f) short_trid 61986 commit(num_type:27) len 0
...
Fazit
Wie Sie sehen können, hat die Aria Storage Engine viele Verbesserungen gegenüber MyISAM und ist eine großartige Speicher-Engine-Alternative, die verwendet werden kann. Es ist auch einfach zu verwenden, da es Teil der MariaDB Server-Installation ist, sodass die Angabe des Tabellenparameters ENGINE ausreicht, um es zu aktivieren.
MariaDB arbeitet noch an dieser Speicher-Engine, daher werden wir wahrscheinlich bald neue Verbesserungen in zukünftigen Versionen sehen.