MariaDB
 sql >> база данни >  >> RDS >> MariaDB

Използване на Aria Storage Engine с MariaDB сървър

MariaDB Server е един от най-популярните сървъри за бази данни с отворен код. Създаден е от оригиналните разработчици на MySQL и стана популярен с това, че е бърз, мащабируем и здрав. MariaDB има богата екосистема от машини за съхранение, плъгини и други налични инструменти, които я правят много гъвкава за голямо разнообразие от случаи на употреба.

Що се отнася до механизма за съхранение на MariaDB, имате различни типове, от които да избирате, като XtraDB, InnoDB, MyRocks, MyISAM или дори Aria. Няма най-добър тип двигател за съхранение, защото зависи от самото натоварване. Последният споменат, Aria Storage Engine, се компилира по подразбиране от MariaDB 5.1 и се изисква да се „използва“, когато се стартира услугата MariaDB.

В този блог ще видим какво представлява Aria Storage Engine и как да го използваме в сървър на MariaDB.

Какво е Aria Storage?

Aria е машина за съхранение на MySQL и MariaDB. Първоначално е разработен с цел да се превърне в машина за съхранение по подразбиране за транзакции и без транзакции за MariaDB и MySQL.

Понастоящем поддържа криптиране и откриване на безизходица, а също така предлага безопасна при срив алтернатива на MyISAM. Когато MariaDB се рестартира след срив, Aria възстановява всички таблици до състоянието от началото на оператор или в началото на последния оператор LOCK TABLES.

Aria поддържа външна и вътрешна проверка, поправка и компресия на редове, различни формати на редове, различни формати за компресиране на индекси, aria_chk и др.

Този механизъм за съхранение се използва за системните таблици MariaDB от версията 10.4.

Разлики между Aria и MyISAM

Нека видим някои основни разлики между Aria и неговия пряк конкурент:MyISAM, а след това предимствата и недостатъците на Aria Storage Engine.

  • Aria използва големи регистрационни файлове (1G по подразбиране).
  • Aria има контролен файл на регистрационни файлове (aria_log_control) и регистрационни файлове (aria_log.%). Регистрационните файлове могат да бъдат автоматично изчистени, когато не са необходими, или при поискване.
  • Aria използва 8K страници по подразбиране, докато MyISAM използва 1K. Това прави Aria малко по-бърза при използване на клавиши с фиксиран размер, но по-бавна при използване на пакетирани клавиши с променлива дължина.

Предимства на Aria Storage Engine

  • Данните и индексите са безопасни при сривове.
  • При срив промените ще бъдат върнати обратно до състоянието на началото на оператор или последен оператор LOCK TABLES.
  • Aria може да възпроизвежда почти всичко от дневника. Нещата, които все още не могат да бъдат възпроизведени, са:
    • Пакетно INSERT в празна таблица.
    • ПРОМЕНЯТ ТАБЛИЦИ.
  • LOAD INDEX може да пропусне индексни блокове за нежелани индекси.
  • Поддържа всички формати на MyISAM ROW и нов формат PAGE, където данните се съхраняват в страници.
  • Няколко едновременни вмъквания в една и съща таблица.
  • Когато се използва формат PAGE, данните от редовете се кешират от кеша на страницата.
  • Aria има единични тестове на повечето части.
  • Поддържа както безопасни при сривове, така и таблици за транзакции.
  • PAGE е единственият безопасен при срив/транзакционен формат на редове.
  • Форматът PAGE трябва да даде значително подобрение на скоростта на системи, които имат лошо кеширане на данни.
  • От MariaDB 10.5 максималната дължина на ключа е 2000 байта, в сравнение с 1000 байта в MyISAM.

Недостатъци на Aria Storage Engine

  • Aria не поддържа INSERT DELAYED.
  • Aria не поддържа множество ключови кешове.
  • Съхранението на много малки редове (<25 байта) не е ефективно за формат PAGE.
  • Таблиците MERGE не поддържат Aria.
  • Страниците с данни на Aria в блоков формат имат режийни разходи от 10 байта/страница и 5 байта/ред. Транзакциите и поддръжката на множество едновременно записващи ще използват допълнителни разходи от 7 байта за нови редове, 14 байта за изтрити редове и 0 байта за стари уплътнени редове.
  • Без външно заключване.
  • Aria има един размер на страница както за индекс, така и за данни. MyISAM поддържа различни размери на страници за индекс.
  • Малки допълнителни разходи на индексна страница (15 байта).
  • Минималният размер на файла с данни за формат PAGE е 16K.
  • Aria не поддържа индекси във виртуални полета.

Форматите за съхранение на Aria

Поддържа три различни формата за съхранение на таблици.

Фиксирана дължина

Тези таблици съдържат записи с фиксирана дължина. Всяка колона е с еднаква дължина за всички записи, независимо от действителното съдържание. Това е форматът по подразбиране, ако таблицата няма полета BLOB, TEXT, VARCHAR или VARBINARY и не е предоставен ФОРМАТ НА РЕД.

Характеристики:

  • Бързо, тъй като MariaDB винаги ще знае къде започва записът.
  • Лесен за кеширане.
  • Заемат повече място от динамичните таблици, тъй като максималният обем място за съхранение ще бъде разпределен за всеки запис.
  • Реконструкцията след срив не е усложнена поради фиксираните позиции.
  • Без фрагментиране или нужда от повторно организиране, освен ако записите не са изтрити и не искате да освободите пространството.

Таблици, съдържащи BLOB или TEXT полета, не могат да бъдат ФИКСИРАНИ, тъй като по проект и двете са динамични полета.

Динамичен

Тези таблици съдържат записи с променлива дължина. Това е форматът по подразбиране, ако таблицата има полета BLOB, TEXT, VARCHAR или VARBINARY и не е предоставен ФОРМАТ НА РЕД.

Характеристики:

  • Всеки ред съдържа заглавка, указваща дължината на реда.
  • Редовете са склонни да се фрагментират лесно. АКТУАЛИЗИРАНЕТО на запис, за да бъде по-дълъг, вероятно ще гарантира, че той се съхранява на различни места на диска.
  • Всички колони с низове с дължина от четири или повече са динамични.
  • Те изискват много по-малко място от таблиците с фиксирана дължина.
  • Възстановяването след срив е по-сложно, отколкото с ФИКСИРАНИ таблици.

Страница

Това е форматът по подразбиране за таблици Aria и е единственият формат, който може да се използва, ако TRANSACTIONAL е зададено на 1.

Характеристики:

  • Кешира се от кеша на страницата, което дава по-добра произволна производителност, тъй като използва по-малко системни извиквания.
  • Не се фрагментира толкова лесно, колкото DYNAMIC форматът по време на АКТУАЛИЗАЦИИ. Максималният брой фрагменти е много малък.
  • Актуализира се по-бързо от динамичните таблици.
  • Има леки разходи за съхранение, което се забелязва главно при много малки редове.
  • По-бавно за извършване на пълно сканиране на таблицата.
  • По-бавно, ако има множество дублиращи се клавиши, тъй като Aria първо ще напише ред, след това клавиши и едва след това ще провери за дубликати.

За да знаете формата за съхранение, използван от таблица, можете да използвате израза SHOW TABLE STATUS.

Опции за транзакции за Aria Storage Engine

Всъщност, за Aria, транзакционното означава безопасност при срив и не се поддържа за разделени таблици. Той също така изисква формат на реда PAGE, за да работи.

Опциите на таблицата TRANSACTIONAL и ROW_FORMAT взаимодействат по следния начин:

  • Ако TRANSACTIONAL=1 е зададено, тогава единственият поддържан формат на ред е PAGE. Ако ROW_FORMAT е зададена на някаква друга стойност, тогава Aria издава предупреждение, но все пак принуждава формата на реда да бъде PAGE.
  • Ако е зададено TRANSACTIONAL=0, тогава таблицата няма да бъде защитена от срив и се поддържа всеки формат на ред.
  • Ако TRANSACTIONAL не е зададена на никаква стойност, тогава се поддържа всеки формат на ред. Ако е зададен ROW_FORMAT, тогава таблицата ще използва този формат на ред. В противен случай таблицата ще използва формата на реда PAGE по подразбиране. В този случай, ако таблицата използва формата на реда PAGE, тогава тя ще бъде безопасна при срив. Ако използва друг формат на ред, няма да е безопасен при срив.

Как да използвате Aria Storage Engine на MariaDB сървър

Първо, трябва да създадете база данни (ако нямате създадена такава) и да я използвате:

MariaDB [(none)]> create database db1;

Query OK, 1 row affected (0.003 sec)

MariaDB [(none)]> use db1

Database changed

След това създайте таблица с помощта на двигателя „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)

Зададохме стойността TRANSACTIONAL в 1, за да я видим тук, но, както споменахме, не е необходимо, тъй като ще бъде 1 по подразбиране, ако използваме Aria, без да указваме формат на ред и стойности на транзакции. Сега ще създадете таблицата:

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)

И в състоянието на таблицата можете да проверите както стойностите на транзакциите, така и стойностите на формата на ред:

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)

Има много параметри за конфигуриране, свързани с Aria Storage Engine. Можете да намерите пълен списък в официалния сайт за документация.

Aria Storage Engine Tools

Нека видим някои инструменти за работа с тази машина за съхранение.

aria_chk

Aria_chk се използва за проверка, поправка, оптимизиране, сортиране и получаване на информация за таблиците на Aria. Със сървъра на MariaDB можете да използвате CHECK TABLE, REPAIR TABLE и OPTIMIZE TABLE, за да правите подобни неща.

Този инструмент не трябва да се използва, когато MariaDB работи, тъй като предполага, че таблицата няма да бъде променена по време на неговото използване.

$ aria_chk [OPTIONS] aria_tables[.MAI]

Подобно на MyISAM, информацията за таблицата Aria се съхранява в 2 различни файла: 

  • MAI файлът съдържа информация за основната таблица и индекса.
  • MAD файлът съдържа данните.
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 е инструмент за компресиране на Aria таблици. Получените таблици са само за четене и обикновено са с около 40% до 70% по-малки. Името на файла, използвано от този инструмент, е индексният файл .MAI.

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

Aria_pack компресира всяка колона поотделно и когато получените данни се прочетат, само отделните необходими редове и колони трябва да бъдат декомпресирани, което позволява по-бързо четене.

$ 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

След като таблицата е пакетирана, използвайте командата aria_chk -rq, за да възстановите нейните индекси.

$ 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 е инструмент за показване и прилагане на регистрационни записи от дневник на транзакциите на Aria.

$ aria_read_log OPTIONS

Трябва да използвате една от опциите “-d” или “-a”:

  • a:Прилагане на регистър към таблици:променя таблиците. Първо трябва да направите резервно копие. Показва много информация, ако не използвате параметъра --silent.
  • d:Показване на кратка информация, прочетена от заглавката на записите.
$ 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

...

Заключение

Както можете да видите, Aria Storage Engine има много подобрения срещу MyISAM и е чудесна алтернатива на двигателя за съхранение, която да се използва. Освен това е лесен за използване, тъй като е част от инсталацията на MariaDB Server, така че само като посочите параметъра на таблицата ENGINE е достатъчно, за да го активирате.

MariaDB все още работи върху този механизъм за съхранение, така че вероятно скоро ще видим нови подобрения в бъдещите версии.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как работи SOUNDEX() в MariaDB

  2. Съвети за наблюдение на MariaDB клъстер

  3. Как да направите вашата MySQL или MariaDB база данни високодостъпна в AWS и Google Cloud

  4. Как да върнете имената на месеца и дните на различен език в MariaDB

  5. Как TO_CHAR() работи в MariaDB