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

Brug af Aria Storage Engine med MariaDB Server

MariaDB Server er en af ​​de mest populære open source-databaseservere. Det blev skabt af de oprindelige udviklere af MySQL, og det blev populært for at være hurtigt, skalerbart og robust. MariaDB har et rigt økosystem af lagringsmotorer, plugins og andre tilgængelige værktøjer, der gør det meget alsidigt til en bred vifte af brugssager.

Med hensyn til MariaDB-lagringsmotoren har du forskellige typer at vælge imellem, såsom XtraDB, InnoDB, MyRocks, MyISAM eller endda Aria. Der er ikke den bedste lagringsmotortype, fordi den afhænger af selve arbejdsbyrden. Den sidst nævnte, Aria Storage Engine, er kompileret som standard fra MariaDB 5.1, og den skal være 'i brug', når MariaDB-tjenesten startes.

I denne blog vil vi se, hvad Aria Storage Engine er, og hvordan man bruger den i en MariaDB-server.

Hvad er Aria Storage?

Aria er en lagermaskine til MySQL og MariaDB. Det blev oprindeligt udviklet med det mål at blive standard-transaktionelle og ikke-transaktionelle lagringsmotorer til MariaDB og MySQL.

I øjeblikket understøtter den kryptering og deadlock-detektion, og den tilbyder også et nedbrudssikkert alternativ til MyISAM. Når MariaDB genstarter efter et nedbrud, gendanner Aria alle tabeller til tilstanden fra starten af ​​en sætning eller ved starten af ​​den sidste LOCK TABLES-sætning.

Aria understøtter ekstern og intern kontrol, reparation og komprimering af rækker, forskellige rækkeformater, forskellige indekskomprimeringsformater, aria_chk og mere.

Denne lagermaskine er blevet brugt til MariaDB-systemtabellerne siden 10.4-versionen.

Forskelle mellem Aria og MyISAM

Lad os se nogle grundlæggende forskelle mellem Aria og hans direkte konkurrent:MyISAM, og så fordelene og ulemperne ved Aria Storage Engine.

  • Aria bruger store logfiler (1G som standard).
  • Aria har en logkontrolfil (aria_log_control) og logfiler (aria_log.%). Logfilerne kan renses automatisk, når de ikke er nødvendige, eller slettes efter behov.
  • Aria bruger 8K sider som standard, mens MyISAM bruger 1K. Dette gør Aria en smule hurtigere, når du bruger taster med fast størrelse, men langsommere, når du bruger pakkede nøgler med variabel længde.

Fordele ved Aria Storage Engine

  • Data og indekser er nedbrudssikre.
  • Ved et nedbrud vil ændringer blive rullet tilbage til tilstanden for starten af ​​en erklæring eller en sidste LOCK TABLES-sætning.
  • Aria kan afspille næsten alt fra loggen. De ting, der endnu ikke kan afspilles, er:
    • Batch INSERT i en tom tabel.
    • ÆNDRINGSTABELLER.
  • LOAD INDEX kan springe indeksblokke over for uønskede indekser.
  • Understøtter alle MyISAM ROW-formater og nyt PAGE-format, hvor data gemmes på sider.
  • Flere samtidige indsættere i samme tabel.
  • Når du bruger PAGE-format, cachelagres rækkedata af sidecache.
  • Aria har enhedstest af de fleste dele.
  • Understøtter både nedbrudssikre og ikke transaktionstabeller.
  • PAGE er det eneste nedbrudssikre/transaktionelle rækkeformat.
  • SIDE-format bør give en markant hastighedsforbedring på systemer, der har dårlig datacache.
  • Fra MariaDB 10.5 er den maksimale nøglelængde 2000 bytes sammenlignet med 1000 bytes i MyISAM.

Ulempe ved Aria Storage Engine

  • Aria understøtter ikke INSERT DELAYED.
  • Aria understøtter ikke flere nøglecaches.
  • Lagringen af ​​meget små rækker (<25 bytes) er ikke effektiv til PAGE-format.
  • MERGE-tabeller understøtter ikke Aria.
  • Aria-datasider i blokformat har en overhead på 10 bytes/side og 5 bytes/række. Transaktion og understøttelse af flere samtidige skrivere vil bruge en ekstra overhead på 7 bytes til nye rækker, 14 bytes til slettede rækker og 0 bytes til gamle komprimerede rækker.
  • Ingen ekstern låsning.
  • Aria har én sidestørrelse for både indeks og data. MyISAM understøtter forskellige sidestørrelser pr. indeks.
  • Små overhead pr. indeksside (15 bytes).
  • Den mindste datafilstørrelse for PAGE-format er 16K.
  • Aria understøtter ikke indekser på virtuelle felter.

Aria-lagringsformaterne

Den understøtter tre forskellige tabellagringsformater.

Fast længde

Disse tabeller indeholder poster med en fast længde. Hver kolonne har samme længde for alle poster, uanset det faktiske indhold. Det er standardformatet, hvis en tabel ikke har nogen BLOB-, TEXT-, VARCHAR- eller VARBINARY-felter, og der ikke er angivet et RÆKJEFORMAT.

Kenskaber:

  • Hurtigt, da MariaDB altid ved, hvor en registrering begynder.
  • Nem at cache.
  • Optager mere plads end dynamiske tabeller, da den maksimale mængde lagerplads vil blive allokeret til hver post.
  • Rekonstruktion efter et nedbrud er ukompliceret på grund af de faste positioner.
  • Ingen fragmentering eller behov for at omorganisere, medmindre poster er blevet slettet, og du vil frigøre plads.

Tabeller, der indeholder BLOB- eller TEXT-felter, kan ikke LØSES, da disse begge er dynamiske felter.

Dynamisk

Disse tabeller indeholder poster med variabel længde. Det er standardformatet, hvis en tabel har BLOB-, TEXT-, VARCHAR- eller VARBINARY-felter, og der ikke er angivet RÆKKEFORMAT.

Kenskaber:

  • Hver række indeholder en overskrift, der angiver længden af ​​rækken.
  • Rækker har en tendens til let at blive fragmenterede. OPDATERING af en post til at være længere vil sandsynligvis sikre, at den gemmes forskellige steder på disken.
  • Alle strengkolonner med en længde på fire eller mere er dynamiske.
  • De kræver meget mindre plads end tabeller med fast længde.
  • Gendannelse efter et nedbrud er mere kompliceret end med FASTE tabeller.

Side

Det er standardformatet for Aria-tabeller og er det eneste format, der kan bruges, hvis TRANSACTIONAL er sat til 1.

Kenskaber:

  • Den cachelagres af sidecachen, hvilket giver en bedre tilfældig ydeevne, da den bruger færre systemkald.
  • Det fragmenteres ikke så let som det DYNAMISKE format under OPDATERINGER. Det maksimale antal fragmenter er meget lavt.
  • Opdaterer hurtigere end dynamiske tabeller.
  • Har en lille lageroverhead, primært bemærkelsesværdig på meget små rækker.
  • Langsommere at udføre en fuld tabelscanning.
  • Langsommere, hvis der er flere dubletter, da Aria først skriver en række, derefter nøgler og først derefter tjekker for dubletter.

For at kende lagerformatet, der bruges af en tabel, kan du bruge SHOW TABLE STATUS-sætningen.

Transaktionsmuligheder for Aria Storage Engine

Faktisk betyder transaktioner for Aria nedbrudssikker, og det er ikke understøttet for partitionerede tabeller. Det kræver også PAGE-rækkeformatet for at få det til at fungere.

Tabelindstillingerne TRANSACTIONAL og ROW_FORMAT interagerer som følger:

  • Hvis TRANSACTIONAL=1 er indstillet, er det eneste understøttede rækkeformat PAGE. Hvis ROW_FORMAT er indstillet til en anden værdi, udsender Aria en advarsel, men tvinger stadig rækkeformatet til at være PAGE.
  • Hvis TRANSACTIONAL=0 er indstillet, vil tabellen ikke være nedbrudssikker, og ethvert rækkeformat er understøttet.
  • Hvis TRANSACTIONAL ikke er indstillet til nogen værdi, understøttes ethvert rækkeformat. Hvis ROW_FORMAT er indstillet, vil tabellen bruge dette rækkeformat. Ellers vil tabellen bruge standard-rækkeformatet PAGE. I dette tilfælde, hvis tabellen bruger PAGE-rækkeformatet, vil den være nedbrudssikker. Hvis den bruger et andet rækkeformat, vil den ikke være nedbrudssikker.

Sådan bruges Aria Storage Engine på MariaDB Server

Først skal du oprette en database (hvis du ikke har en oprettet), og bruge den:

MariaDB [(none)]> create database db1;

Query OK, 1 row affected (0.003 sec)

MariaDB [(none)]> use db1

Database changed

Opret derefter en tabel ved hjælp af "Aria"-motoren:

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

    -> ENGINE=Aria

    -> TRANSACTIONAL=1;

Query OK, 0 rows affected (0.025 sec)

Vi specificerede TRANSACTIONAL-værdien i 1 for at se den her, men, som vi nævnte, er den ikke nødvendig, da den vil være 1 som standard, hvis vi bruger Aria uden at angive rækkeformat og transaktionsværdier. Nu vil du have tabellen oprettet:

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)

Og i tabelstatus kan du kontrollere både transaktions- og rækkeformatværdierne:

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)

Der er mange parametre, der skal konfigureres relateret til Aria Storage Engine. Du kan finde en komplet liste på den officielle dokumentationsside.

Aria Storage Engine Tools

Lad os se nogle værktøjer til at arbejde med denne lagermaskine.

aria_chk

Aria_chk bruges til at kontrollere, reparere, optimere, sortere og få information om Aria-tabeller. Med MariaDB-serveren kan du bruge CHECK TABLE, REPARATION TABLE og OPTIMIZE TABLE til at gøre lignende ting.

Dette værktøj bør ikke bruges, når MariaDB kører, da det antager, at tabellen ikke vil blive ændret under hans brug.

$ aria_chk [OPTIONS] aria_tables[.MAI]

I lighed med MyISAM er Aria-tabeloplysningerne gemt i 2 forskellige filer: 

  • MAI-filen indeholder oplysninger om basistabel og indekset.
  • MAD-filen indeholder dataene.
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 er et værktøj til at komprimere Aria-tabeller. De resulterende tabeller er skrivebeskyttede og normalt omkring 40 % til 70 % mindre. Filnavnet, der bruges af dette værktøj, er .MAI-indeksfilen.

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

Aria_pack komprimerer hver kolonne separat, og når de resulterende data læses, skal kun de enkelte rækker og kolonner, der kræves, dekomprimeres, hvilket giver mulighed for hurtigere læsning.

$ 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

Når en tabel er blevet pakket, skal du bruge kommandoen aria_chk -rq til at genopbygge dens indekser.

$ 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 er et værktøj til at vise og anvende logposter fra en Aria-transaktionslog.

$ aria_read_log OPTIONS

Du skal bruge en af ​​"-d" eller "-a" muligheder:

  • a:Anvend log til tabeller:ændrer tabeller. Du bør lave en sikkerhedskopi først. Viser en masse information, hvis du ikke bruger parameteren --silent.
  • d:Vis kort info læst fra postens overskrift.
$ 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

...

Konklusion

Som du kan se, har Aria Storage Engine mange forbedringer i forhold til MyISAM, og det er et fantastisk storage-motoralternativ, der kan bruges. Det er også nemt at bruge, da det er en del af MariaDB Server-installationen, så bare ved at angive ENGINE-tabelparameteren er det nok til at aktivere det.

MariaDB arbejder stadig på denne lagermaskine, så sandsynligvis vil vi snart se nye forbedringer i fremtidige versioner.


  1. Enhver præstationspåvirkning i Oracle for at bruge LIKE 'streng' vs ='streng'?

  2. Hvad er forskellen mellem MS Access og SQL?

  3. Returner en liste over fremmede nøgler i SQLite

  4. TNSPING OK, men sqlplus giver ORA-12154?