sql >> Databáze >  >> RDS >> MariaDB

Storage Engine Volba:Aria

Platforma MariaDB zahrnuje různé moduly úložiště jako zásuvné součásti MariaDB Enterprise Server. To vám umožní vybrat si úložiště, které nejlépe vyhovuje pracovnímu zatížení konkrétní databáze nebo tabulky.

Úložný engine Aria byl vyvinut jako náhrada za MyISAM bezpečná při havárii a aktivně se vyvíjí od roku 2007. Když se MariaDB Server po havárii restartuje, Aria obnoví všechny tabulky do stavu na začátku příkazu nebo na začátku. posledního příkazu LOCK TABLES.

Úložné moduly MariaDB

Aktuální doporučení úložiště na základě pracovní zátěže:

  • Úlohy náročné na čtení:Aria
  • Obecný účel:InnoDB
  • ACID:InnoDB
  • Úlohy náročné na psaní:MyRocks
  • Komprese:MyRocks
  • Sharded:Spider
  • Analytické úlohy:MariaDB ColumnStore

Proč používat Aria pro MariaDB

Zatímco InnoDB je výchozím úložištěm pro databáze vytvořené pomocí MariaDB, Aria se používá pro většinu interních systémových tabulek z MariaDB Enterprise Server 10.4. Aria má malý půdorys a umožňuje snadné kopírování mezi systémy a je zvláště vhodná pro zátěže náročné na čtení. Aria má pokročilý formát úložiště založený na stránkách, který umožňuje vynikající výkon mezipaměti a je optimalizován pro souběžnost.

V prostředích reálného světa vytváří Aria lepší výsledky pro agregované konstrukce (jako je GROUP BY nebo ORDER BY), které převládají v analýze a zpracování transakcí. Analýzy a transakční zpracování najdou jednoduché věci, jako jsou součty, maxima a statistiky. Většina aplikací silně spoléhá na dotazy, které používají tyto agregační funkce.
MariaDB používá pro všechny interní dočasné tabulky na disku modul úložiště Aria. Vzhledem k tomu, že tyto tabulky jsou často vytvářeny interně pro provádění dotazů GROUP BY a DISTINCT, mohou tyto typy dotazů těžit z výkonu Aria, i když dotazovaná tabulka používá jiný engine.

Úložný modul Aria je ve výchozím nastavení zkompilován v MariaDB. Aria je součástí serveru MariaDB (Enterprise and Community) bez další instalace nebo nastavení.

Úvahy o Arii

Jak nejlépe používat Aria bude záviset na případu použití, návrhu tabulky, vzorech přístupu (dotazy SQL), cílech výkonu a cílech obnovy.

Výhody Aria Nevýhody Arie
  • Současné vkládání do stejné tabulky z více zdrojů
  • Neefektivní hromadné načítání
  • Možnost mezipaměti podle stránky
  • Zamykání na úrovni stolu
  • Efektivně zálohováno pomocí MariaDB Enterprise Backup

  • Chybí nativní podpora cizího klíče
  • Vylepšený formát řádků PAGE:ve výchozím nastavení bezpečný při zhroucení; operace; poskytuje výrazné zvýšení rychlosti ukládání dat do mezipaměti, zejména v systému Windows
  • Chybí podpora INSERT DELAYED.
  • Tabulky a indexy bezpečné při selhání
  • Omezení mezipaměti:více mezipaměti klíčů a závisí na mezipaměti disku OS
  • Zhroucení obnovení do začátku posledního příkazu nebo zámku
  • Režie formátu PAGE:minimální velikost souboru 16 kB; skladování malých řad; stejná velikost stránky pro index a data.
  • Optimalizovaný INDEX ZATÍŽENÍ
  • Nepodporuje transakce (tj. ROLLBACK a COMMIT)
  • Kompatibilní s formáty MyISAM ROW a PAGE
  • Nízká režie
  • Zvažte použití Aria:

    • Pokud vaše aplikace provádí mnoho FULLTEXTOVÝCH vyhledávání.
    • Pokud vaše aplikace provádí mnoho dotazů GROUP BY.
    • Pokud vaše aplikace nevyžaduje shodu s ACID nebo cizí klíče.
    • Pokud vaše aplikace v současnosti používá MyISAM a vyžaduje pokročilejší modul, který umožňuje vyšší rychlost, zálohování a automatické obnovení po havárii.

    Porovnání výkonu

    Jedna věc je porovnávat izolované dotazy a druhá věc je podívat se na příklady ze skutečného světa. Provedli jsme několik testů porovnávajících Aria, InnoDB a MyISAM.

    Výsledky výkonu
    InnoDB Aria MyISAM
    SQL 1 2,389 0,580 0,634
    SQL 2 2,169 0,530 0,598
    Jednoduchý benchmark:Aria vs MyISAM vs InnoDB

    V tomto jednoduchém benchmarku byla vytvořena tabulka a naplněna 2 miliony řádků. Dotazy GROUP BY a ORDER BY byly provedeny a zkopírovány do všech tří alternativních úložišť:InnoDB, Aria a MyISAM. Každý test proběhl 10krát, přičemž průměrný čas (v sekundách) byl zaznamenán pro všechny testy.

    Nastavení a příkazy používané pro testování:

    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;

    Pokračujte ve spouštění výše uvedeného vložení, dokud v tabulce nebudou asi 2 miliony řádků.

    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 |

    Potvrďte, že je přítomen dobrý poměr jednotlivých řádků k celkovému počtu:

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

    Arie

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

    Otestujte 2 různé sql napříč InnoDB, Aria a 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

    Rekapitulace srovnávacího testu

    Testování ukazuje, že Aria je mnohem rychlejší na úrovni GROUP BY než InnoDB nebo MyISAM. Aria je o něco rychlejší než MyISAM a zajišťuje prostředí bezpečné při pádu. Testy výkonu odhalily, že Aria je čtyřikrát rychlejší než InnoDB. Kvůli rozdílům v případech použití by měl každý projít testováním na MariaDB Enterprise Server pomocí Aria i InnoDB (nebo jiného, ​​podle potřeby).

    Shrnutí

    V závislosti na vaší pracovní zátěži může Aria poskytovat výkonnostní výhody. Protože je součástí serveru MariaDB a lze jej použít pro každou databázi nebo tabulku (ENGINE=ARIA), můžete testovat výkon pro vaši konkrétní pracovní zátěž bez dalších nákladů a s velmi malým úsilím – stačí jej zapojit a vyzkoušet.

    Další informace o úložných modulech a architektuře úložiště naleznete na stránkách úložných modulů optimalizovaných pro pracovní zátěž.


    1. Jak mohu UPDATE z SELECT v SQL Server?

    2. Jak importovat a exportovat databázi přes SSH

    3. Verze jádra PostgreSQL vs. Linux

    4. SQLalchemy neprovádí změny při nastavování role