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

Wybór silnika pamięci masowej:Aria

Platforma MariaDB obejmuje różne silniki pamięci masowej jako wtykowe komponenty MariaDB Enterprise Server. Pozwala to wybrać silnik pamięci masowej, który najlepiej odpowiada obciążeniu konkretnej bazy danych lub tabeli.

Silnik pamięci masowej Aria został opracowany jako bezpieczny w przypadku awarii zamiennik MyISAM i jest aktywnie rozwijany od 2007 roku. Po ponownym uruchomieniu serwera MariaDB po awarii, Aria odzyskuje wszystkie tabele do stanu z początku instrukcji lub z początku ostatniej instrukcji LOCK TABLES.

Silniki pamięci masowej MariaDB

Aktualne zalecenia dotyczące silnika pamięci masowej na podstawie obciążenia:

  • Obciążenia z dużą ilością odczytu:Aria
  • Ogólne przeznaczenie:InnoDB
  • KWAS:InnoDB
  • Obciążenia wymagające dużej ilości zapisu:MyRocks
  • Kompresja:MyRocks
  • Sharded:Pająk
  • Obciążenia analityczne:MariaDB ColumnStore

Dlaczego warto używać Arii do MariaDB

Podczas gdy InnoDB jest domyślnym silnikiem przechowywania baz danych utworzonych za pomocą MariaDB, Aria jest używana dla większości wewnętrznych tabel systemowych z MariaDB Enterprise Server 10.4. Aria zajmuje niewiele miejsca i pozwala na łatwe kopiowanie między systemami i jest szczególnie odpowiednia do obciążeń o dużym natężeniu odczytu. Aria ma zaawansowany format przechowywania oparty na stronach, który zapewnia doskonałą wydajność pamięci podręcznej i jest zoptymalizowany pod kątem współbieżności.

W rzeczywistych środowiskach Aria daje lepsze wyniki dla zagregowanych konstrukcji (takich jak GROUP BY lub ORDER BY), które są powszechne w analizie i przetwarzaniu transakcji. Analityka i przetwarzanie transakcyjne znajdują proste rzeczy, takie jak sumy, maksima i statystyki. Większość aplikacji w dużym stopniu opiera się na zapytaniach korzystających z tych funkcji agregujących.
MariaDB używa mechanizmu przechowywania danych Aria dla wszystkich wewnętrznych tabel tymczasowych na dysku. Ponieważ te tabele są często tworzone wewnętrznie w celu wykonywania zapytań GROUP BY i DISTINCT, tego typu zapytania mogą korzystać z wydajności Aria, nawet jeśli przywoływana tabela korzysta z innego silnika.

Silnik pamięci masowej Aria jest domyślnie kompilowany w MariaDB. Aria jest dołączona do MariaDB Server (Enterprise i Community) bez dodatkowej instalacji lub konfiguracji.

Rozważania dotyczące Arii

To, jak najlepiej używać Arii, będzie zależeć od przypadku użycia, projektu tabeli, wzorców dostępu (zapytań SQL), celów wydajności i celów odzyskiwania.

Zalety Arii Wady Arii
  • Jednoczesne wstawianie do tej samej tabeli z wielu źródeł
  • Nieefektywne ładowanie zbiorcze
  • Pamięć podręczna według zdolności strony
  • Blokowanie na poziomie stołu
  • Wydajne tworzenie kopii zapasowych przez MariaDB Enterprise Backup

  • Brak natywnej obsługi kluczy obcych
  • Rozszerzony format wiersza PAGE:domyślnie bezpieczny w przypadku awarii; operacje; zapewnia znaczną poprawę szybkości buforowania danych, szczególnie w systemie Windows
  • Brakuje obsługi INSERT DELAYED.
  • Odporne na awarie tabele i indeksy
  • Ograniczenia pamięci podręcznej:wiele pamięci podręcznych kluczy i zależy od pamięci podręcznej dysku systemu operacyjnego
  • Przywracanie awarii do początku ostatniej instrukcji lub blokady
  • Narzut formatu PAGE:minimalny rozmiar pliku 16K; przechowywanie małych rzędów; ten sam rozmiar strony dla indeksu i danych.
  • Zoptymalizowany INDEKS OBCIĄŻENIA
  • Nie obsługuje transakcji (tj. ROLLBACK i COMMIT)
  • Zgodny z formatami MyISAM ROW i PAGE
  • Niskie koszty ogólne
  • Rozważ użycie Arii:

    • Jeśli Twoja aplikacja wykonuje wiele wyszukiwań PEŁNOTEKSTOWYCH.
    • Jeśli Twoja aplikacja wykonuje wiele zapytań GROUP BY.
    • Jeśli Twoja aplikacja nie wymaga zgodności z ACID ani kluczy obcych.
    • Jeśli Twoja aplikacja używa obecnie MyISAM i wymaga bardziej zaawansowanego silnika, aby umożliwić lepszą prędkość, tworzenie kopii zapasowych i automatyczne odzyskiwanie po awarii.

    Porównania wydajności

    Co innego porównywać pojedyncze zapytania, a co innego patrzeć na rzeczywiste przykłady. Przeprowadziliśmy kilka testów porównujących Aria, InnoDB i MyISAM.

    Wyniki wydajności
    InnoDB Aria MyISAM
    SQL 1 2.389 0,580 0,634
    SQL 2 2,169 0,530 0,598
    Prosty test porównawczy:Aria vs MyISAM vs InnoDB

    W tym prostym teście porównawczym utworzono tabelę i wypełniono ją 2 milionami wierszy. Zapytania GROUP BY i ORDER BY zostały wykonane i skopiowane do wszystkich trzech alternatywnych silników pamięci masowej:InnoDB, Aria i MyISAM. Każdy test był przeprowadzany 10 razy, a średni czas (w sekundach) był rejestrowany dla wszystkich testów.

    Konfiguracja i polecenia używane do testowania:

    INSERT INTO fact VALUES (1,1,'Justin',md5(''), .1);
    INSERT INTO fact SELECT FLOOR(1+ rand()*9999), FLOOR(1 + rand()*499),
    (select name from names where id = 1 + rand() * 4),
    MD5(1+rand()*9999), rand()
    FROM fact;

    Uruchom powyższą wstawkę, aż w tabeli znajdzie się około 2 milionów wierszy.

    MariaDB [test2]> SELECT count(*) from fact;
    +----------+
    | count(*) |
    +----------+
    | 2097152 |
    +----------+
    MariaDB [test2]> SHOW CREATE TABLE fact;
    +-------+-------------------------------
    | Table | Create Table
    +-------+-------------------------------
    | fact | CREATE TABLE `fact` (
    `dim1` int(11) DEFAULT NULL, `dim2` int(11) DEFAULT NULL,
     `name` varchar(20) DEFAULT NULL, `hash` varchar(32) DEFAULT NULL,
     `measure1` double DEFAULT NULL)
    ENGINE=InnoDB DEFAULT CHARSET=utf8 |

    Potwierdź, że występuje dobry stosunek odrębnych wierszy do wszystkich wierszy:

    MariaDB [test2]> SELECT count(distinct (dim1)) from fact;
    +------------------------+
    | count(distinct (dim1)) |
    +------------------------+
    | 9999              	 |
    +------------------------+
    MariaDB [test2]> SELECT count(distinct (dim2)) from fact;
    +------------------------+
    | count(distinct (dim2)) |
    +------------------------+
    | 499                    |
    +------------------------+
    MariaDB [test2]> SELECT count(distinct (name)) from fact;
    +------------------------+
    | count(distinct (name)) |
    +------------------------+
    | 1                      |
    +------------------------+
    

    Aria

    CREATE TABLE `test2`.`fact2` (
     `dim1` INT(11) NULL DEFAULT NULL,
     `dim2` INT(11) NULL DEFAULT NULL,
     `name` VARCHAR(20) NULL DEFAULT NULL,
     `hash` VARCHAR(32) NULL DEFAULT NULL,
     `measure1` DOUBLE NULL DEFAULT NULL )
    ENGINE=ARIA TRANSACTIONAL=1;
    INSERT INTO `test2`.`fact2` (`dim1`, `dim2`, `name`, `hash`, `measure1`) 
    SELECT `dim1`, `dim2`, `name`, `hash`, `measure1` FROM `fact`;
    

    MyISAM

    CREATE TABLE `test2`.`fact3` (
     `dim1` INT(11) NULL DEFAULT NULL,
     `dim2` INT(11) NULL DEFAULT NULL,
     `name` VARCHAR(20) NULL DEFAULT NULL,
     `hash` VARCHAR(32) NULL DEFAULT NULL,
     `measure1` DOUBLE NULL DEFAULT NULL )
    COLLATE='latin1_swedish_ci' ENGINE=MyISAM;
    INSERT INTO `test2`.`fact3` (`dim1`, `dim2`, `name`, `hash`, `measure1`) 
    SELECT `dim1`, `dim2`, `name`, `hash`, `measure1` FROM `fact`;
    

    Przetestuj 2 różne sqls w InnoDB, Aria i MyISAM:

    — sql 1:

    SELECT dim1, dim2 from fact group by dim1 order by dim1; 
    -- 9999 rows in set

    — sql 2:

    SELECT dim1, dim2 from fact group by dim2 order by dim2; 
    -- 499 rows in set

    Podsumowanie testu porównawczego

    Testy pokazują, że Aria jest znacznie szybsza na poziomie GROUP BY niż InnoDB lub MyISAM. Aria jest nieco szybsza niż MyISAM i zapewnia środowisko bezpieczne w przypadku awarii. Testy wydajności wykazały, że Aria jest czterokrotnie szybsza od InnoDB. Ze względu na różnice w zastosowaniach, każdy z nich powinien przejść testy na serwerze MariaDB Enterprise Server przy użyciu zarówno Aria, jak i InnoDB (lub innego, w zależności od potrzeb).

    Podsumowanie

    W zależności od obciążenia pracą Aria może zapewnić większą wydajność. Ponieważ jest dołączony do MariaDB Server i może być stosowany dla bazy danych lub dla tabeli (SILNIK=ARIA), możesz testować wydajność dla konkretnego obciążenia bez dodatkowych kosztów i przy niewielkim dodatkowym nakładzie pracy — po prostu podłącz go i wypróbuj.

    Aby uzyskać więcej informacji o silnikach pamięci masowej i architekturze pamięci masowej, odwiedź silniki pamięci masowej zoptymalizowane pod kątem obciążenia.


    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 skonfigurować replikację asynchroniczną między klastrami MySQL Galera

    2. Jak działa MICROSECOND() w MariaDB

    3. Jak działa funkcja QUOTE() w MariaDB

    4. Wprowadzenie do administracji MaxScale Korzystanie z maxctrl dla klastra MariaDB

    5. Jak przekonwertować na wielkie litery w MariaDB