MariaDB
 sql >> Baza danych >  >> RDS >> MariaDB

Używanie silnika pamięci masowej Aria z serwerem MariaDB

MariaDB Server to jeden z najpopularniejszych serwerów baz danych typu open source. Został stworzony przez oryginalnych programistów MySQL i stał się popularny ze względu na szybkość, skalowalność i niezawodność. MariaDB ma bogaty ekosystem silników pamięci masowej, wtyczek i innych dostępnych narzędzi, dzięki czemu jest bardzo wszechstronna w wielu różnych przypadkach użycia.

Jeśli chodzi o silnik pamięci masowej MariaDB, masz do wyboru różne typy, takie jak XtraDB, InnoDB, MyRocks, MyISAM, a nawet Aria. Nie istnieje najlepszy typ aparatu magazynu, ponieważ zależy to od samego obciążenia. Ostatni wspomniany, Aria Storage Engine, jest domyślnie kompilowany z MariaDB 5.1 i musi być „używany” podczas uruchamiania usługi MariaDB.

W tym blogu zobaczymy, czym jest Aria Storage Engine i jak z niego korzystać na serwerze MariaDB.

Co to jest Aria Storage?

Aria to silnik pamięci masowej dla MySQL i MariaDB. Został pierwotnie opracowany w celu stania się domyślnym transakcyjnym i nietransakcyjnym silnikiem pamięci masowej dla MariaDB i MySQL.

Obecnie obsługuje szyfrowanie i wykrywanie zakleszczeń, a także oferuje bezpieczną awarię alternatywę dla MyISAM. Po ponownym uruchomieniu MariaDB po awarii, Aria odzyskuje wszystkie tabele do stanu z początku instrukcji lub z początku ostatniej instrukcji LOCK TABLES.

Aria obsługuje zewnętrzne i wewnętrzne sprawdzanie, naprawę i kompresję wierszy, różne formaty wierszy, różne formaty kompresji indeksu, aria_chk i inne.

Ten aparat pamięci jest używany dla tabel systemowych MariaDB od wersji 10.4.

Różnice między Arią a MyISAM

Zobaczmy kilka podstawowych różnic między Aria a jego bezpośrednim konkurentem:MyISAM, a następnie zalety i wady silnika pamięci masowej Aria.

  • Aria używa dużych plików dziennika (domyślnie 1 GB).
  • Aria posiada plik kontroli dziennika (aria_log_control) i pliki dziennika (aria_log.%). Pliki dziennika mogą być automatycznie usuwane, gdy nie są potrzebne, lub usuwane na żądanie.
  • Aria używa domyślnie 8K stron, podczas gdy MyISAM używa 1K. To sprawia, że ​​Aria jest nieco szybsza, gdy używa się klawiszy o stałym rozmiarze, ale wolniejsza, gdy używa się spakowanych kluczy o zmiennej długości.

Zalety silnika pamięci masowej Aria

  • Dane i indeksy są bezpieczne w przypadku awarii.
  • W przypadku awarii zmiany zostaną cofnięte do stanu początku instrukcji lub ostatniej instrukcji LOCK TABLES.
  • Aria może odtworzyć prawie wszystko z dziennika. Rzeczy, których nie można jeszcze odtworzyć to:
    • Wstaw INSERT do pustej tabeli.
    • ALTER TABLE.
  • LOAD INDEX może pomijać bloki indeksów dla niechcianych indeksów.
  • Obsługuje wszystkie formaty MyISAM ROW i nowy format PAGE, w którym dane są przechowywane na stronach.
  • Wiele jednoczesnych wstawiaczy do tej samej tabeli.
  • W przypadku korzystania z formatu PAGE dane wierszy są buforowane przez pamięć podręczną strony.
  • Aria ma testy jednostkowe większości części.
  • Obsługuje zarówno tabele bezpieczne w przypadku awarii, jak i tabele transakcyjne.
  • PAGE to jedyny bezpieczny w przypadku awarii/transakcyjny format wiersza.
  • Format PAGE powinien zapewnić znaczną poprawę szybkości w systemach, które mają złe buforowanie danych.
  • W MariaDB 10.5 maksymalna długość klucza to 2000 bajtów, w porównaniu do 1000 bajtów w MyISAM.

Wady silnika pamięci masowej Aria

  • Aria nie obsługuje INSERT DELAYED.
  • Aria nie obsługuje wielu pamięci podręcznych kluczy.
  • Przechowywanie bardzo małych wierszy (<25 bajtów) nie jest wydajne dla formatu PAGE.
  • Tabele MERGE nie obsługują Arii.
  • Strony danych Aria w formacie blokowym mają narzut 10 bajtów/stronę i 5 bajtów/wiersz. Obsługa transakcji i wielu współbieżnych zapisów będzie wykorzystywać dodatkowe 7 bajtów dla nowych wierszy, 14 bajtów dla usuniętych wierszy i 0 bajtów dla starych skompaktowanych wierszy.
  • Brak zewnętrznego blokowania.
  • Aria ma jeden rozmiar strony zarówno dla indeksu, jak i danych. MyISAM obsługuje różne rozmiary stron w indeksie.
  • Mały narzut na stronę indeksu (15 bajtów).
  • Minimalny rozmiar pliku danych dla formatu PAGE to 16K.
  • Aria nie obsługuje indeksów na polach wirtualnych.

Formaty pamięci masowej Aria

Obsługuje trzy różne formaty przechowywania tabel.

Stała długość

Te tabele zawierają rekordy o stałej długości. Każda kolumna ma taką samą długość dla wszystkich rekordów, niezależnie od rzeczywistej zawartości. Jest to format domyślny, jeśli tabela nie zawiera pól typu BLOB, TEXT, VARCHAR lub VARBINARY i nie podano FORMATU WIERSZY.

Charakterystyka:

  • Szybko, ponieważ MariaDB zawsze będzie wiedzieć, gdzie zaczyna się rekord.
  • Łatwe do buforowania.
  • Zajmuj więcej miejsca niż tabele dynamiczne, ponieważ maksymalna ilość miejsca do przechowywania zostanie przydzielona do każdego rekordu.
  • Rekonstrukcja po awarii jest nieskomplikowana ze względu na ustalone pozycje.
  • Brak fragmentacji lub konieczności reorganizacji, chyba że rekordy zostały usunięte i chcesz zwolnić miejsce.

Tabele zawierające pola typu BLOB lub TEXT nie mogą być POPRAWIONE, ponieważ z założenia są to oba pola dynamiczne.

Dynamiczny

Te tabele zawierają rekordy o zmiennej długości. Jest to format domyślny, jeśli tabela zawiera jakiekolwiek pola typu BLOB, TEXT, VARCHAR lub VARBINARY, a nie podano FORMATU WIERSZY.

Charakterystyka:

  • Każdy wiersz zawiera nagłówek wskazujący długość wiersza.
  • Wiersze łatwo ulegają fragmentacji. AKTUALIZOWANIE dłuższego rekordu prawdopodobnie zapewni, że będzie on przechowywany w różnych miejscach na dysku.
  • Wszystkie kolumny ciągów o długości co najmniej cztery są dynamiczne.
  • Wymagają znacznie mniej miejsca niż tabele o stałej długości.
  • Przywracanie po awarii jest bardziej skomplikowane niż w przypadku STAŁYCH tabel.

Strona

Jest to domyślny format tabel Aria i jest jedynym formatem, którego można używać, jeśli TRANSACTIONAL jest ustawione na 1.

Charakterystyka:

  • Jest buforowany przez pamięć podręczną strony, co zapewnia lepszą losową wydajność, ponieważ wykorzystuje mniej wywołań systemowych.
  • Nie ulega fragmentacji tak łatwo, jak format DYNAMICZNY podczas AKTUALIZACJI. Maksymalna liczba fragmentów jest bardzo niska.
  • Aktualizacje są szybsze niż tabele dynamiczne.
  • Ma niewielkie obciążenie związane z przechowywaniem, szczególnie widoczne w bardzo małych rzędach.
  • Wolniej przy wykonywaniu pełnego skanowania tabeli.
  • Wolniej, jeśli istnieje wiele zduplikowanych kluczy, ponieważ Aria najpierw zapisze wiersz, potem klucze, a dopiero potem sprawdzi, czy nie ma duplikatów.

Aby poznać format przechowywania używany przez tabelę, możesz użyć instrukcji SHOW TABLE STATUS.

Opcje transakcyjne dla Aria Storage Engine

Właściwie dla Arii transakcyjny oznacza bezpieczny w przypadku awarii i nie jest obsługiwany w przypadku tabel partycjonowanych. Wymaga również formatu wiersza PAGE, aby działał.

Opcje tabeli TRANSACTIONAL i ROW_FORMAT działają w następujący sposób:

  • Jeśli ustawiono TRANSACTIONAL=1, jedynym obsługiwanym formatem wiersza jest PAGE. Jeśli ROW_FORMAT jest ustawione na inną wartość, Aria wyświetla ostrzeżenie, ale nadal wymusza format wiersza PAGE.
  • Jeśli ustawiono TRANSACTIONAL=0, tabela nie będzie bezpieczna w przypadku awarii i obsługiwany jest dowolny format wiersza.
  • Jeśli TRANSACTIONAL nie jest ustawiona na żadną wartość, obsługiwany jest dowolny format wiersza. Jeśli ustawiono ROW_FORMAT, tabela użyje tego formatu wiersza. W przeciwnym razie tabela użyje domyślnego formatu wiersza PAGE. W takim przypadku, jeśli tabela używa formatu wiersza PAGE, będzie bezpieczna w przypadku awarii. Jeśli używa innego formatu wiersza, nie będzie bezpieczny w przypadku awarii.

Jak korzystać z silnika pamięci masowej Aria na serwerze MariaDB

Najpierw musisz utworzyć bazę danych (jeśli jeszcze jej nie masz) i używać jej:

MariaDB [(none)]> create database db1;

Query OK, 1 row affected (0.003 sec)

MariaDB [(none)]> use db1

Database changed

Następnie utwórz tabelę za pomocą silnika „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)

Podaliśmy wartość TRANSAKCYJNĄ na 1, aby zobaczyć ją tutaj, ale, jak wspomnieliśmy, nie jest to konieczne, ponieważ domyślnie będzie to 1, jeśli używamy Aria bez określania wartości formatu wiersza i transakcyjnych. Teraz utworzysz tabelę:

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)

W stanie tabeli możesz sprawdzić zarówno wartości formatu transakcyjnego, jak i wiersza:

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)

Istnieje wiele parametrów do skonfigurowania związanych z Aria Storage Engine. Pełną listę można znaleźć na oficjalnej stronie dokumentacji.

Narzędzia silnika pamięci masowej Aria

Zobaczmy kilka narzędzi do pracy z tym silnikiem pamięci masowej.

aria_chk

Aria_chk służy do sprawdzania, naprawy, optymalizacji, sortowania i pobierania informacji o tablicach Aria. Z serwerem MariaDB możesz używać CHECK TABLE, REPAIR TABLE i OPTIMIZE TABLE, aby robić podobne rzeczy.

To narzędzie nie powinno być używane, gdy MariaDB jest uruchomiona, ponieważ zakłada, że ​​tabela nie zostanie zmieniona podczas jego używania.

$ aria_chk [OPTIONS] aria_tables[.MAI]

Podobnie jak MyISAM, informacje z tabeli Aria są przechowywane w 2 różnych plikach: 

  • Plik MAI zawiera informacje o tabeli podstawowej i indeks.
  • Plik MAD zawiera dane.
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 to narzędzie do kompresji tabel Aria. Wynikowe tabele są tylko do odczytu i zwykle są mniejsze o około 40% do 70%. Nazwa pliku używana przez to narzędzie to plik indeksu .MAI.

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

Aria_pack kompresuje każdą kolumnę osobno, a gdy wynikowe dane są odczytywane, tylko poszczególne wymagane wiersze i kolumny muszą być zdekompresowane, co pozwala na szybszy odczyt.

$ 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

Po spakowaniu tabeli użyj polecenia aria_chk -rq, aby odbudować jej indeksy.

$ 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 to narzędzie do wyświetlania i stosowania zapisów dziennika z dziennika transakcji Aria.

$ aria_read_log OPTIONS

Musisz użyć jednej z opcji „-d” lub „-a”:

  • a:Zastosuj dziennik do tabel:modyfikuje tabele. Najpierw powinieneś zrobić kopię zapasową. Wyświetla wiele informacji, jeśli nie używasz parametru --silent.
  • d:Wyświetlaj krótkie informacje odczytane z nagłówka rekordów.
$ 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

...

Wnioski

Jak widać, silnik pamięci masowej Aria ma wiele ulepszeń w stosunku do MyISAM i jest świetną alternatywą silnika pamięci masowej. Jest również łatwy w użyciu, ponieważ jest częścią instalacji MariaDB Server, więc wystarczy określić parametr tabeli ENGINE, aby go włączyć.

MariaDB nadal pracuje nad tym silnikiem pamięci masowej, więc prawdopodobnie wkrótce zobaczymy nowe ulepszenia w przyszłych wersjach.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak zwrócić numer dnia z sufiksem w MariaDB?

  2. Optymalizacje zapisu dla Qualcomm Centriq 2400 w wersji kandydata wersji MariaDB 10.3.5

  3. Ustawienia daty i godziny dostępne w MariaDB

  4. Nazwane polecenia MariaDB

  5. 5 funkcji do wyodrębnienia numeru tygodnia z daty w MariaDB