A fost lansată versiunea SGBD-ului MariaDB 12.3.2, marcată ca prima versiune stabilă a ramurii 12.3. Ramura MariaDB 12.3 este considerată o versiune cu suport pe termen lung și va fi întreținută până în iunie 2029. De asemenea, este disponibilă versiunea MariaDB 13.0.1, care are statut de candidat pentru lansare.
Proiectul MariaDB dezvoltă o ramură derivată din MySQL, care păstrează compatibilitatea înapoi și se distinge prin integrarea de motoare de stocare suplimentare și funcționalități avansate. Dezvoltarea MariaDB este supervizată de organizația independentă MariaDB Foundation conform unui proces de dezvoltare deschis și transparent, care nu depinde de anumiți furnizori. MariaDB este livrată în locul MySQL în multe distribuții Linux (RHEL, SUSE, Fedora, openSUSE, Slackware, OpenMandriva, ROSA, Arch Linux, Debian) și este implementată în proiecte mari precum Wikipedia, Google Cloud SQL și Nimbuzz.
Printre modificările aduse în ramura MariaDB 12.3 în comparație cu ultima versiune LTS, MariaDB 11.8:
- Implementarea jurnalului binar (binlog) a fost complet refăcută, principalele componente pentru gestionarea acestuia fiind transferate în motorul InnoDB. Această transferare a permis eliminarea logicii învechite de sincronizare, accelerarea replicării și creșterea performanței în execuția operațiunilor legate de scrierea datelor. În testele recente pe sisteme cu încărcare mare, a fost observat un spor de performanță de până la 4 ori la un număr ridicat de operațiuni de scriere. O opțiune de configurare „binlog_storage_engine=innodb” este disponibilă pentru activare.
- Viteza de căutare vectorială a fost crescută cu 30-50% utilizând tipul VECTOR, folosit în sistemele de învățare automată. Accelerația se datorează optimizării calculului în timpul căutării similitudinii între vectori în spații multidimensionale și implementării unei noi tehnici de extrapolare bazate pe reprezentări vectoriale imbricate (matryoshka embedding).
- Au fost adăugate facilități pentru simplificarea migrației de la SGBD-ul Oracle. În modul de compatibilitate cu SGBD-ul Oracle, sunt implementate funcțiile TO_NUMBER (convertirea unui șir în număr), TO_DATE (convertirea unui șir în dată) și TRUNC (tăierea datei, de exemplu, la oră, zi, lună, an), precum și suport pentru tabele asociative (INDEX BY) și sintaxa „( + )” pentru definirea fuziunilor externe (outer join).
- Pentru a îmbunătăți compatibilitatea cu MySQL, a fost adăugat pluginul de autentificare caching_sha2_password, care folosește algoritmul de hashing SHA2 în loc de SHA1 și este compatibil cu pluginul omonim din MySQL 9.
- Un nou tip XMLTYPE pentru stocarea datelor în format XML a fost adăugat.
- A fost implementată posibilitatea de a utiliza cursoare cu interogări parametrizate (prepared statement).
- A fost adăugat expresia „SET PATH” pentru a stabili ordinea de căutare a componentelor schemei de stocare atunci când sunt accesate fără a specifica numele schemei.
- A fost implementat suportul pentru operația „IS JSON” pentru verificarea tipului expresiei JSON, definită în standardul SQL:2023.
- În expresia „PARTITION BY KEY” este implementat suport pentru algoritmii de hash MYSQL51, MYSQL55, BASE31, CRC32C, XXH32 și XXH3.
- În motorul de stocare Aria a fost implementat un cache segmentat pentru chei, în care cheile sunt împărțite în grupuri stocate în segmente separate ale cache-ului. Noua memorie cache a permis îmbunătățirea performanței execuției paralele a interogărilor de către diferiți utilizatori. Numărul de segmente este stabilit prin variabila aria_pagecache_segments, care poate lua valori de la 1 (implicit) până la 128.
- A fost adăugată posibilitatea utilizării indexurilor bazate pe funcții (functional index) pentru îmbunătățirea performanței operațiunilor GROUP/ORDER BY.
- A fost implementat suport pentru expresia „CREATE GLOBAL TEMPORARY TABLE” pentru crearea de tabele temporare globale. Aceste tabele temporare sunt eliminate după finalizarea sesiunii și sunt vizibile pentru toți utilizatorii, dar conțin date individuale pentru fiecare utilizator.
- A fost adăugat suport pentru SSL-chei protejate prin parolă. Parola pentru deblocarea SSL-urilor poate fi setată prin variabila ssl_passphrase sau manual la pornire. server.
- A fost adăugată expresia „SET SESSION AUTHORIZATION” pentru a acționa sub alt utilizator cu privilegii corespunzătoare (expresia poate fi considerată echivalentă cu „sudo” pentru SGBD).
- În pluginul file_key_management.so a fost adăugat suport pentru hash-urile SHA-2.
- A fost adăugat suport pentru variabile cursor slabe (weak cursor variable) de tip predefinit SYS_REFCURSOR, permițând returnarea unui cursor din proceduri stocate (în parametrul OUT) sau din funcții (în expresia RETURN). Pentru a limita numărul maxim de cursori deschiși simultan, a fost adăugată variabila de sistem „max_open_cursors”.
- În tipul TO_CHAR a fost adăugat suport pentru formatul FM (Fill Mode) pentru a exclude completarea suplimentară. De exemplu, interogarea
„SELECT CONCAT(‘/’, TO_CHAR(‘2020-01-06 10:11:12’, ‘FMDAY’), ‘/’);” va returna „/Luni/” în loc de „/Luni /”. - În utilitarul mariadb-check și expresia CHECK TABLE a fost adăugat suport pentru tabele din motorul SEQUENCE.
- În optimizator a fost adăugat suport pentru opțiuni (hint) care influențează construirea planului de optimizare: 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. Opțiunile sunt inserate în interogare într-un format compatibil cu MySQL, de exemplu:
SELECT /*+ BKA(t1) NO_BKA(t2) */ * FROM t1 INNER JOIN t2 WHERE …;
SELECT /*+ MAX_EXECUTION_TIME(1000) */ * FROM t1 INNER JOIN t2 WHERE …; - Performanța expresiilor neordonate «LEFT JOIN» și a scanării ordonate a fost îmbunătățită atunci când se utilizează expresia «PARTITION BY RANGE».
- În rezultatele urmaririi optimizatorului a fost asigurată afișarea definițiilor
tabelurilor și vizualizărilor. - Atunci când se efectuează operațiuni de îmbinare a tabelurilor (JOIN), a fost implementată o optimizare care ia în considerare unicitatea rândurilor în subinterogările cu expresia «GROUP BY» pentru o prognoză mai precisă a numărului de rânduri rezultate (out_rows) și aplicarea corectă a indicilor.
- Scalabilitatea blocărilor MDL (Metadata Lock) a fost îmbunătățită.
- S-a adăugat suport pentru noi funcții GIS (Sistem Informatic Geografic):
ST_Validate, MBRCoveredBy, ST_Simplif, ST_GeoHash, ST_LatFromGeoHash, ST_LongFromGeoHash, ST_PointFromGeoHash, ST_IsValid, ST_Collect. - S-a adăugat suport pentru trigger-uri care se activează pentru mai multe evenimente. În expresia CREATE TRIGGER se pot enumera acum evenimentele care se încadrează în aceasta, folosind sintaxa «{ event [ OR … ] }».
- În pluginul pentru jurnal de audit a fost adăugat suport pentru bufferizarea operațiunii de înregistrare în jurnal. Dimensiunea bufferului este specificată prin variabila server_audit_file_buffer_size.
S-a implementat salvarea în jurnalul de audit a informațiilor despre porturile rețelei pentru conexiunile de intrare (anterior era reflectat doar gazda). - În utilitarul mariadb a fost adăugată opțiunea «—script-dir» pentru a specifica un catalog alternativ pentru căutarea scripturilor, care sunt lansate prin comanda SOURCE.
- S-a permis utilizarea replicării în modul paralel în replicarea asincronă a datelor între două clustere Galera.
- În utilitarul mariadb-dump a fost adăugată posibilitatea de a specifica măști (de exemplu, «database_*»), folosind opțiunea «-L» (—wildcards).
- A fost eliminată cerința de unicitate a identificatorilor cheilor externe (foreign key) în contextul întregii baze de date (calculul este suficient pe nivelul tabelului).
- Limitele asupra nivelului de imbricare a structurilor în funcțiile de lucru cu JSON au fost ridicate (limitarea JSON_DEPTH_LIMIT care anterior lua valoarea 32 a fost eliminată).
- A fost adăugată tabela TRIGGERED_UPDATE_COLUMNS în schema INFORMATION_SCHEMA (INFORMATION_SCHEMA.TRIGGERED_UPDATE_COLUMNS), arătând coloanele care sunt modificate atunci când trigger-ul este activat.
- În tabela PARAMETERS din schema INFORMATION_SCHEMA a fost implementată coloana PARAMETER_DEFAULT, care conține valorile implicite ale parametrilor procedurilor stocate.
- Au fost eliminate variabilele big_tables, large_page_size și storage_engine, declarate anterior ca fiind învechite.
Sursa: opennet.ro
