sql >> Database >  >> RDS >> MariaDB

Keuze opslagmotor:Aria

MariaDB Platform bevat een verscheidenheid aan opslag-engines als pluggable componenten van MariaDB Enterprise Server. Hierdoor kunt u de opslagengine kiezen die het beste past bij de werklast van een bepaalde database of tabel.

De Aria-opslagengine is ontwikkeld als een crashveilige vervanging voor MyISAM en is sinds 2007 actief in ontwikkeling. Wanneer MariaDB Server opnieuw wordt opgestart na een crash, herstelt Aria alle tabellen naar de staat vanaf het begin van een instructie of aan het begin van de laatste LOCK TABLES-instructie.

MariaDB-opslagengines

Huidige aanbevelingen voor opslagengine op basis van werkbelasting:

  • Lees-zware werkbelasting:Aria
  • Algemeen doel:InnoDB
  • ACID:InnoDB
  • Schrijf-zware werkbelasting:MyRocks
  • Compressie:MyRocks
  • Sharded:Spin
  • Analytische workloads:MariaDB ColumnStore

Waarom Aria gebruiken voor MariaDB

Terwijl InnoDB de standaard opslagengine is voor databases die met MariaDB zijn gemaakt, wordt Aria gebruikt voor de meeste interne systeemtabellen van MariaDB Enterprise Server 10.4. Aria heeft een kleine footprint en zorgt voor eenvoudig kopiëren tussen systemen en is bijzonder geschikt voor leesintensieve workloads. Aria heeft een geavanceerd op pagina's gebaseerd opslagformaat dat superieure cachingprestaties mogelijk maakt en is geoptimaliseerd voor gelijktijdigheid.

In echte omgevingen produceert Aria betere resultaten voor geaggregeerde constructies (zoals GROUP BY of ORDER BY) die veel voorkomen in analyses en transactieverwerking. Analytics en transactieverwerking vinden eenvoudige dingen zoals totalen, maxima en statistieken. De meeste toepassingen zijn sterk afhankelijk van query's die deze aggregatiefuncties gebruiken.
MariaDB gebruikt de Aria-opslagengine voor alle interne tijdelijke tabellen op de schijf. Aangezien deze tabellen vaak intern worden gemaakt om GROUP BY- en DISTINCT-query's uit te voeren, kunnen dit soort query's profiteren van de prestaties van Aria, zelfs als de opgevraagde tabel een andere engine gebruikt.

De Aria-opslagengine is standaard ingecompileerd in MariaDB. Aria is inbegrepen bij MariaDB Server (Enterprise en Community) zonder extra installatie of configuratie.

Aria-overwegingen

Hoe u Aria het beste kunt gebruiken, hangt af van de use case, het tabelontwerp, toegangspatronen (SQL-query's), prestatiedoelen en hersteldoelen.

Voordelen van Aria Nadelen van Aria
  • Gelijktijdig invoegen in dezelfde tabel vanuit meerdere bronnen
  • Inefficiënte bulklading
  • Cache op paginacapaciteit
  • Vergrendeling op tafelniveau
  • Efficiënt geback-upt door MariaDB Enterprise Backup

  • Geen ondersteuning voor native externe sleutel
  • Verbeterde PAGE rij-indeling:standaard crashveilig; activiteiten; biedt opmerkelijke snelheidsverbetering voor gegevenscaching, vooral op Windows
  • Geen ondersteuning INSERT DELAYED.
  • Crashveilige tabellen en indexen
  • Cachebeperkingen:meerdere sleutelcaches en afhankelijk van de schijfcache van het besturingssysteem
  • Crashherstel naar het begin van een laatste instructie of slot
  • PAGE formaat overhead:minimale bestandsgrootte 16K; opslag van kleine rijen; hetzelfde paginaformaat voor index en gegevens.
  • Geoptimaliseerde LOAD INDEX
  • Ondersteunt geen transacties (d.w.z. ROLLBACK en COMMIT)
  • Compatibel met MyISAM ROW- en PAGE-indelingen
  • Lage overhead
  • Overweeg om Aria te gebruiken:

    • Als uw toepassing veel FULL-TEXT-zoekopdrachten uitvoert.
    • Als uw toepassing veel GROUP BY-query's uitvoert.
    • Als uw toepassing geen ACID-compliance of externe sleutels nodig heeft.
    • Als uw toepassing momenteel MyISAM gebruikt en een geavanceerdere engine vereist voor betere snelheid, back-ups en geautomatiseerd herstel na crashes.

    Prestatievergelijkingen

    Het is één ding om geïsoleerde zoekopdrachten te vergelijken en heel iets anders om naar praktijkvoorbeelden te kijken. We hebben wat tests gedaan om Aria, InnoDB en MyISAM te vergelijken.

    Prestatieresultaten
    InnoDB Aria MijnISAM
    SQL 1 2.389 0,580 0.634
    SQL 2 2.169 0.530 0,598
    Eenvoudige benchmark:Aria vs MyISAM vs InnoDB

    In deze eenvoudige benchmark is een tabel gemaakt en gevuld met 2 miljoen rijen. GROUP BY en ORDER BY-query's werden uitgevoerd en gekopieerd naar alle drie de alternatieve storage-engines:InnoDB, Aria en MyISAM. Elke test werd 10 keer uitgevoerd, waarbij de gemiddelde tijd (seconden) voor alle tests werd geregistreerd.

    Setup en commando's gebruikt voor het testen:

    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;

    Blijf de bovenstaande invoeging uitvoeren totdat er ongeveer 2 miljoen rijen in de tabel staan.

    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 |

    Bevestig dat er een goede verhouding tussen verschillende en totale rijen aanwezig is:

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

    MijnISAM

    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 verschillende sqls in InnoDB, Aria en 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

    Benchmarkoverzicht

    Tests tonen aan dat Aria veel sneller is op GROUP BY-niveau dan InnoDB of MyISAM. Aria is iets sneller dan MyISAM en zorgt voor een crashveilige omgeving. Uit de prestatietests bleek dat Aria vier keer sneller is dan InnoDB. Vanwege de verschillen in gebruikssituaties, moet elk ervan worden getest in de MariaDB Enterprise Server met zowel Aria als InnoDB (of een andere, afhankelijk van de behoefte).

    Samenvatting

    Afhankelijk van uw werklast kan Aria prestatievoordelen bieden. Omdat het wordt meegeleverd met MariaDB Server en kan worden toegepast per database of per tabel (ENGINE=ARIA), kunt u de prestaties voor uw specifieke werklast testen zonder extra kosten en met heel weinig extra inspanning - sluit het gewoon aan en probeer het.

    Ga voor meer informatie over storage-engines en storage-architectuur naar voor workloads geoptimaliseerde storage-engines.


    1. MySQL dagen toevoegen aan een datum

    2. alembic util-opdrachtfout kan id niet vinden

    3. CSV-gegevens invoegen in PostgreSQL-database (externe database)

    4. GROUP BY-gedrag wanneer er geen aggregatiefuncties aanwezig zijn in de SELECT-component