Se ha presentado la versión del SGBD MariaDB 12.3.2, que se marca como la primera versión estable de la rama 12.3. La rama MariaDB 12.3 se clasifica como una versión con soporte a largo plazo y se mantendrá hasta junio de 2029. Al mismo tiempo, está disponible la versión MariaDB 13.0.1, que tiene el estado de candidato a liberación.
El proyecto de MaríaDB desarrolla una bifurcación de MySQL, que mantiene la compatibilidad y se diferencia por la integración de motores de almacenamiento adicionales y capacidades ampliadas. El desarrollo de MaríaDB es supervisado por la organización independiente Fundación MaríaDB, en conformidad con un proceso de desarrollo abierto y transparente, que no depende de fabricantes individuales. MaríaDB se distribuye en lugar de MySQL en muchas distribuciones de Linux (RHEL, SUSE, Fedora, openSUSE, Slackware, OpenMandriva, ROSA, Arch Linux, Debian) y se ha implementado en grandes proyectos como Wikipedia, Google Cloud SQL y Nimbuzz.
Entre los cambios en la rama MariaDB 12.3 en comparación con la anterior versión LTS MariaDB 11.8:
- Se ha rediseñado por completo la implementación del registro binario (binlog), cuyos componentes principales se han trasladado al motor InnoDB. Esta reubicación ha permitido deshacerse de la lógica de sincronización obsoleta, acelerar la replicación y mejorar el rendimiento de las operaciones relacionadas con la escritura de datos. En pruebas de la nueva implementación en sistemas de alta carga, se ha observado un aumento en el rendimiento de hasta 4 veces en un gran número de operaciones de escritura. Para habilitarlo, se ha propuesto la configuración «binlog_storage_engine=innodb».
- Se ha incrementado la velocidad de búsqueda vectorial entre un 30% y un 50% utilizando el tipo VECTOR, empleado en sistemas de aprendizaje automático. La aceleración se logra mediante la optimización de los cálculos al buscar similitudes entre vectores en espacios multidimensionales, así como la implementación de una nueva técnica de extrapolación basada en representaciones vectoriales anidadas (matryoshka embedding).
- Se han añadido capacidades para simplificar la migración de SGBD Oracle. En el modo de compatibilidad con SGBD Oracle, se han implementado las funciones TO_NUMBER (conversión de cadena a número), TO_DATE (conversión de cadena a fecha) y TRUNC (truncar fecha, por ejemplo, a hora, día, mes, año), así como se ha añadido soporte para arreglos asociativos (INDEX BY) y la sintaxis «( + )» para definir uniones externas (outer join).
- Para mejorar la compatibilidad con MySQL, se ha añadido un complemento de autenticación caching_sha2_password, que utiliza el algoritmo SHA2 para el hash en lugar de SHA1 y es compatible con el mismo complemento en MySQL 9.
- Se ha añadido un nuevo tipo XMLTYPE para almacenar datos en formato XML.
- Se ha implementado la posibilidad de usar cursores con consultas parametrizadas (prepared statement).
- Se ha añadido la expresión «SET PATH» para definir el orden de búsqueda de los componentes del esquema de almacenamiento al acceder a ellos sin especificar el nombre del esquema.
- Se ha implementado el soporte para la operación «IS JSON» para verificar el tipo de expresión JSON, definida en la norma SQL:2023.
- La expresión «PARTITION BY KEY» implementa el soporte para algoritmos de hash MYSQL51, MYSQL55, BASE31, CRC32C, XXH32 y XXH3.
- El motor de almacenamiento Aria ha implementado un caché segmentado de claves, donde las claves se dividen en grupos almacenados en segmentos separados del caché. Este nuevo caché ha permitido mejorar el rendimiento de la ejecución paralela de consultas por diferentes usuarios. El número de segmentos se establece a través de la variable aria_pagecache_segments, que puede aceptar valores de 1 (por defecto) a 128.
- Se ha añadido la posibilidad de utilizar índices basados en funciones (functional index) para mejorar el rendimiento de las operaciones GROUP/ORDER BY.
- Se ha implementado el soporte para la expresión «CREATE GLOBAL TEMPORARY TABLE» para crear tablas temporales globales. Estas tablas temporales se eliminan al finalizar la sesión y son visibles para todos los usuarios, pero contienen datos específicos para cada usuario.
- Se ha añadido soporte para SSL-claves protegidas por contraseña. La contraseña para desbloquear certificados SSL puede establecerse a través de la variable ssl_passphrase o manualmente al iniciar. servidores.
- Se ha añadido la expresión «SET SESSION AUTHORIZATION» para ejecutar acciones como otro usuario con los privilegios correspondientes (la expresión se puede considerar análoga a «sudo» para sistemas de bases de datos).
- Se ha añadido soporte para hashes SHA-2 en el plugin file_key_management.so.
- Se ha añadido soporte para variables de cursor débiles (weak cursor variable) de tipo predefinido SYS_REFCURSOR, que permiten devolver un cursor de procedimientos almacenados (en el parámetro OUT) o de funciones (en la expresión RETURN). Para limitar el número máximo de cursores abiertos simultáneamente, se ha añadido la variable del sistema «max_open_cursors».
- Al tipo TO_CHAR se le ha añadido el soporte para el formato FM (Fill Mode) para excluir el relleno adicional. Por ejemplo, la consulta
«SELECT CONCAT(‘/', TO_CHAR(‘2020-01-06 10:11:12’, ‘FMDAY’), ‘/’);» devolverá «/Monday/» en lugar de «/Monday /». - A la utilidad mariadb-check y a la expresión CHECK TABLE se les ha añadido el soporte para tablas del motor SEQUENCE.
- El optimizador ha añadido soporte para opciones (hint) que afectan a la construcción del plan de optimización: 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 y [NO_]MERGE. Las opciones se insertan en la consulta en un formato compatible con MySQL, por ejemplo:
SELECT /*+ BKA(t1) NO_BKA(t2) */ * FROM t1 INNER JOIN t2 WHERE …;
SELECT /*+ MAX_EXECUTION_TIME(1000) */ * FROM t1 INNER JOIN t2 WHERE …; - Mejorada la eficiencia de las expresiones desordenadas «LEFT JOIN» y el escaneo ordenado al usar la expresión «PARTITION BY RANGE».
- En los resultados de la trazabilidad del optimizador se proporciona la visualización de las definiciones
de tablas y vistas. - Al realizar operaciones de unión de tablas (JOIN) se implementó una optimización que considera la unicidad de las filas en subconsultas con la expresión «GROUP BY» para una previsión más precisa del número de filas resultantes (out_rows) y la correcta aplicación de índices.
- Mejorada la escalabilidad de los bloqueos MDL (Metadata Lock).
- Se ha agregado soporte para nuevas funciones GIS (Sistema de Información Geográfica):
ST_Validate, MBRCoveredBy, ST_Simplif, ST_GeoHash, ST_LatFromGeoHash, ST_LongFromGeoHash, ST_PointFromGeoHash, ST_IsValid, ST_Collect. - Se ha agregado soporte para desencadenadores que se activan para varios eventos. En la expresión CREATE TRIGGER ahora se pueden enumerar los eventos que lo activan, utilizando la sintaxis «{ event [ OR … ] }».
- Al complemento para el registro de auditoría se le ha añadido soporte para la operación de escritura en el log en búfer. El tamaño del búfer se establece a través de la variable server_audit_file_buffer_size.
Se implementó el registro de información sobre puertos de red para conexiones entrantes en el log de auditoría (anteriormente solo se reflejaba el host). - Se ha añadido a la utilidad mariadb la opción «—script-dir» para especificar un directorio alternativo de búsqueda de scripts que se ejecutan con el comando SOURCE.
- Se permite el uso de replicación en modo paralelo durante la replicación asíncrona de datos entre dos clústeres Galera.
- A la utilidad mariadb-dump se le ha añadido la capacidad de especificar patrones (por ejemplo, «database_*»), utilizando la opción «-L» (—wildcards).
- Se eliminó el requisito de unicidad de los identificadores de claves externas (foreign key) en el contexto de toda la base de datos (basta con la unicidad a nivel de tabla).
- Se han levantado las restricciones sobre el nivel de anidamiento de estructuras en funciones para trabajar con JSON (se eliminó el límite JSON_DEPTH_LIMIT, que anteriormente tenía un valor de 32).
- Se ha añadido la tabla TRIGGERED_UPDATE_COLUMNS en el esquema INFORMATION_SCHEMA (INFORMATION_SCHEMA.TRIGGERED_UPDATE_COLUMNS), que muestra las columnas que se modifican al activarse un desencadenador.
- En la tabla PARAMETERS en el esquema INFORMATION_SCHEMA se ha implementado la columna PARAMETER_DEFAULT, que contiene los valores predeterminados de los parámetros de los procedimientos almacenados.
- Se han eliminado las variables big_tables, large_page_size y storage_engine, que anteriormente habían sido declaradas obsoletas.
Fuente: opennet.ru
