È stato rilasciato il database MariaDB 12.3.2, che è segnato come il primo rilascio stabile della versione 12.3. La versione MariaDB 12.3 è classificata come rilascio con supporto a lungo termine e sarà supportata fino a giugno 2029. È inoltre disponibile il rilascio MariaDB 13.0.1, che ha lo stato di candidato al rilascio.
Il progetto MariaDB sviluppa un fork di MySQL, mantenendo la compatibilità all'indietro e distinguendosi per l'integrazione di motori di archiviazione aggiuntivi e funzionalità avanzate. Lo sviluppo di MariaDB è supervisionato dall'organizzazione indipendente MariaDB Foundation, secondo un processo di sviluppo aperto e trasparente, che non dipende da singoli fornitori. MariaDB è fornito al posto di MySQL in molte distribuzioni Linux (RHEL, SUSE, Fedora, openSUSE, Slackware, OpenMandriva, ROSA, Arch Linux, Debian) ed è implementato in grandi progetti come Wikipedia, Google Cloud SQL e Nimbuzz.
Tra le modifiche nella versione MariaDB 12.3 rispetto al precedente rilascio LTS MariaDB 11.8:
- Completamente riscritta l'implementazione del log binario (binlog), i principali componenti per la sua gestione sono stati trasferiti nel motore InnoDB. Questo trasferimento ha permesso di eliminare la logica di sincronizzazione obsoleta, accelerando la replica e migliorando le prestazioni delle operazioni di scrittura dei dati. Durante i test sulla nuova implementazione in sistemi ad alta intensità di carico, è stata riscontrata una crescita delle prestazioni fino a 4 volte con un elevato numero di operazioni di scrittura. Per l'attivazione è proposta la configurazione "binlog_storage_engine=innodb."
- La velocità di ricerca vettoriale utilizzando il tipo VECTOR, applicato nei sistemi di apprendimento automatico, è aumentata del 30-50%. L'accelerazione è raggiunta grazie all'ottimizzazione dei calcoli nella ricerca di similarità tra vettori in spazi multidimensionali e all'implementazione di una nuova tecnica di estrapolazione basata su rappresentazioni vettoriali annidate (matryoshka embedding).
- Aggiunte funzionalità per semplificare la migrazione da database Oracle. In modalità compatibilità con il database Oracle sono state implementate le funzioni TO_NUMBER (conversione di una stringa in numero), TO_DATE (conversione di una stringa in data) e TRUNC (troncamento della data, ad esempio, fino all'ora, giorno, mese, anno), è stato anche aggiunto il supporto per array associativi (INDEX BY) e la sintassi "( + )" per la definizione delle fusioni esterne (outer join).
- Per aumentare la compatibilità con MySQL è stato aggiunto un plugin di autenticazione caching_sha2_password, che utilizza per l'hashing l'algoritmo SHA2 invece di SHA1 ed è compatibile con l'omonimo plugin di MySQL 9.
- Aggiunto un nuovo tipo XMLTYPE per la memorizzazione dei dati nel formato XML.
- Implementata la possibilità di utilizzare cursori con query parametriche (prepared statement).
- Aggiunto l'espressione "SET PATH" per specificare l'ordine di ricerca dei componenti dello schema di archiviazione quando si accede a essi senza indicare il nome dello schema.
- Implementato il supporto per l'operazione "IS JSON" per verificare il tipo di espressione JSON, definito nello standard SQL:2023.
- Nell'espressione «PARTITION BY KEY» è supportato l'algoritmo di hashing MYSQL51, MYSQL55, BASE31, CRC32C, XXH32 e XXH3.
- Nel motore di archiviazione Aria è implementata una cache di chiavi segmentata, in cui le chiavi sono suddivise in gruppi e memorizzate in segmenti di cache separati. La nuova cache ha consentito di aumentare le prestazioni dell'esecuzione parallela delle query da parte di utenti diversi. Il numero di segmenti è impostato tramite la variabile aria_pagecache_segments, che può assumere valori da 1 (predefinito) a 128.
- Aggiunta la possibilità di utilizzare indici basati su funzioni (functional index) per migliorare le prestazioni delle operazioni GROUP/ORDER BY.
- È supportata l'espressione «CREATE GLOBAL TEMPORARY TABLE» per la creazione di tabelle temporanee globali. Queste tabelle temporanee vengono eliminate al termine della sessione e sono visibili a tutti gli utenti, ma contengono dati specifici per ogni utente.
- È stata aggiunta la supporto per SSL-chiavi protette da password. La password per sbloccare i certificati SSL può essere impostata tramite la variabile ssl_passphrase o manualmente all'avvio. server.
- È stata aggiunta l'espressione «SET SESSION AUTHORIZATION» per eseguire azioni come un altro utente, a condizione che siano concesse le relative autorizzazioni (l'espressione può essere vista come un analogo di «sudo» per il DBMS).
- Nel plugin file_key_management.so è stata aggiunta la supporto per gli hash SHA-2.
- È stata aggiunta la supporto per le variabili cursore deboli (weak cursor variable) di tipo predefinito SYS_REFCURSOR, che consentono di restituire un cursore da procedure memorizzate (nel parametro OUT) o da funzioni (nell'espressione RETURN). Per limitare il numero massimo di cursori aperti contemporaneamente, è stata aggiunta la variabile di sistema «max_open_cursors».
- Nel tipo TO_CHAR è stata aggiunta la supporto per il formato FM (Fill Mode) per escludere il riempimento aggiuntivo. Ad esempio, la query
«SELECT CONCAT(‘/’, TO_CHAR(‘2020-01-06 10:11:12’, ‘FMDAY’), ‘/’);» restituirà «/Monday/» invece di «/Monday /». - Nell'utilità mariadb-check e nell'espressione CHECK TABLE è stata aggiunta la supporto per tabelle dal motore SEQUENCE.
- L'ottimizzatore ha aggiunto supporto per opzioni (hint) che influenzano la costruzione del piano di ottimizzazione: 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 e [NO_]MERGE. Le opzioni sono inserite nella query in un formato compatibile con MySQL, ad esempio:
SELECT /*+ BKA(t1) NO_BKA(t2) */ * FROM t1 INNER JOIN t2 WHERE …;
SELECT /*+ MAX_EXECUTION_TIME(1000) */ * FROM t1 INNER JOIN t2 WHERE …; - Migliorata la performance delle espressioni «LEFT JOIN» non ordinate e della scansione ordinata quando si utilizza l'espressione «PARTITION BY RANGE».
- Nelle tracce dei risultati dell'ottimizzatore viene mostrata la definizione
di tabelle e viste. - Durante l'esecuzione delle operazioni di fusione delle tabelle (JOIN) è stata implementata un'ottimizzazione che tiene conto dell'unicità delle righe nelle sottoquery con l'espressione «GROUP BY» per una previsione più accurata del numero di righe risultanti (out_rows) e un'applicazione corretta degli indici.
- Migliorata la scalabilità dei lock MDL (Metadata Lock).
- Aggiunto il supporto per nuove funzioni GIS (Geographic Information System):
ST_Validate, MBRCoveredBy, ST_Simplif, ST_GeoHash, ST_LatFromGeoHash, ST_LongFromGeoHash, ST_PointFromGeoHash, ST_IsValid, ST_Collect. - È stata aggiunta la supporto per trigger che si attivano per più eventi. Nell'espressione CREATE TRIGGER ora è possibile elencare gli eventi a cui si applica utilizzando la sintassi «{ event [ OR … ] }».
- Nel plugin per la registrazione dell'audit è stata aggiunta la supporto per la memorizzazione nella cache delle operazioni di scrittura nel log. La dimensione del buffer è impostata tramite la variabile server_audit_file_buffer_size.
Implementata la registrazione nel log di audit delle informazioni sulle porte di rete per le connessioni in entrata (in precedenza veniva registrato solo l'host). - Nell'utilità mariadb è stata aggiunta l'opzione «—script-dir» per specificare una directory alternativa per la ricerca degli script eseguiti dal comando SOURCE.
- Consentito l'uso della replica in modalità parallela per la replica asincrona dei dati tra due cluster Galera.
- Nell'utilità mariadb-dump è stata aggiunta la possibilità di specificare maschere (ad esempio, «database_*»), utilizzando l'opzione «-L» (—wildcards).
- Rimosso il requisito di unicità degli identificatori delle chiavi esterne (foreign key) nel contesto dell'intero database (è sufficiente l'unicità a livello di tabella).
- Rimossi i vincoli sul livello di nidificazione delle strutture nelle funzioni per lavorare con JSON (rimossa la limitazione JSON_DEPTH_LIMIT, che precedentemente era 32).
- Aggiunta la tabella TRIGGERED_UPDATE_COLUMNS nello schema INFORMATION_SCHEMA (INFORMATION_SCHEMA.TRIGGERED_UPDATE_COLUMNS), che mostra le colonne modificate in seguito all'attivazione di un trigger.
- Nella tabella PARAMETERS nello schema INFORMATION_SCHEMA è stato implementata la colonna PARAMETER_DEFAULT, che contiene i valori predefiniti dei parametri delle procedure memorizzate.
- Rimosse le variabili big_tables, large_page_size e storage_engine, precedentemente dichiarate deprecate.
Fonte: opennet.ru
