Wydany został system zarządzania bazą danych MariaDB 12.3.2, który został oznaczony jako pierwsza stabilna wersja gałęzi 12.3. Gałąź MariaDB 12.3 została zakwalifikowana do wydań z długoterminowym wsparciem i będzie wspierana do czerwca 2029 roku. Jednocześnie dostępna jest wersja MariaDB 13.0.1, mająca status kandydata do wydania.
Projekt MariaDB rozwija fork MySQL, zachowując zgodność wsteczną i różniąc się integracją dodatkowych silników przechowywania oraz rozszerzonymi możliwościami. Rozwój MariaDB nadzoruje niezależna organizacja MariaDB Foundation w ramach otwartego i przejrzystego procesu rozwoju, niezależnego od konkretnych producentów. MariaDB jest dostarczana zamiast MySQL w wielu dystrybucjach Linuxa (RHEL, SUSE, Fedora, openSUSE, Slackware, OpenMandriva, ROSA, Arch Linux, Debian) i wdrożona w takich dużych projektach jak Wikipedia, Google Cloud SQL i Nimbuzz.
Wśród zmian w gałęzi MariaDB 12.3 w porównaniu do poprzedniej wersji LTS MariaDB 11.8:
- Całkowicie przebudowana została implementacja dziennika binarnego (binlog), a główne komponenty jego obsługi przeniesiono do silnika InnoDB. Taka migracja pozwoliła pozbyć się przestarzałej logiki synchronizacji, przyspieszyć replikację oraz zwiększyć wydajność operacji związanych z zapisywaniem danych. W testach nowej implementacji na systemach o dużym obciążeniu odnotowano wzrost wydajności w przypadku dużej liczby operacji zapisu do 4 razy. Aby to włączyć, proponuje się ustawienie „binlog_storage_engine=innodb”.
- Zwiększono szybkość wyszukiwania wektorowego o 30-50% przy użyciu typu VECTOR, stosowanego w systemach uczenia maszynowego. Przyspieszenie osiągnięto dzięki optymalizacji obliczeń podczas wyszukiwania podobieństw między wektorami w przestrzeniach wielowymiarowych oraz wprowadzeniu nowej techniki ekstrapolacji opartej na zagnieżdżonych reprezentacjach wektorowych (matryoshka embedding).
- Dodano możliwości ułatwiające migrację z systemu baz danych Oracle. W trybie zgodności z bazą danych Oracle zaimplementowano funkcje TO_NUMBER (konwersja ciągu znaków na liczbę), TO_DATE (konwersja ciągu znaków na datę) oraz TRUNC (przycinanie daty, na przykład do godziny, dnia, miesiąca, roku), a także dodano wsparcie dla tablic asocjacyjnych (INDEX BY) oraz składni „( + )” do definiowania zewnętrznych złączeń (outer join).
- Aby zwiększyć zgodność z MySQL, dodano wtyczkę uwierzytelniania caching_sha2_password, wykorzystującą do hash'owania algorytm SHA2 zamiast SHA1 i kompatybilną z wtyczką o tej samej nazwie z MySQL 9.
- Dodano nowy typ XMLTYPE do przechowywania danych w formacie XML.
- Wprowadzono możliwość korzystania z kursorów z zapytaniami parametryzowanymi (prepared statement).
- Dodano wyrażenie „SET PATH” do określenia kolejności wyszukiwania komponentów schematu przechowywania podczas odwoływania się do nich bez podawania nazwy schematu.
- Wprowadzono wsparcie dla operacji „IS JSON” w celu sprawdzenia typu wyrażenia JSON, określonego w standardzie SQL:2023.
- W wyrażeniu „PARTITION BY KEY” zaimplementowano wsparcie dla algorytmów haszowania MYSQL51, MYSQL55, BASE31, CRC32C, XXH32 i XXH3.
- W silniku przechowywania Aria zaimplementowano segmentowaną pamięć podręczną kluczy, w której klucze dzielone są na grupy przechowywane w osobnych segmentach pamięci. Nowa pamięć podręczna pozwoliła zwiększyć wydajność równoległego wykonywania zapytań przez różnych użytkowników. Liczba segmentów jest określana przez zmienną aria_pagecache_segments, która może przyjmować wartości od 1 (domyślnie) do 128.
- Dodano możliwość używania indeksów opartych na funkcjach (functional index) w celu zwiększenia wydajności operacji GROUP/ORDER BY.
- Wprowadzono wsparcie dla wyrażenia „CREATE GLOBAL TEMPORARY TABLE” do tworzenia globalnych tabel tymczasowych. Tego typu tabele tymczasowe są usuwane po zakończeniu sesji i są widoczne dla wszystkich użytkowników, ale zawierają dane indywidualne dla każdego użytkownika.
- Dodano wsparcie dla SSL-kluczy, zabezpieczonych hasłem. Hasło do odblokowania certyfikatów SSL można ustawić za pomocą zmiennej ssl_passphrase lub ręcznie podczas uruchamiania. serwera.
- Dodano wyrażenie «SET SESSION AUTHORIZATION» do wykonania operacji w imieniu innego użytkownika przy przyznaniu odpowiednich uprawnień (wyrażenie to można uznać za odpowiednik «sudo» dla baz danych).
- Wtyczka file_key_management.so zyskała wsparcie dla hashy SHA-2.
- Dodano wsparcie dla słabych zmiennych kursorowych (weak cursor variable) typu SYS_REFCURSOR, umożliwiających zwracanie kursora z procedur składowanych (w parametrze OUT) lub z funkcji (w wyrażeniu RETURN). W celu ograniczenia maksymalnej liczby równocześnie otwartych kursorów dodano zmienną systemową «max_open_cursors».
- Do typu TO_CHAR dodano wsparcie dla formatu FM (Fill Mode), aby wykluczyć dodatkowe wypełnienie. Na przykład zapytanie
„SELECT CONCAT(‘/’, TO_CHAR(‘2020-01-06 10:11:12’, ‘FMDAY’), ‘/’);” zwróci „/Monday/” zamiast „/Monday /”. - Do narzędzia mariadb-check i wyrażenia CHECK TABLE dodano wsparcie dla tabel z silnika SEQUENCE.
- W optymalizatorze dodano wsparcie dla opcji (hint), wpływających na tworzenie planu optymalizacji: QB_NAME, NO_RANGE_OPTIMIZATION, NO_ICP, MRR, NO_MRR, BKA, NO_BKA, BNL, NO_BNL, SEMIJOIN, SUBQUERY, JOIN_FIXED_ORDER, JOIN_ORDER, JOIN_PREFIX, JOIN_SUFFIX, MAX_EXECUTION_TIME, [NO_]JOIN_INDEX, [NO_]GROUP_INDEX, [NO_]ORDER_INDEX, [NO_]INDEX, [NO_]SPLIT_MATERIALIZED, NO_ROWID_FILTER, INDEX_MERGE/NO_INDEX_MERGE, [NO_]DERIVED_CONDITION_PUSHDOWN i [NO_]MERGE. Opcje wstawiane są w zapytaniu w formacie zgodnym z MySQL, na przykład:
SELECT /*+ BKA(t1) NO_BKA(t2) */ * FROM t1 INNER JOIN t2 WHERE …;
SELECT /*+ MAX_EXECUTION_TIME(1000) */ * FROM t1 INNER JOIN t2 WHERE …; - Zwiększono wydajność nieuporządkowanych wyrażeń „LEFT JOIN” i uporządkowanego skanowania przy użyciu wyrażenia „PARTITION BY RANGE”.
- W wynikach śledzenia optymalizatora zapewniono pokaz definicji
tabel i widoków. - Przy wykonywaniu operacji łączenia tabel (JOIN) wprowadzono optymalizację, która uwzględnia unikalność wierszy w podzapytaniach z wyrażeniem „GROUP BY” dla dokładniejszego prognozowania liczby wynikowych wierszy (out_rows) i poprawnego stosowania indeksów.
- Poprawiono skalowalność blokad MDL (Metadata Lock).
- Dodano wsparcie dla nowych funkcji GIS (Geographic Information System):
ST_Validate, MBRCoveredBy, ST_Simplif, ST_GeoHash, ST_LatFromGeoHash, ST_LongFromGeoHash, ST_PointFromGeoHash, ST_IsValid, ST_Collect. - Dodano wsparcie dla triggerów, które uruchamiają się przy wielu zdarzeniach. W wyrażeniu CREATE TRIGGER można teraz wymieniać zdarzenia, których dotyczy, używając składni «{ event [ OR … ] }».
- Do wtyczki do prowadzenia logu audytu dodano wsparcie dla buforowania operacji zapisu do logu. Rozmiar bufora jest określany przez zmienną server_audit_file_buffer_size.
Zrealizowano zapis informacji o portach sieciowych dla nadchodzących połączeń w dzienniku audytu (wcześniej wyświetlany był tylko host). - Do narzędzia mariadb dodano opcję „—script-dir” do określenia alternatywnego katalogu wyszukiwania skryptów uruchamianych poleceniem SOURCE.
- Zezwolono na wykorzystanie replikacji w trybie równoległym podczas asynchronicznej replikacji danych między dwoma klastrami Galera.
- Do narzędzia mariadb-dump dodano możliwość wskazania masek (na przykład „database_*”), korzystając z opcji „-L” (—wildcards).
- Usunięto wymóg unikalności identyfikatorów kluczy obcych (foreign key) w kontekście całej bazy danych (wystarczająca jest unikalność na poziomie tabeli).
- Usunięto ograniczenia dotyczące głębokości zagnieżdżania struktur w funkcjach do pracy z JSON (usunięto limit JSON_DEPTH_LIMIT, który wcześniej wynosił 32).
- Dodano tabelę TRIGGERED_UPDATE_COLUMNS w schemacie INFORMATION_SCHEMA (INFORMATION_SCHEMA.TRIGGERED_UPDATE_COLUMNS), pokazującą kolumny modyfikowane podczas wyzwolenia triggera.
- W tabeli PARAMETERS w schemacie INFORMATION_SCHEMA zaimplementowano kolumnę PARAMETER_DEFAULT, zawierającą domyślne wartości parametrów procedur składowanych.
- Usunięto zmienne big_tables, large_page_size i storage_engine, które wcześniej były ogłoszone jako przestarzałe.
Źródło: opennet.ru
