MariaDB Server est l'un des serveurs de base de données open source les plus populaires. Il a été créé par les développeurs originaux de MySQL et il est devenu populaire pour sa rapidité, son évolutivité et sa robustesse. MariaDB dispose d'un riche écosystème de moteurs de stockage, de plugins et d'autres outils disponibles qui le rendent très polyvalent pour une grande variété de cas d'utilisation.
En ce qui concerne le moteur de stockage MariaDB, vous avez le choix entre différents types tels que XtraDB, InnoDB, MyRocks, MyISAM ou même Aria. Il n'y a pas de meilleur type de moteur de stockage, car cela dépend de la charge de travail elle-même. Le dernier mentionné, Aria Storage Engine, est compilé par défaut à partir de MariaDB 5.1 et doit être "en cours d'utilisation" au démarrage du service MariaDB.
Dans ce blog, nous verrons ce qu'est Aria Storage Engine et comment l'utiliser dans un serveur MariaDB.
Qu'est-ce que le stockage Aria ?
Aria est un moteur de stockage pour MySQL et MariaDB. Il a été initialement développé dans le but de devenir le moteur de stockage transactionnel et non transactionnel par défaut pour MariaDB et MySQL.
Actuellement, il prend en charge le cryptage et la détection des interblocages, et il offre également une alternative sécurisée à MyISAM. Lorsque MariaDB redémarre après un crash, Aria récupère toutes les tables dans l'état au début d'une instruction ou au début de la dernière instruction LOCK TABLES.
Aria prend en charge la vérification, la réparation et la compression externes et internes des lignes, différents formats de lignes, différents formats de compression d'index, aria_chk, etc.
Ce moteur de stockage est utilisé pour les tables système MariaDB depuis la version 10.4.
Différences entre Aria et MyISAM
Voyons quelques différences fondamentales entre Aria et son concurrent direct :MyISAM, puis les avantages et les inconvénients du moteur de stockage Aria.
- Aria utilise de gros fichiers journaux (1G par défaut).
- Aria a un fichier de contrôle de journal (aria_log_control) et des fichiers journaux (aria_log.%). Les fichiers journaux peuvent être automatiquement purgés lorsqu'ils ne sont pas nécessaires ou purgés à la demande.
- Aria utilise des pages de 8K par défaut, tandis que MyISAM utilise 1K. Cela rend Aria un peu plus rapide lors de l'utilisation de clés de taille fixe, mais plus lent lors de l'utilisation de clés compressées de longueur variable.
Avantages du moteur de stockage Aria
- Les données et les index sont protégés contre les pannes.
- En cas de plantage, les modifications seront annulées à l'état du début d'une instruction ou d'une dernière instruction LOCK TABLES.
- Aria peut rejouer presque tout depuis le journal. Les éléments qui ne peuvent pas encore être rejoués sont :
- Batch INSERT dans une table vide.
- ALTER TABLEs.
- LOAD INDEX peut ignorer les blocs d'index pour les index indésirables.
- Prend en charge tous les formats MyISAM ROW et le nouveau format PAGE où les données sont stockées dans des pages.
- Plusieurs insertions simultanées dans la même table.
- Lorsque vous utilisez le format PAGE, les données de ligne sont mises en cache par le cache de page.
- Aria a des tests unitaires de la plupart des pièces.
- Prend en charge les tables anti-crash et non transactionnelles.
- PAGE est le seul format de ligne sécurisé/transactionnel.
- Le format PAGE devrait apporter une amélioration notable de la vitesse sur les systèmes qui ont une mauvaise mise en cache des données.
- Depuis MariaDB 10.5, la longueur de clé maximale est de 2 000 octets, contre 1 000 octets dans MyISAM.
Inconvénients du moteur de stockage Aria
- Aria ne prend pas en charge INSERT DELAYED.
- Aria ne prend pas en charge plusieurs caches de clés.
- Le stockage de très petites lignes (<25 octets) n'est pas efficace pour le format PAGE.
- Les tables MERGE ne prennent pas en charge Aria.
- Les pages de données Aria au format bloc ont une surcharge de 10 octets/page et de 5 octets/ligne. La prise en charge des transactions et de plusieurs rédacteurs simultanés utilisera une surcharge supplémentaire de 7 octets pour les nouvelles lignes, 14 octets pour les lignes supprimées et 0 octet pour les anciennes lignes compactées.
- Pas de verrouillage externe.
- Aria a une taille de page pour l'index et les données. MyISAM prend en charge différentes tailles de page par index.
- Petit temps système par page d'index (15 octets).
- La taille minimale du fichier de données pour le format PAGE est de 16 Ko.
- Aria ne prend pas en charge les index sur les champs virtuels.
Les formats de stockage Aria
Il prend en charge trois formats de stockage de table différents.
Longueur fixe
Ces tables contiennent des enregistrements d'une longueur fixe. Chaque colonne a la même longueur pour tous les enregistrements, quel que soit le contenu réel. C'est le format par défaut si une table n'a pas de champs BLOB, TEXT, VARCHAR ou VARBINARY, et qu'aucun FORMAT DE LIGNE n'est fourni.
Caractéristiques :
- Rapide, puisque MariaDB saura toujours où commence un enregistrement.
- Facile à mettre en cache.
- Prenez plus d'espace que les tables dynamiques, car la quantité maximale d'espace de stockage sera allouée à chaque enregistrement.
- Reconstruire après un crash n'est pas compliqué en raison des positions fixes.
- Aucune fragmentation ni besoin de réorganisation, sauf si des enregistrements ont été supprimés et que vous souhaitez libérer de l'espace.
Les tableaux contenant des champs BLOB ou TEXTE ne peuvent pas être FIXES car, par conception, ce sont tous deux des champs dynamiques.
Dynamique
Ces tables contiennent des enregistrements de longueur variable. Il s'agit du format par défaut si une table contient des champs BLOB, TEXT, VARCHAR ou VARBINARY et qu'aucun FORMAT DE LIGNE n'est fourni.
Caractéristiques :
- Chaque ligne contient un en-tête indiquant la longueur de la ligne.
- Les lignes ont tendance à se fragmenter facilement. LA MISE À JOUR d'un enregistrement pour qu'il soit plus long garantira probablement qu'il est stocké à différents endroits sur le disque.
- Toutes les colonnes de chaîne d'une longueur de quatre ou plus sont dynamiques.
- Ils nécessitent beaucoup moins d'espace que les tableaux de longueur fixe.
- La restauration après un plantage est plus compliquée qu'avec les tables FIXED.
Page
C'est le format par défaut pour les tables Aria, et c'est le seul format qui peut être utilisé si TRANSACTIONAL est défini sur 1.
Caractéristiques :
- Il est mis en cache par le cache de page, ce qui donne de meilleures performances aléatoires car il utilise moins d'appels système.
- Il ne se fragmente pas aussi facilement que le format DYNAMIC pendant les MISES À JOUR. Le nombre maximal de fragments est très faible.
- Se met à jour plus rapidement que les tableaux dynamiques.
- A une légère surcharge de stockage, principalement notable sur les très petites lignes.
- Plus lent pour effectuer une analyse complète de la table.
- Plus lent s'il y a plusieurs clés en double, car Aria écrira d'abord une ligne, puis les clés, et ensuite seulement vérifiera les doublons.
Pour connaître le format de stockage utilisé par une table, vous pouvez utiliser l'instruction SHOW TABLE STATUS.
Options transactionnelles pour le moteur de stockage Aria
En fait, pour Aria, transactionnel signifie crash-safe, et il n'est pas pris en charge pour les tables partitionnées. Il nécessite également le format de ligne PAGE pour le faire fonctionner.
Les options de table TRANSACTIONAL et ROW_FORMAT interagissent comme suit :
- Si TRANSACTIONAL=1 est défini, le seul format de ligne pris en charge est PAGE. Si ROW_FORMAT est défini sur une autre valeur, Aria émet un avertissement, mais force toujours le format de ligne à être PAGE.
- Si TRANSACTIONAL=0 est défini, le tableau ne sera pas protégé contre les pannes et tout format de ligne est pris en charge.
- Si TRANSACTIONAL n'est défini sur aucune valeur, alors n'importe quel format de ligne est pris en charge. Si ROW_FORMAT est défini, la table utilisera ce format de ligne. Sinon, le tableau utilisera le format de ligne PAGE par défaut. Dans ce cas, si le tableau utilise le format de ligne PAGE, il sera protégé contre les pannes. S'il utilise un autre format de ligne, il ne sera pas protégé contre les pannes.
Comment utiliser le moteur de stockage Aria sur le serveur MariaDB
Tout d'abord, vous devez créer une base de données (si vous n'en avez pas créée) et l'utiliser :
MariaDB [(none)]> create database db1;
Query OK, 1 row affected (0.003 sec)
MariaDB [(none)]> use db1
Database changed
Ensuite, créez une table à l'aide du moteur "Aria" :
MariaDB [db1]> CREATE TABLE table1 (id int(11) DEFAULT NULL, name text)
-> ENGINE=Aria
-> TRANSACTIONAL=1;
Query OK, 0 rows affected (0.025 sec)
Nous avons spécifié la valeur TRANSACTIONAL dans 1 pour la voir ici, mais, comme nous l'avons mentionné, ce n'est pas nécessaire car ce sera 1 par défaut si nous utilisons Aria sans spécifier les valeurs Row Format et Transactional. Maintenant, vous aurez la table créée :
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)
Et dans le statut de la table, vous pouvez vérifier à la fois les valeurs de format transactionnel et de ligne :
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)
Il existe de nombreux paramètres à configurer liés à Aria Storage Engine. Vous pouvez trouver une liste complète sur le site de documentation officiel.
Outils de moteur de stockage Aria
Voyons quelques outils pour travailler avec ce moteur de stockage.
aria_chk
Aria_chk est utilisé pour vérifier, réparer, optimiser, trier et obtenir des informations sur les tables Aria. Avec le serveur MariaDB, vous pouvez utiliser CHECK TABLE, REPAIR TABLE et OPTIMIZE TABLE pour faire des choses similaires.
Cet outil ne doit pas être utilisé lorsque MariaDB est en cours d'exécution car il suppose que la table ne sera pas modifiée pendant son utilisation.
$ aria_chk [OPTIONS] aria_tables[.MAI]
Semblable à MyISAM, les informations de la table Aria sont stockées dans 2 fichiers différents :
- Le fichier MAI contient des informations sur la table de base et l'index.
- Le fichier MAD contient les données.
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 est un outil de compression des tables Aria. Les tables résultantes sont en lecture seule et généralement environ 40 % à 70 % plus petites. Le nom de fichier utilisé par cet outil est le fichier d'index .MAI.
$ aria_pack [options] file_name [file_name2...]
Aria_pack compresse chaque colonne séparément et, lorsque les données résultantes sont lues, seules les lignes et colonnes individuelles requises doivent être décompressées, ce qui permet une lecture plus rapide.
$ 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
Une fois qu'une table a été compressée, utilisez la commande aria_chk -rq pour reconstruire ses index.
$ 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 est un outil permettant d'afficher et d'appliquer les enregistrements de journal d'un journal de transactions Aria.
$ aria_read_log OPTIONS
Vous devez utiliser l'une des options "-d" ou "-a" :
- a :Appliquer le journal aux tables :modifie les tables. Vous devriez d'abord faire une sauvegarde. Affiche beaucoup d'informations si vous n'utilisez pas le paramètre --silent.
- d :affiche de brèves informations lues à partir de l'en-tête des enregistrements.
$ 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
...
Conclusion
Comme vous pouvez le voir, Aria Storage Engine a de nombreuses améliorations par rapport à MyISAM, et c'est une excellente alternative au moteur de stockage à utiliser. Il est également facile à utiliser car il fait partie de l'installation de MariaDB Server, il suffit donc de spécifier le paramètre de table ENGINE pour l'activer.
MariaDB travaille toujours sur ce moteur de stockage, donc nous verrons probablement bientôt de nouvelles améliorations dans les futures versions.