MariaDB
 sql >> Base de données >  >> RDS >> MariaDB

Choix du moteur de stockage :Aria

MariaDB Platform inclut une variété de moteurs de stockage en tant que composants enfichables de MariaDB Enterprise Server. Cela vous permet de choisir le moteur de stockage qui convient le mieux à la charge de travail d'une base de données ou d'une table particulière.

Le moteur de stockage Aria a été développé pour remplacer MyISAM en cas de crash et est en développement actif depuis 2007. Lorsque MariaDB Server 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.

Moteurs de stockage MariaDB

Recommandations actuelles du moteur de stockage basées sur la charge de travail :

  • Charges de travail lourdes en lecture :Aria
  • Usage général :InnoDB
  • ACID :InnoDB
  • Charges de travail lourdes en écriture :MyRocks
  • Compression :MyRocks
  • Partagé :Araignée
  • Charges de travail analytiques :MariaDB ColumnStore

Pourquoi utiliser Aria pour MariaDB

Alors qu'InnoDB est le moteur de stockage par défaut pour les bases de données créées avec MariaDB, Aria est utilisé pour la plupart des tables système internes de MariaDB Enterprise Server 10.4. Aria a un faible encombrement et permet une copie facile entre les systèmes et est particulièrement adapté aux charges de travail à lecture intensive. Aria dispose d'un format de stockage avancé basé sur les pages qui permet des performances de mise en cache supérieures et est optimisé pour la simultanéité.

Dans les environnements réels, Aria produit de meilleurs résultats pour les constructions agrégées (telles que GROUP BY ou ORDER BY) qui prévalent dans l'analyse et le traitement des transactions. L'analyse et le traitement transactionnel trouvent des éléments simples comme les totaux, les maximums et les statistiques. La plupart des applications dépendent fortement des requêtes qui utilisent ces fonctions d'agrégation.
MariaDB utilise le moteur de stockage Aria pour toutes les tables temporaires internes sur disque. Étant donné que ces tables sont souvent créées en interne pour exécuter des requêtes GROUP BY et DISTINCT, ces types de requêtes peuvent bénéficier des performances d'Aria, même si la table interrogée utilise un moteur différent.

Le moteur de stockage Aria est compilé par défaut dans MariaDB. Aria est inclus avec MariaDB Server (Enterprise et Community) sans installation ni configuration supplémentaire.

Considérations sur Aria

La meilleure façon d'utiliser Aria dépendra du cas d'utilisation, de la conception de la table, des modèles d'accès (requêtes SQL), des objectifs de performances et des objectifs de récupération.

Avantages d'Aria Inconvénients d'Aria
  • Insertion simultanée dans le même tableau à partir de plusieurs sources
  • Chargement groupé inefficace
  • Capacité de mise en cache par page
  • Verrouillage au niveau de la table
  • Sauvegardé efficacement par MariaDB Enterprise Backup

  • Manque de prise en charge native des clés étrangères
  • Format de ligne PAGE amélioré :anti-crash par défaut ; opérations ; fournit une amélioration notable de la vitesse de mise en cache des données, en particulier sous Windows
  • Manque de support INSERT DELAYED.
  • Tables et index sécurisés contre les pannes
  • Limites de la mise en cache :plusieurs caches de clés et dépend du cache disque du système d'exploitation
  • Reprise sur incident au début d'une dernière instruction ou d'un verrou
  • Surcharge de format PAGE :taille de fichier minimale 16 Ko ; stockage de petites rangées; même taille de page pour l'index et les données.
  • INDICE DE CHARGE Optimisé
  • Ne prend pas en charge les transactions (c'est-à-dire ROLLBACK et COMMIT)
  • Compatible avec les formats MyISAM ROW et PAGE
  • Faibles frais généraux
  • Envisagez d'utiliser Aria :

    • Si votre application effectue de nombreuses recherches en TEXTE INTÉGRAL.
    • Si votre application effectue de nombreuses requêtes GROUP BY.
    • Si votre application n'a pas besoin de conformité ACID ou de clés étrangères.
    • Si votre application utilise actuellement MyISAM et nécessite un moteur plus avancé pour permettre une meilleure vitesse, des sauvegardes et une reprise après incident automatisée.

    Comparaisons des performances

    C'est une chose de comparer des requêtes isolées et c'en est une autre de regarder des exemples concrets. Nous avons effectué des tests comparant Aria, InnoDB et MyISAM.

    Résultats des performances
    InnoDB Aria MonISAM
    SQL 1 2.389 0.580 0.634
    SQL 2 2.169 0.530 0,598
    Benchmark simple :Aria contre MyISAM contre InnoDB

    Dans ce benchmark simple, une table a été créée et remplie avec 2 millions de lignes. Les requêtes GROUP BY et ORDER BY ont été effectuées et copiées dans les trois moteurs de stockage alternatifs :InnoDB, Aria et MyISAM. Chaque test a été exécuté 10 fois, avec le temps moyen (secondes) enregistré pour tous les tests.

    Configuration et commandes utilisées pour les tests :

    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;

    Continuez à exécuter l'insertion ci-dessus jusqu'à ce qu'il y ait environ 2 millions de lignes dans le tableau.

    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 |

    Confirmez qu'un bon rapport entre les lignes distinctes et le nombre total de lignes est présent :

    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                      |
    +------------------------+
    

    Aria

    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`;
    

    MonISAM

    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`;
    

    Testez 2 SQL différents sur InnoDB, Aria et MyISAM :

    — sql 1 :

    SELECT dim1, dim2 from fact group by dim1 order by dim1; 
    -- 9999 rows in set

    — sql 2 :

    SELECT dim1, dim2 from fact group by dim2 order by dim2; 
    -- 499 rows in set

    Récapitulatif de l'analyse comparative

    Les tests montrent qu'Aria est beaucoup plus rapide au niveau GROUP BY qu'InnoDB ou MyISAM. Aria est légèrement plus rapide que MyISAM et garantit un environnement sécurisé. Les tests de performances ont révélé qu'Aria est quatre fois plus rapide qu'InnoDB. En raison des différences dans les cas d'utilisation, chacun doit subir des tests dans MariaDB Enterprise Server en utilisant à la fois Aria et InnoDB (ou un autre, selon les besoins).

    Résumé

    En fonction de votre charge de travail, Aria peut offrir des avantages en termes de performances. Parce qu'il est inclus avec MariaDB Server et peut être appliqué par base de données ou par table (ENGINE=ARIA), vous pouvez tester les performances de votre charge de travail spécifique sans frais supplémentaires et très peu d'efforts supplémentaires - il suffit de le brancher et de l'essayer.

    Pour en savoir plus sur les moteurs de stockage et l'architecture de stockage, consultez les moteurs de stockage optimisés pour la charge de travail.