sql >> Databasteknik >  >> RDS >> MariaDB

Val av lagringsmotor:Aria

MariaDB Platform innehåller en mängd olika lagringsmotorer som pluggbara komponenter i MariaDB Enterprise Server. Detta låter dig välja den lagringsmotor som bäst passar arbetsbelastningen för en viss databas eller tabell.

Aria-lagringsmotorn utvecklades som en kraschsäker ersättning för MyISAM och har varit i aktiv utveckling sedan 2007. När MariaDB Server startar om efter en krasch, återställer Aria alla tabeller till tillståndet vid starten av en sats eller vid starten av den sista LOCK TABLES-satsen.

MariaDB Storage Engines

Aktuella rekommendationer för lagringsmotorer baserade på arbetsbelastning:

  • Lästunga arbetsbelastningar:Aria
  • Allmänt syfte:InnoDB
  • SYRA:InnoDB
  • Skrivtunga arbetsbelastningar:MyRocks
  • Kompression:MyRocks
  • Sharded:Spindel
  • Analytiska arbetsbelastningar:MariaDB ColumnStore

Varför använda Aria för MariaDB

Medan InnoDB är standardlagringsmotorn för databaser skapade med MariaDB, används Aria för de flesta av de interna systemtabellerna från MariaDB Enterprise Server 10.4. Aria har ett litet utrymme och möjliggör enkel kopiering mellan system och är särskilt lämpad för lästunga arbetsbelastningar. Aria har ett avancerat sidbaserat lagringsformat som möjliggör överlägsen cachningsprestanda och är optimerat för samtidighet.

I verkliga miljöer producerar Aria bättre resultat för aggregerade konstruktioner (som GROUP BY eller ORDER BY) som är vanliga i analys och transaktionsbearbetning. Analyser och transaktionsbearbetning hittar enkla saker som summor, maximum och statistik. De flesta applikationer är starkt beroende av frågor som använder dessa aggregerade funktioner.
MariaDB använder Aria-lagringsmotorn för alla interna temporära tabeller på disken. Eftersom dessa tabeller ofta skapas internt för att köra GROUP BY- och DISTINCT-frågor, kan dessa typer av frågor dra nytta av Arias prestanda, även om den efterfrågade tabellen använder en annan motor.

Aria-lagringsmotorn är kompilerad som standard i MariaDB. Aria ingår i MariaDB Server (Enterprise and Community) utan ytterligare installation eller inställningar.

Aria-överväganden

Hur Aria bäst används beror på användningsfall, tabelldesign, åtkomstmönster (SQL-frågor), prestationsmål och återställningsmål.

Fördelar med Aria Nackdelar med Aria
  • Samtidig infogning i samma tabell från flera källor
  • Ineffektiv masslastning
  • Cache efter sida förmåga
  • Låsning av bordsnivå
  • Effektivt säkerhetskopierat av MariaDB Enterprise Backup

  • Saknar stöd för inbyggt främmande nyckel
  • Förbättrat PAGE-radformat:kraschsäkert som standard; operationer; ger anmärkningsvärd hastighetsförbättring för datacachning, särskilt på Windows
  • Saknar stöd SÄTTNING FÖRDRÖJD.
  • Krashsäkra tabeller och index
  • Cachingbegränsningar:flera nyckelcachar och beror på OS diskcache
  • Krashåterställning till början av ett sista uttalande eller lås
  • PAGE-format overhead:minsta filstorlek 16K; lagring av små rader; samma sidstorlek för index och data.
  • Optimerat LOAD INDEX
  • Stöder inte transaktioner (d.v.s. ROLLBACK och COMMIT)
  • Kompatibel med MyISAM ROW- och PAGE-formaten
  • Låg omkostnad
  • Överväg att använda Aria:

    • Om din ansökan gör många FULLTEXT-sökningar.
    • Om din applikation gör många GROUP BY-frågor.
    • Om din applikation inte behöver ACID-kompatibilitet eller främmande nycklar.
    • Om din applikation för närvarande använder MyISAM och kräver en mer avancerad motor för att möjliggöra bättre hastighet, säkerhetskopiering och automatisk kraschåterställning.

    Prestandajämförelser

    Det är en sak att jämföra isolerade frågor och en helt annan att titta på verkliga exempel. Vi gjorde några tester som jämförde Aria, InnoDB och MyISAM.

    Prestanda resultat
    InnoDB Aria MyISAM
    SQL 1 2.389 0,580 0,634
    SQL 2 2.169 0,530 0,598
    Enkelt benchmark:Aria vs MyISAM vs InnoDB

    I detta enkla riktmärke skapades en tabell och fylldes i med 2 miljoner rader. GROUP BY och ORDER BY-frågor gjordes och kopierades till alla tre alternativa lagringsmotorerna:InnoDB, Aria och MyISAM. Varje test kördes 10 gånger, med den genomsnittliga tiden (sekunder) registrerad för alla tester.

    Inställningar och kommandon som används för testning:

    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;

    Fortsätt att köra infogningen ovan tills cirka 2 miljoner rader finns i tabellen.

    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 |

    Bekräfta att det finns ett bra förhållande mellan distinkta och totala rader:

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

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

    Testa två olika sqls över InnoDB, Aria och 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

    Riktvärdesöversikt

    Tester visar att Aria är mycket snabbare på GROUP BY-nivån än antingen InnoDB eller MyISAM. Aria är något snabbare än MyISAM och säkerställer en kraschsäker miljö. Prestandatesterna visade att Aria är fyra gånger snabbare än InnoDB. På grund av skillnaderna i användningsfall bör var och en genomgå testning i MariaDB Enterprise Server med både Aria och InnoDB (eller annan, beroende på behov).

    Sammanfattning

    Beroende på din arbetsbelastning kan Aria ge prestandafördelar. Eftersom den ingår i MariaDB Server och kan appliceras per databas eller per tabell (ENGINE=ARIA), kan du testa prestanda för din specifika arbetsbelastning utan extra kostnad och mycket lite extra ansträngning – bara koppla in den och prova.

    För mer om lagringsmotorer och lagringsarkitektur, besök arbetsbelastningsoptimerade lagringsmotorer.


    1. Relationella kontra icke-relationella databaser – Del 2

    2. Konvertering av en datetime2-datatyp till en datetime-datatyp resulterar i ett värde utanför intervallet

    3. Använda Databas Backup Advisors för att automatisera underhållsuppgifter

    4. Kommer SQLite-prestandan att försämras om databasstorleken är större än 2 gigabyte?