Après un an de développement et trois versions préliminaires, la première version stable de la nouvelle branche de la base de données MariaDB 10.6 est publiée. Cette branche se développe à partir de MySQL, tout en préservant la compatibilité ascendante et en intégrant des moteurs de stockage supplémentaires et des fonctionnalités avancées. Le support de cette nouvelle branche sera assuré pendant 5 ans, jusqu'en juillet 2026.
Le développement de MariaDB est supervisé par l'organisation indépendante MariaDB Foundation, selon un processus de développement totalement ouvert et transparent, qui ne dépend pas de fournisseurs individuels. MariaDB remplace MySQL dans de nombreuses distributions Linux (RHEL, SUSE, Fedora, openSUSE, Slackware, OpenMandriva, ROSA, Arch Linux, Debian) et est intégré dans de grands projets tels que Wikipedia, Google Cloud SQL et Nimbuzz.
Améliorations clés de MariaDB 10.6 :
- L'atomicité des expressions «CREATE TABLE|VIEW|SEQUENCE|TRIGGER», «ALTER TABLE|SEQUENCE», «RENAME TABLE|TABLES», «DROP TABLE|VIEW|VIEW|TRIGGER|DATABASE» est garantie (soit l'expression est complètement terminée, soit tout revient à l'état initial). Dans le cas d'opérations «DROP TABLE» supprimant plusieurs tables à la fois, l'atomicité est assurée au niveau de chaque table individuelle. L'objectif de ce changement est d'assurer l'intégrité en cas d'échec de serveurs durant l'exécution de l'opération. Auparavant, après un échec, des tables temporaires et des fichiers pouvaient rester, la synchronisation des tables dans les moteurs de stockage et les fichiers frm pouvait être perturbée, et certaines tables pouvaient ne pas être renommées lors du renommage de plusieurs tables à la fois. L'intégrité est garantie grâce à la tenue d'un journal de récupération d'état, dont le chemin peut être défini via la nouvelle option «—log-ddl-recovery= fichier» (par défaut ddl-recovery.log).
- Une construction définie dans la norme SQL 2008, «SELECT … OFFSET … FETCH», a été mise en œuvre, permettant d'extraire un certain nombre de lignes, en commençant à partir d'un décalage spécifié, avec la possibilité d'utiliser le paramètre «WITH TIES» pour inclure une autre valeur suivante. Par exemple, l'expression «SELECT i FROM t1 ORDER BY i ASC OFFSET 1 ROWS FETCH FIRST 3 ROWS WITH TIES» diffère de la construction «SELECT i FROM t1 ORDER BY i ASC LIMIT 3 OFFSET 1» en renvoyant un élément supplémentaire en queue (au lieu de 3, 4 lignes seront affichées).
- Pour le moteur InnoDB, la syntaxe «SELECT … SKIP LOCKED» a été réalisée, permettant d'exclure les lignes pour lesquelles un verrou ne peut pas être appliqué («LOCK IN SHARE MODE» ou «FOR UPDATE»).
- Une fonctionnalité d'ignorance des index a été mise en œuvre (dans MySQL 8, cette fonctionnalité est nommée « index invisibles »). L'annotation d'un index à ignorer se fait grâce au drapeau IGNORED dans l'instruction « ALTER TABLE », après quoi l'index reste visible et modifiable, mais n'est pas utilisé par l'optimiseur.
- La fonction JSON_TABLE() a été ajoutée, permettant de convertir des données JSON en forme relationnelle. Par exemple, un document JSON peut être transformé pour être utilisé dans le contexte d'une table qui peut être spécifiée dans le bloc FROM d'une instruction SELECT.
- La compatibilité avec les bases de données Oracle a été améliorée : le support des sous-requêtes anonymes dans le bloc FROM a été ajouté. La construction MINUS (équivalent à EXCEPT) a été mise en œuvre. Les fonctions ADD_MONTHS(), TO_CHAR(), SYS_GUID() et ROWNUM() ont été ajoutées.
- Dans le moteur InnoDB, l'insertion dans des tables vides a été accélérée. Le format de ligne COMPRESSED est passé par défaut à un mode lecture seule. Le schéma SYS_TABLESPACES a remplacé SYS_DATAFILES et reflète directement l'état du système de fichiers. Le support de l'écriture différée a été assuré pour l'espace de table temporaire. Le vieux algorithme de contrôle des sommes, qui avait été maintenu pour la compatibilité avec MariaDB 5.5, n'est plus supporté.
- Dans le système de réplication, la taille des valeurs des paramètres master_host a été augmentée de 60 à 255 caractères, et master_user à 128. La variable binlog_expire_logs_seconds a été ajoutée pour configurer le temps d'expiration du journal binaire en secondes (auparavant, le temps de vidage était déterminé uniquement en jours via la variable expire_logs_days).
- Dans le mécanisme de réplication multi-master synchrone de Galera, la variable wsrep_mode a été mise en œuvre pour configurer les paramètres de l'API WSREP (Write Set REPlication). La transition de Galera d'une communication non chiffrée à l'utilisation de TLS sans arrêt du cluster a été autorisée.
- Un schéma sys-schema a été mis en œuvre, rassemblant une collection de vues, de fonctions et de procédures pour analyser les opérations avec la base de données.
- Des tables auxiliaires pour analyser les performances de réplication ont été ajoutées.
- Des vues INFORMATION_SCHEMA.KEYWORDS et INFORMATION_SCHEMA.SQL_FUNCTIONS ont été ajoutées au jeu de tables d'informations, fournissant une liste des mots-clés et des fonctions disponibles.
- Les moteurs TokuDB et CassandraSE ont été supprimés.
- L'encodage utf8 a été converti de la représentation quatre octets utf8mb4 (U+0000..U+10FFFF) à utf8mb3 trois octets (couvrant la plage Unicode U+0000..U+FFFF).
- Le support de l'activation par socket dans systemd a été ajouté.
- Dans le plugin GSSAPI, le support des noms de groupes Active Directory et des SID a été ajouté.
- Ajout d'une vérification de l'existence du fichier de configuration $MARIADB_HOME/my.cnf en plus de $MYSQL_HOME/my.cnf.
- De nouvelles variables système binlog_expire_logs_seconds, innodb_deadlock_report, innodb_read_only_compressed, wsrep_mode et Innodb_buffer_pool_pages_lru_freed ont été implémentées.
Source : opennet.ru
