Foi lançado o sistema de gerenciamento de banco de dados MariaDB 12.3.2, que é marcado como a primeira versão estável da série 12.3. A série MariaDB 12.3 foi classificada como uma versão de longo suporte e será mantida até junho de 2029. Ao mesmo tempo, a versão MariaDB 13.0.1 está disponível, com status de candidato a liberação.
O projeto MariaDB desenvolve um fork do MySQL, mantendo a compatibilidade retroativa e se diferenciando pela integração de mecanismos de armazenamento adicionais e capacidades expandidas. O desenvolvimento do MariaDB é supervisionado pela organização independente MariaDB Foundation, de acordo com um processo de desenvolvimento aberto e transparente, sem depender de fabricantes individuais. O MariaDB é fornecido em vez do MySQL em muitas distribuições Linux (RHEL, SUSE, Fedora, openSUSE, Slackware, OpenMandriva, ROSA, Arch Linux, Debian) e está integrado em grandes projetos como Wikipedia, Google Cloud SQL e Nimbuzz.
Entre as mudanças na série MariaDB 12.3 em comparação com a versão LTS anterior MariaDB 11.8:
- A implementação do log binário (binlog) foi completamente reformulada, com os principais componentes movidos para o mecanismo InnoDB. Essa mudança permitiu eliminar a lógica de sincronização obsoleta, acelerou a replicação e melhorou o desempenho das operações relacionadas à gravação de dados. Nos testes da nova implementação em sistemas de alta carga, foi observado um aumento de desempenho de até 4 vezes com um grande número de operações de gravação. Para ativar, foi proposta a configuração "binlog_storage_engine=innodb".
- A velocidade de busca vetorial com o tipo VECTOR, utilizado em sistemas de aprendizado de máquina, foi aumentada em 30-50%. O aumento é obtido por meio da otimização dos cálculos durante a busca de similaridade entre vetores em espaços multidimensionais e pela implementação de uma nova técnica de extrapolação baseada em representações vetoriais aninhadas (matryoshka embedding).
- Recursos foram adicionados para simplificar a migração do banco de dados Oracle. No modo de compatibilidade com o banco de dados Oracle, foram implementadas as funções TO_NUMBER (conversão de string para número), TO_DATE (conversão de string para data) e TRUNC (corte de data, por exemplo, até hora, dia, mês, ano), além do suporte para arrays associativos (INDEX BY) e a sintaxe "( + )" para definição de junções externas (outer join).
- Para aumentar a compatibilidade com o MySQL, foi adicionado o plugin de autenticação caching_sha2_password, que utiliza o algoritmo SHA2 para hashing em vez do SHA1 e é compatível com o plugin de mesmo nome do MySQL 9.
- Um novo tipo XMLTYPE foi adicionado para armazenar dados no formato XML.
- Foi implementada a possibilidade de uso de cursores com consultas parametrizadas (prepared statement).
- Foi adicionada a expressão "SET PATH" para definir a ordem de busca dos componentes do esquema de armazenamento ao acessá-los sem especificar o nome do esquema.
- O suporte para a operação "IS JSON" foi implementado para verificar o tipo da expressão JSON, definido na norma SQL:2023.
- A expressão «PARTITION BY KEY» implementa suporte aos algoritmos de hash MYSQL51, MYSQL55, BASE31, CRC32C, XXH32 e XXH3.
- No mecanismo de armazenamento Aria, foi implementado um cache de chaves segmentado, onde as chaves são divididas em grupos armazenados em segmentos de cache separados. O novo cache aumentou o desempenho da execução paralela de consultas por diferentes usuários. O número de segmentos é definido pela variável aria_pagecache_segments, que pode assumir valores de 1 (padrão) a 128.
- Foi adicionada a possibilidade de usar índices baseados em funções (functional index) para melhorar o desempenho das operações GROUP/ORDER BY.
- Foi implementado suporte para a expressão «CREATE GLOBAL TEMPORARY TABLE» para a criação de tabelas temporárias globais. Essas tabelas temporárias são removidas ao final da sessão e são visíveis para todos os usuários, mas contêm dados que são individuais para cada usuário.
- Suporte adicionado SSL-chaves protegidas por senha. A senha para desbloquear os certificados SSL pode ser definida pela variável ssl_passphrase ou manualmente durante a inicialização. servidor.
- Foi adicionada a expressão «SET SESSION AUTHORIZATION» para execução de ações como outro usuário, desde que as devidas permissões estejam atribuídas (a expressão pode ser vista como um análogo ao «sudo» para SGBD).
- No plugin file_key_management.so, foi adicionada a suporte para hashes SHA-2.
- Foi adicionado suporte a variáveis de cursor fracas (weak cursor variable) do tipo predefinido SYS_REFCURSOR, permitindo retornar um cursor de procedimentos armazenados (no parâmetro OUT) ou de funções (na expressão RETURN). Para limitar o número máximo de cursores abertos simultaneamente, foi adicionada a variável de sistema «max_open_cursors».
- No tipo TO_CHAR foi adicionado suporte ao formato FM (Fill Mode) para excluir preenchimentos adicionais. Por exemplo, a consulta
«SELECT CONCAT(‘/’, TO_CHAR(‘2020-01-06 10:11:12’, ‘FMDAY’), ‘/’);» retornará «/Monday/» em vez de «/Monday /». - Na ferramenta mariadb-check e na expressão CHECK TABLE, foi adicionado suporte a tabelas do mecanismo SEQUENCE.
- No otimizador, foi adicionado suporte a opções (hint) que influenciam a construção do plano de otimização: 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. As opções são inseridas na consulta em um formato compatível com MySQL, por exemplo:
SELECT /*+ BKA(t1) NO_BKA(t2) */ * FROM t1 INNER JOIN t2 WHERE …;
SELEC /*+ MAX_EXECUTION_TIME(1000) */ * FROM t1 INNER JOIN t2 WHERE …; - A performance of unordered expressions "LEFT JOIN" e a varredura ordenada foi aumentada ao usar a expressão "PARTITION BY RANGE".
- Nos resultados de rastreamento do otimizador, foram mostradas definições
de tabelas e visualizações. - Ao executar operações de junção de tabelas (JOIN), uma otimização foi implementada que leva em conta a unicidade das linhas em subconsultas com a expressão "GROUP BY" para uma previsão mais precisa do número de linhas resultantes (out_rows) e aplicação correta de índices.
- A escalabilidade dos bloqueios MDL (Metadata Lock) foi aprimorada.
- O suporte a novas funções GIS (Geographic Information System) foi adicionado:
ST_Validate, MBRCoveredBy, ST_Simplif, ST_GeoHash, ST_LatFromGeoHash, ST_LongFromGeoHash, ST_PointFromGeoHash, ST_IsValid, ST_Collect. - Foi adicionado suporte a gatilhos que são acionados para vários eventos. Na expressão CREATE TRIGGER, agora é possível listar os eventos que se aplicam usando a sintaxe "{ event [ OR … ] }".
- O plugin para registro de auditoria agora suporta o buffer para operações de registro. O tamanho do buffer é definido pela variável server_audit_file_buffer_size.
Foi implementado o registro no log de auditoria de informações sobre portas de rede para conexões de entrada (anteriormente, apenas o host era refletido). - Na utilidade mariadb, foi adicionada a opção "—script-dir" para especificar um diretório alternativo para busca de scripts executados pelo comando SOURCE.
- Foi permitido o uso da replicação em modo paralelo ao replicar dados de forma assíncrona entre dois clusters Galera.
- Na utilidade mariadb-dump, foi adicionada a possibilidade de especificar máscaras (por exemplo, "database_*"), usando a opção "-L" (—wildcards).
- A exigência de unicidade para identificadores de chaves externas (foreign key) no contexto de todo o BD foi removida (basta que sejam únicos no nível da tabela).
- As restrições sobre o nível de aninhamento de estruturas em funções que trabalham com JSON foram removidas (o limite JSON_DEPTH_LIMIT, que anteriormente tinha o valor 32, foi abolido).
- Foi adicionada a tabela TRIGGERED_UPDATE_COLUMNS no esquema INFORMATION_SCHEMA (INFORMATION_SCHEMA.TRIGGERED_UPDATE_COLUMNS), mostrando as colunas que são modificadas ao acionar um gatilho.
- Na tabela PARAMETERS no esquema INFORMATION_SCHEMA, foi implementada a coluna PARAMETER_DEFAULT, que contém os valores padrão dos parâmetros de procedimentos armazenados.
- As variáveis big_tables, large_page_size e storage_engine, que foram anteriormente declaradas obsoletas, foram removidas.
Fonte: opennet.ru
