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 все още работи върху този механизъм за съхранение, така че вероятно скоро ще видим нови подобрения в бъдещите версии.