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 |
| |
| |
| |
| |
| |
| |
| |
| |
|
Ö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.