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

Použití Aria Storage Engine se serverem MariaDB

MariaDB Server je jedním z nejpopulárnějších databázových serverů s otevřeným zdrojovým kódem. Byl vytvořen původními vývojáři MySQL a stal se oblíbeným pro svou rychlost, škálovatelnost a robustnost. MariaDB má bohatý ekosystém úložišť, pluginů a dalších dostupných nástrojů, díky kterým je velmi univerzální pro širokou škálu případů použití.

Pokud jde o modul úložiště MariaDB, máte na výběr různé typy, například XtraDB, InnoDB, MyRocks, MyISAM nebo dokonce Aria. Neexistuje nejlepší typ úložiště, protože to závisí na samotném pracovním zatížení. Poslední zmíněný, Aria Storage Engine, je ve výchozím nastavení zkompilován z MariaDB 5.1 a je nutné, aby byl při spuštění služby MariaDB „v provozu“.

V tomto blogu uvidíme, co je Aria Storage Engine a jak jej používat na serveru MariaDB.

Co je úložiště Aria?

Aria je úložiště pro MySQL a MariaDB. Původně byl vyvinut s cílem stát se výchozím transakčním a netransakčním úložištěm pro MariaDB a MySQL.

V současné době podporuje šifrování a detekci uváznutí a nabízí také alternativu k MyISAM, která je bezpečná při pádu. Když se MariaDB 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.

Aria podporuje externí a interní kontrolu, opravu a kompresi řádků, různé formáty řádků, různé formáty komprimace indexů, aria_chk a další.

Toto úložiště se používá pro systémové tabulky MariaDB od verze 10.4.

Rozdíly mezi Aria a MyISAM

Podívejme se na některé základní rozdíly mezi Aria a jeho přímým konkurentem:MyISAM, a poté na výhody a nevýhody Aria Storage Engine.

  • Aria používá velké soubory protokolu (ve výchozím nastavení 1G).
  • Aria má kontrolní soubor protokolu (aria_log_control) a soubory protokolu (aria_log.%). Soubory protokolu mohou být automaticky vyčištěny, když nejsou potřeba, nebo na vyžádání.
  • Aria používá ve výchozím nastavení 8K stránek, zatímco MyISAM používá 1K. Díky tomu je Aria o něco rychlejší při použití klíčů pevné velikosti, ale pomalejší při použití sbalených klíčů s proměnnou délkou.

Výhody Aria Storage Engine

  • Data a indexy jsou bezpečné při zhroucení.
  • Při selhání budou změny vráceny zpět do stavu začátku příkazu nebo posledního příkazu LOCK TABLES.
  • Aria dokáže z protokolu přehrát téměř vše. Věci, které ještě nelze přehrát, jsou:
    • Dávkové INSERT do prázdné tabulky.
    • ALTER TABULKY.
  • LOAD INDEX může přeskočit bloky indexu pro nežádoucí indexy.
  • Podporuje všechny formáty MyISAM ROW a nový formát PAGE, kde jsou data uložena na stránkách.
  • Více souběžných vkladačů do stejné tabulky.
  • Při použití formátu PAGE se data řádků ukládají do mezipaměti stránky.
  • Aria má testy jednotek většiny dílů.
  • Podporuje jak tabulky bezpečné při zhroucení, tak netransakční tabulky.
  • PAGE je jediný formát řádků bezpečný při zhroucení/transakce.
  • Formát PAGE by měl u systémů, které mají špatné ukládání dat do mezipaměti, poskytnout výrazné zvýšení rychlosti.
  • Od MariaDB 10.5 je maximální délka klíče 2000 bajtů ve srovnání s 1000 bajty v MyISAM.

Nevýhody Aria Storage Engine

  • Aria nepodporuje INSERT DELAYED.
  • Aria nepodporuje více mezipaměti klíčů.
  • Ukládání velmi malých řádků (<25 bajtů) není pro formát PAGE efektivní.
  • Tabulky MERGE nepodporují Aria.
  • Datové stránky Aria v blokovém formátu mají režii 10 bajtů na stránku a 5 bajtů na řádek. Transakce a podpora vícenásobného souběžného zápisu bude využívat dodatečnou režii 7 bajtů pro nové řádky, 14 bajtů pro odstraněné řádky a 0 bajtů pro staré komprimované řádky.
  • Žádné externí zamykání.
  • Aria má jednu velikost stránky pro index i data. MyISAM podporuje různé velikosti stránek na index.
  • Malá režie na stránku indexu (15 bajtů).
  • Minimální velikost datového souboru pro formát PAGE je 16 kB.
  • Aria nepodporuje indexy na virtuálních polích.

Formáty úložiště Aria

Podporuje tři různé formáty úložiště tabulek.

Pevná délka

Tyto tabulky obsahují záznamy pevné délky. Každý sloupec má stejnou délku pro všechny záznamy bez ohledu na skutečný obsah. Je to výchozí formát, pokud tabulka nemá žádná pole BLOB, TEXT, VARCHAR nebo VARBINARY a není zadán žádný FORMÁT ŘÁDKŮ.

Charakteristika:

  • Rychlé, protože MariaDB bude vždy vědět, kde začíná záznam.
  • Snadné ukládání do mezipaměti.
  • Zabírají více místa než dynamické tabulky, protože každému záznamu bude přiděleno maximální množství úložného prostoru.
  • Rekonstrukce po havárii je díky pevným polohám nekomplikovaná.
  • Žádná fragmentace nebo potřeba reorganizace, pokud nebyly záznamy smazány a nechcete uvolnit místo.

Tabulky obsahující pole BLOB nebo TEXT nelze OPRAVIT, protože záměrně se jedná o dynamická pole.

Dynamické

Tyto tabulky obsahují záznamy různé délky. Je to výchozí formát, pokud tabulka obsahuje pole BLOB, TEXT, VARCHAR nebo VARBINARY a není zadán žádný FORMÁT ŘÁDKŮ.

Charakteristika:

  • Každý řádek obsahuje záhlaví udávající délku řádku.
  • Řádky mají tendenci se snadno fragmentovat. AKTUALIZACE záznamu tak, aby byl delší, pravděpodobně zajistí, že bude uložen na různých místech na disku.
  • Všechny sloupce řetězce s délkou čtyř nebo více jsou dynamické.
  • Vyžadují mnohem méně místa než stoly s pevnou délkou.
  • Obnova po havárii je složitější než u tabulek FIXED.

Stránka

Je to výchozí formát pro tabulky Aria a je to jediný formát, který lze použít, pokud je TRANSACTIONAL nastaveno na 1.

Charakteristika:

  • Ukládá se do mezipaměti stránky, což poskytuje lepší náhodný výkon, protože využívá méně systémových volání.
  • Nefragmentuje se tak snadno jako DYNAMICKÝ formát během AKTUALIZACÍ. Maximální počet fragmentů je velmi nízký.
  • Aktualizuje se rychleji než dynamické tabulky.
  • Má mírnou režii úložiště, která je patrná zejména na velmi malých řadách.
  • Pomalejší pro provedení úplného prohledání tabulky.
  • Pomalší, pokud existuje více duplicitních klíčů, protože Aria nejprve zapíše řádek, poté klíče a teprve potom zkontroluje duplikáty.

Pro zjištění formátu úložiště používaného tabulkou můžete použít příkaz SHOW TABLE STATUS.

Transakční možnosti pro Aria Storage Engine

Ve skutečnosti pro Aria transakční znamená bezpečné zhroucení a není podporováno u dělených tabulek. Aby to fungovalo, vyžaduje také formát řádku PAGE.

Možnosti tabulky TRANSACTIONAL a ROW_FORMAT fungují následovně:

  • Pokud je nastaveno TRANSACTIONAL=1, pak je jediným podporovaným formátem řádku PAGE. Pokud je ROW_FORMAT nastaven na nějakou jinou hodnotu, pak Aria vydá varování, ale stále vynutí formát řádku PAGE.
  • Pokud je nastaveno TRANSACTIONAL=0, tabulka nebude bezpečná proti zhroucení a je podporován jakýkoli formát řádků.
  • Pokud není TRANSACTIONAL nastavena na žádnou hodnotu, je podporován jakýkoli formát řádku. Pokud je nastaven ROW_FORMAT, pak tabulka použije tento formát řádku. V opačném případě bude tabulka používat výchozí formát řádku PAGE. V tomto případě, pokud tabulka používá formát řádků PAGE, bude bezpečná při zhroucení. Pokud používá nějaký jiný formát řádků, nebude bezpečný.

Jak používat Aria Storage Engine na serveru MariaDB

Nejprve musíte vytvořit databázi (pokud ji nemáte) a použít ji:

MariaDB [(none)]> create database db1;

Query OK, 1 row affected (0.003 sec)

MariaDB [(none)]> use db1

Database changed

Potom vytvořte tabulku pomocí nástroje „Aria“:

MariaDB [db1]> CREATE TABLE table1 (id int(11) DEFAULT NULL, name text)

    -> ENGINE=Aria

    -> TRANSACTIONAL=1;

Query OK, 0 rows affected (0.025 sec)

Zadali jsme hodnotu TRANSACTIONAL v 1, abychom ji zde viděli, ale jak jsme zmínili, není to nutné, protože ve výchozím nastavení bude 1, pokud používáme Aria bez zadání hodnot Formát řádku a Transakční hodnoty. Nyní budete mít tabulku vytvořenou:

MariaDB [db1]> SHOW CREATE TABLE table1\G

*************************** 1. row ***************************

       Table: table1

Create Table: CREATE TABLE `table1` (

  `id` int(11) DEFAULT NULL,

  `name` text DEFAULT NULL

) ENGINE=Aria DEFAULT CHARSET=latin1 PAGE_CHECKSUM=1 TRANSACTIONAL=1

1 row in set (0.000 sec)

A ve stavu tabulky můžete zkontrolovat hodnoty transakčního i řádkového formátu:

MariaDB [db1]> SHOW TABLE STATUS\G

*************************** 1. row ***************************

            Name: table1

          Engine: Aria

         Version: 10

      Row_format: Page

            Rows: 0

  Avg_row_length: 0

     Data_length: 8192

 Max_data_length: 17592186011648

    Index_length: 8192

       Data_free: 0

  Auto_increment: NULL

     Create_time: 2020-06-30 18:59:17

     Update_time: 2020-06-30 18:59:17

      Check_time: NULL

       Collation: latin1_swedish_ci

        Checksum: NULL

  Create_options: transactional=1

         Comment:

Max_index_length: 137438945280

       Temporary: N

1 rows in set (0.001 sec)

Existuje mnoho parametrů ke konfiguraci souvisejících s Aria Storage Engine. Úplný seznam najdete na oficiálním webu s dokumentací.

Nástroje Aria Storage Engine

Podívejme se na některé nástroje pro práci s tímto úložištěm.

aria_chk

Aria_chk se používá ke kontrole, opravě, optimalizaci, třídění a získávání informací o tabulkách Aria. Se serverem MariaDB můžete k podobným věcem použít KONTROLNÍ TABULKU, TABULKU OPRAV a TABULKU OPTIMALIZACE.

Tento nástroj by se neměl používat, když běží MariaDB, protože předpokládá, že se tabulka během jeho používání nezmění.

$ aria_chk [OPTIONS] aria_tables[.MAI]

Podobně jako u MyISAM jsou informace tabulky Aria uloženy ve 2 různých souborech: 

  • Soubor MAI obsahuje informace o základní tabulce a index.
  • Soubor MAD obsahuje data.
Aria_chk takes one or more MAI files as arguments.

For example, to check all your tables and repairs only those that have an error, run this command in your data directory:

$ aria_chk --check --force --sort_buffer_size=1G */*.MAI

Checking Aria file: db1/table1.MAI

Data records:       0   Deleted blocks:       0

- check file-size

- check key delete-chain

- check index reference

- check record links

...

aria_pack

Aria_pack je nástroj pro kompresi tabulek Aria. Výsledné tabulky jsou pouze pro čtení a obvykle o 40 % až 70 % menší. Název souboru používaný tímto nástrojem je indexový soubor .MAI.

$ aria_pack [options] file_name [file_name2...]

Aria_pack komprimuje každý sloupec samostatně a při čtení výsledných dat je třeba dekomprimovat pouze jednotlivé požadované řádky a sloupce, což umožňuje rychlejší čtení.

$ aria_pack /var/lib/mysql/world/country

Compressing aria_pack /var/lib/mysql/world/country.MAD: (549 records)

- Calculating statistics

- Compressing file

37.71%

Remember to run aria_chk -rq on compressed tables

Jakmile byla tabulka sbalena, použijte příkaz aria_chk -rq k opětovnému sestavení jejích indexů.

$ aria_chk -rq --ignore-control-file /var/lib/mysql/world/country

Recreating table '/var/lib/mysql/world/country'

- check record delete-chain

- recovering (with sort) Aria-table '/var/lib/mysql/world/country'

Data records: 549

- Fixing index 1

State updated

aria_read_log

Aria_read_log je nástroj pro zobrazení a použití záznamů protokolu z protokolu transakcí Aria.

$ aria_read_log OPTIONS

Musíte použít jednu z možností „-d“ nebo „-a“:

  • a:Použít protokol na tabulky:upravuje tabulky. Nejprve byste měli provést zálohu. Pokud nepoužijete parametr --silent, zobrazí mnoho informací.
  • d:Zobrazí stručné informace přečtené z hlavičky záznamů.
$ cd /var/lib/mysql

$ aria_read_log -d

You are using --display-only, NOTHING will be written to disk

The transaction log starts from lsn (1,0x2007)

TRACE of the last aria_read_log

Rec#1 LSN (1,0x2007) short_trid 0 redo_create_table(num_type:30) len 1042

Rec#2 LSN (1,0x2421) short_trid 0 redo_create_table(num_type:30) len 527

Rec#3 LSN (1,0x2638) short_trid 61986 long_transaction_id(num_type:36) len 6

Rec#4 LSN (1,0x2641) short_trid 61986 file_id(num_type:35) len 22

Rec#5 LSN (1,0x265d) short_trid 61986 undo_bulk_insert(num_type:39) len 9

Rec#6 LSN (1,0x266a) short_trid 0 incomplete_log(num_type:37) len 2

Rec#7 LSN (1,0x266f) short_trid 61986 commit(num_type:27) len 0

...

Závěr

Jak můžete vidět, Aria Storage Engine má oproti MyISAM mnoho vylepšení a je to skvělá alternativa k použití. Jeho použití je také snadné, protože je součástí instalace serveru MariaDB, takže k jeho aktivaci stačí pouze zadání parametru ENGINE tabulky.

MariaDB na tomto úložišti stále pracuje, takže pravděpodobně brzy uvidíme nová vylepšení v budoucích verzích.


  1. MariaDB RTRIM() vs RTRIM_ORACLE():Jaký je rozdíl?

  2. ) Operátor pro začátečníky

  3. Získejte přístup k pohledu odborníků na summit MVP 2020

  4. Jak vytvořit databázový model od nuly