sql >> Database teknologi >  >> RDS >> MariaDB

Valg af lagermotor:Aria

MariaDB Platform inkluderer en række forskellige storage-motorer som pluggbare komponenter i MariaDB Enterprise Server. Dette giver dig mulighed for at vælge den lagermotor, der passer bedst til arbejdsbyrden for en bestemt database eller tabel.

Aria-lagringsmotoren blev udviklet som en crash-sikker erstatning for MyISAM og har været i aktiv udvikling siden 2007. Når MariaDB Server genstarter efter et nedbrud, gendanner Aria alle tabeller til tilstanden fra starten af ​​en erklæring eller ved starten af den sidste LOCK TABLES-sætning.

MariaDB Storage Engines

Aktuelle anbefalinger til lagermotor baseret på arbejdsbelastning:

  • Læse-tunge arbejdsbyrder:Aria
  • Generelt formål:InnoDB
  • SYRE:InnoDB
  • Skrive-tunge arbejdsbelastninger:MyRocks
  • Kompression:MyRocks
  • Sharded:Edderkop
  • Analytiske arbejdsbelastninger:MariaDB ColumnStore

Hvorfor bruge Aria til MariaDB

Mens InnoDB er standardlagermaskinen for databaser oprettet med MariaDB, bruges Aria til de fleste af de interne systemtabeller fra MariaDB Enterprise Server 10.4. Aria har et lille fodaftryk og giver mulighed for nem kopiering mellem systemer og er særligt velegnet til læsetunge arbejdsbelastninger. Aria har et avanceret sidebaseret lagerformat, der giver mulighed for overlegen caching-ydeevne og er optimeret til samtidighed.

I virkelige miljøer producerer Aria bedre resultater for aggregerede konstruktioner (såsom GROUP BY eller ORDER BY), der er fremherskende i analyser og transaktionsbehandling. Analyse og transaktionsbehandling finder simple ting som totaler, maksimum og statistik. De fleste applikationer er stærkt afhængige af forespørgsler, der bruger disse samlede funktioner.
MariaDB bruger Aria-lagringsmotoren til alle interne midlertidige tabeller på disken. Da disse tabeller ofte oprettes internt for at udføre GROUP BY- og DISTINCT-forespørgsler, kan disse typer forespørgsler drage fordel af Arias ydeevne, selvom den forespurgte tabel bruger en anden motor.

Aria-lagermotoren er kompileret som standard i MariaDB. Aria er inkluderet med MariaDB Server (Enterprise og Community) uden yderligere installation eller opsætning.

Aria-overvejelser

Hvordan Aria bedst bruges, vil afhænge af use case, tabeldesign, adgangsmønstre (SQL-forespørgsler), ydeevnemål og gendannelsesmål.

Fordele ved Aria Ulemper ved Aria
  • Samtidig indsættelse i den samme tabel fra flere kilder
  • Ineffektiv masseindlæsning
  • Cache efter sideevne
  • Låsning af bordniveau
  • Effektivt sikkerhedskopieret af MariaDB Enterprise Backup

  • Mangler understøttelse af indbygget udenlandsk nøgle
  • Forbedret PAGE-rækkeformat:crash-sikker som standard; operationer; giver en bemærkelsesværdig hastighedsforbedring til datacachelagring, især på Windows
  • Mangler støtte. INDSÆT FORSINKET.
  • Hard-sikre tabeller og indekser
  • Caching-begrænsninger:flere nøglecaches og afhænger af OS-diskcache
  • Gendannelse af nedbrud til starten af ​​en sidste erklæring eller lås
  • PAGE format overhead:minimum filstørrelse 16K; opbevaring af små rækker; samme sidestørrelse for indeks og data.
  • Optimeret LOAD INDEX
  • Understøtter ikke transaktioner (dvs. ROLLBACK og COMMIT)
  • Kompatibel med MyISAM ROW- og PAGE-formaterne
  • Lav overhead
  • Overvej at bruge Aria:

    • Hvis din applikation udfører mange søgninger i FULD TEKST.
    • Hvis din applikation udfører mange GROUP BY-forespørgsler.
    • Hvis din applikation ikke har brug for ACID-overholdelse eller fremmednøgler.
    • Hvis din applikation i øjeblikket bruger MyISAM og kræver en mere avanceret motor for at tillade bedre hastighed, sikkerhedskopiering og automatisk gendannelse af nedbrud.

    Sammenligning af ydeevne

    Det er én ting at sammenligne isolerede forespørgsler og noget andet at se på eksempler fra den virkelige verden. Vi lavede nogle test, der sammenlignede Aria, InnoDB og MyISAM.

    Ydeevneresultater
    InnoDB Aria MyISAM
    SQL 1 2.389 0,580 0,634
    SQL 2 2.169 0,530 0,598
    Simpelt benchmark:Aria vs MyISAM vs InnoDB

    I denne enkle benchmark blev en tabel oprettet og udfyldt med 2 millioner rækker. GROUP BY og ORDER BY-forespørgsler blev udført og kopieret ind i alle tre alternative storage-motorer:InnoDB, Aria og MyISAM. Hver test kørte 10 gange, med den gennemsnitlige tid (sekunder) registreret for alle tests.

    Opsætning og kommandoer brugt til test:

    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æt med at køre ovenstående indsættelse, indtil der er omkring 2 millioner rækker 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æft, at der er et godt forhold mellem forskellige rækker i forhold til det samlede antal rækker:

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

    Test 2 forskellige sqls på tværs af InnoDB, Aria og 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

    Recap af benchmark

    Test viser, at Aria er meget hurtigere på GROUP BY-niveau end enten InnoDB eller MyISAM. Aria er lidt hurtigere end MyISAM og sikrer et nedbrudssikkert miljø. Ydeevnetestene afslørede, at Aria er fire gange hurtigere end InnoDB. På grund af forskellene i brugstilfælde bør hver enkelt gennemgå test i MariaDB Enterprise Server ved hjælp af både Aria og InnoDB (eller en anden, afhængigt af behov).

    Oversigt

    Afhængigt af din arbejdsbyrde kan Aria give ydeevnefordele. Fordi det er inkluderet med MariaDB Server og kan anvendes pr. database eller pr. tabel (ENGINE=ARIA), kan du teste ydeevnen for din specifikke arbejdsbyrde uden ekstra omkostninger og meget lidt ekstra indsats - bare tilslut den og prøv det.

    For mere om lagringsmotorer og lagringsarkitektur, besøg workload-optimerede lagringsmotorer.


    1. Hvornår indekserer Oracle kolonneværdier null?

    2. Kan du få adgang til den automatiske stigningsværdi i MySQL inden for en erklæring?

    3. SQL:Når det kommer til NOT IN og NOT Equal TO, hvad er mere effektivt og hvorfor?

    4. Om pglogisk ydeevne