După un an de dezvoltare și trei versiuni preliminare, a fost publicat primul release stabil al noului branch al sistemului de gestionare a bazelor de date MariaDB 10.6, în cadrul căruia se dezvoltă o ramură a MySQL, păstrând compatibilitatea înapoi și distingându-se prin integrarea de motoare de stocare suplimentare și funcționalități extinse. Suportul pentru acest branch va fi oferit timp de 5 ani, până în iulie 2026.
Dezvoltarea MariaDB este coordonată de organizația independentă MariaDB Foundation, conform unui proces de dezvoltare complet deschis și transparent, independent de producători individuali. MariaDB este livrată în locul MySQL în multe distribuții Linux (RHEL, SUSE, Fedora, openSUSE, Slackware, OpenMandriva, ROSA, Arch Linux, Debian) și a fost implementată în proiecte mari precum Wikipedia, Google Cloud SQL și Nimbuzz.
Îmbunătățirile cheie ale MariaDB 10.6:
- A fost asigurată atomicitatea executării expresiilor „CREATE TABLE|VIEW|SEQUENCE|TRIGGER”, „ALTER TABLE|SEQUENCE”, „RENAME TABLE|TABLES”, „DROP TABLE|VIEW|VIEW|TRIGGER|DATABASE” (fie expresia este complet finalizată, fie totul revine la starea inițială). În cazul operațiunilor „DROP TABLE”, care șterg mai multe tabele simultan, atomicitatea este asigurată la nivelul fiecărui tabel individual. Scopul modificării este asigurarea integrității în caz de eroare server în timpul executării operației. Anterior, după o eroare, putea rămâne tabele temporare și fișiere, să fie perturbată sincronizarea între tabele în motoarele de stocare și fișierele frm, să rămână tabele individuale neschimbate în cazul redenumirii simultane a mai multor tabele. Integritatea este asigurată prin menținerea unui jurnal de recuperare a stării, calea către care poate fi definită prin noua opțiune „—log-ddl-recovery=fișier” (implicit ddl-recovery.log).
- A fost implementată construcția definită în standardul SQL 2008 „SELECT … OFFSET … FETCH”, care permite returnarea unui număr specific de rânduri începând de la un anumit offset, cu posibilitatea utilizării parametrului „WITH TIES” pentru atașarea unei valori următoare. De exemplu, expresia „SELECT i FROM t1 ORDER BY i ASC OFFSET 1 ROWS FETCH FIRST 3 ROWS WITH TIES” diferă de construcția „SELECT i FROM t1 ORDER BY i ASC LIMIT 3 OFFSET 1” prin returnarea unui element suplimentar, următor în coadă (în loc de 3, vor fi returnate 4 rânduri).
- Pentru motorul InnoDB a fost realizat sintaxa „SELECT … SKIP LOCKED”, care permite excluderea rândurilor pentru care nu poate fi setată o blocare („LOCK IN SHARE MODE” sau „FOR UPDATE”).
- A fost implementată posibilitatea de a ignora indexurile (în MySQL 8, această funcționalitate este denumită „indexuri invizibile”). Marcarea unui index pentru a fi ignorat se face prin intermediul flagului IGNORED în instrucțiunea „ALTER TABLE”, după care indexul rămâne vizibil și actualizat, dar nu este utilizat de optimizator.
- A fost adăugată funcția JSON_TABLE(), destinată transformării datelor JSON într-o formă relațională. De exemplu, un document JSON poate fi transformat pentru a fi utilizat în contextul unei tabele care poate fi specificată în cadrul blocului FROM din instrucțiunea SELECT.
- A fost îmbunătățită compatibilitatea cu SGBD Oracle: A fost adăugată suportul pentru subinterogări anonime în cadrul blocului FROM. A fost implementată construcția MINUS (echivalentul EXCEPT). Au fost adăugate funcțiile ADD_MONTHS(), TO_CHAR(), SYS_GUID() și ROWNUM().
- În motorul InnoDB, inserția în tabele goale a fost accelerată. Formatul de rânduri COMPRESSED, în mod implicit, a fost transformat într-un mod de citire exclusivă. Schema SYS_TABLESPACES a înlocuit SYS_DATAFILES și reflectă direct starea din FS. S-a asigurat suport pentru scrierea întârziată în spațiul de tabele temporare. Suportul pentru vechiul algoritm de sumă de control, păstrat pentru compatibilitate cu MariaDB 5.5, a fost oprit.
- În sistemul de replicare, dimensiunea valorii parametrului master_host a fost crescută de la 60 la 255 de caractere, iar master_user la 128. A fost adăugată variabila binlog_expire_logs_seconds pentru configurarea timpului de expirare a jurnalului binar în secunde (anterior timpul de resetare era definit doar în zile prin variabila expire_logs_days).
- În mecanismul de replicare multi-master sincronă Galera, a fost implementată variabila wsrep_mode pentru configurarea parametrilor API WSREP (Write Set REPlication). A fost permisă trecerea Galera de la comunicații necriptate la utilizarea TLS fără a opri clusterul.
- A fost implementată schema sys-schema, în care a fost adunată o colecție de vederi, funcții și proceduri pentru analiza operațiunilor cu BD.
- Au fost adăugate tabele de serviciu pentru analiza performanței replicării.
- În setul de tabele informaționale au fost adăugate vederi INFORMATION_SCHEMA.KEYWORDS și INFORMATION_SCHEMA.SQL_FUNCTIONS, care afișează lista cu cuvintele cheie și funcțiile disponibile.
- Au fost eliminate depozitele TokuDB și CassandraSE.
- Codificarea utf8 a fost transformată din reprezentarea pe patru byte utf8mb4 (U+0000..U+10FFFF) în utf8mb3 pe trei byte (acoperind intervalul Unicode U+0000..U+FFFF).
- A fost adăugată suportul pentru activarea prin socket în systemd.
- În pluginul GSSAPI a fost adăugată suportul pentru numele grupurilor Active Directory și SID.
- A fost adăugată verificarea existenței fișierului de configurație $MARIADB_HOME/my.cnf pe lângă $MYSQL_HOME/my.cnf.
- S-au implementat noi variabile de sistem binlog_expire_logs_seconds, innodb_deadlock_report, innodb_read_only_compressed, wsrep_mode și Innodb_buffer_pool_pages_lru_freed.
Sursa: opennet.ro
