Представлен выпуск СУБД MariaDB 12.3.2, который отмечен как первый стабильный релиз ветки 12.3. Ветка MariaDB 12.3 отнесена к выпускам с длительным сроком поддержки и будет сопровождаться до июня 2029 года. Одновременно доступен выпуск MariaDB 13.0.1, имеющий статус кандидата в релизы.
Проектом MariaDB развивается ответвление от MySQL, сохраняющее обратную совместимость и отличающееся интеграцией дополнительных движков хранения и расширенных возможностей. Развитие MariaDB курирует независимая организация MariaDB Foundation в соответствии с открытым и прозрачным процессом разработки, не зависящим от отдельных производителей. MariaDB поставляется вместо MySQL во многих дистрибутивах Linux (RHEL, SUSE, Fedora, openSUSE, Slackware, OpenMandriva, ROSA, Arch Linux, Debian) и внедрён в таких крупных проектах, как Wikipedia, Google Cloud SQL и Nimbuzz.
Среди изменений в ветке MariaDB 12.3 по сравнению с прошлым LTS-выпуском MariaDB 11.8:
- Полностью переделана реализация бинарного лога (binlog), основные компоненты для ведения которого перенесены в движок InnoDB. Подобный перенос позволил избавиться от устаревшей логики синхронизации, ускорить репликацию и повысить производительность выполнения операций, связанных с записью данных. При тестировании новой реализации на высоконагруженных системах отмечен прирост производительности при большом числе операций записи до 4 раз. Для включения предложена настройка «binlog_storage_engine=innodb».
- На 30-50% повышена скорость векторного поиска с использованием типа VECTOR, применяемого в системах машинного обучения. Ускорение достигается благодаря оптимизации вычислений при поиске сходства между векторами в многомерных пространствах и реализации новой техники экстраполяции на основе вложенных векторных представлений (matryoshka embedding).
- Добавлены возможности для упрощения миграции с СУБД Oracle. В режиме совместимости с СУБД Oracle реализованы функции TO_NUMBER (преобразование строки в число), TO_DATE (преобразование строки в дату) и TRUNC (усечение даты, например, до часа, дня, месяца, года), а также появилась поддержка ассоциативных массивов (INDEX BY) и синтаксиса «( + )» для определения внешних слияний (outer join).
- Для повышения совместимости с MySQL добавлен плагин аутентификации caching_sha2_password, применяющий для хэширования алгоритм SHA2 вместо SHA1 и совместимый с одноимённым плагином из MySQL 9.
- Добавлен новый тип XMLTYPE для хранения данных в формате XML.
- Реализована возможность использования курсоров с параметризованными запросами (prepared statement).
- Добавлено выражение «SET PATH» для задания порядка поиска компонентов схемы хранения при обращении к ним без указания имени схемы.
- Реализована поддержка операции «IS JSON» для проверки типа выражения JSON, определённой в стандарте SQL:2023.
- В выражении «PARTITION BY KEY» реализована поддержка алгоритмов хэширования MYSQL51, MYSQL55, BASE31, CRC32C, XXH32 и XXH3.
- В движке хранения Aria реализован сегментированный кэш ключей, в котором ключи разбиваются на группы, хранимые в отдельных сегментах кэша. Новый кэш позволил повысить производительность паралеллельного выполнения запросов разными пользователями. Число сегментов задаётся через переменную aria_pagecache_segments, которая может принимать значения от 1 (по умолчанию) до 128.
- Добавлена возможность использования индексов на основе функций (functional index) для повышения производительности операций GROUP/ORDER BY.
- Реализована поддержка выражения «CREATE GLOBAL TEMPORARY TABLE» для создания глобальных временных таблиц. Подобные временные таблицы удаляются после завершения сеанса и видны всем пользователям, но содержат данные, индивидуальные для каждого пользователя.
- Добавлена поддержка SSL-ключей, защищённых паролем. Пароль для разблокирования SSL-сертификатов может быть задан через переменную ssl_passphrase или вручную при запуске сервера.
- Добавлено выражение «SET SESSION AUTHORIZATION» для выполнения действия под другим пользователем при выставлении соответствующих привилегий (выражение можно рассматривать как аналог «sudo» для СУБД).
- В плагин file_key_management.so добавлена поддержка хэшей SHA-2.
- Добавлена поддержка слабых курсорных переменных (weak cursor variable) предопределенного типа SYS_REFCURSOR, позволяющих возвращать курсор из хранимых процедур (в параметре OUT) или из функций (в выражении RETURN). Для ограничения максимального числа одновременно открытых курсоров добавлена системная переменная «max_open_cursors».
- В тип TO_CHAR добавлена поддержка формата FM (Fill Mode) для исключения добавочного заполнения. Например, запрос
«SELECT CONCAT(‘/’, TO_CHAR(‘2020-01-06 10:11:12’, ‘FMDAY’), ‘/’);» вернёт «/Monday/» вместо «/Monday /». - В утилиту mariadb-check и выражение CHECK TABLE добавлена поддержка таблиц от движка SEQUENCE.
- В оптимизатор добавлена поддержка опций (hint), влияющих на построения плана оптимизаций: 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 и [NO_]MERGE. Опции подставляются в запрос в формате, совместимом с MySQL, например:
SELECT /*+ BKA(t1) NO_BKA(t2) */ * FROM t1 INNER JOIN t2 WHERE ...; SELECT /*+ MAX_EXECUTION_TIME(1000) */ * FROM t1 INNER JOIN t2 WHERE ...;
- Повышена производительность неупорядоченных выражений «LEFT JOIN» и упорядоченного сканирования при использовании выражения «PARTITION BY RANGE«.
- В результатах трассировки оптимизатора обеспечен показ определений
таблиц и представлений. - При выполнении операций слияния таблиц (JOIN) реализована оптимизация, учитывающая уникальность строк в подзапросах с выражением «GROUP BY» для более точного прогнозирования числа результирующих строк (out_rows) и корректного применения индексов.
- Улучшена масштабируемость блокировок MDL (Metadata Lock).
- Добавлена поддержка новых функций GIS (Geographic Information System):
ST_Validate, MBRCoveredBy, ST_Simplif, ST_GeoHash, ST_LatFromGeoHash, ST_LongFromGeoHash, ST_PointFromGeoHash, ST_IsValid, ST_Collect. - Добавлена поддержка триггеров, срабатывающих для нескольких событий. В выражении CREATE TRIGGER теперь можно перечислять подпадающие под него события, используя синтаксис «{ event [ OR … ] }».
- В плагин для ведения лога аудита добавлена поддержка буферизации операции записи в лог. Размер буфера задаётся через переменную server_audit_file_buffer_size.
Реализовано сохранение в логе аудита информации о сетевых портах для входящих соединений (ранее отражался только хост). - В утилиту mariadb добавлена опция «—script-dir» для задания альтернативного каталога поиска скриптов, запускаемых командой SOURCE.
- Разрешено использование репликации в параллельном режиме при асинхронной репликации данных между двумя кластерами Galera.
- В утилиту mariadb-dump добавлена возможность указания масок (например, «database_*»), используя опцию «-L» (—wildcards).
- Убрано требование по уникальности идентификаторов внешних ключей (foreign key) в контексте всей БД (достаточно уникальности на уровне таблицы).
- Сняты ограничения на уровень вложенности структур в функциях для работы с JSON (убран лимит JSON_DEPTH_LIMIT, который ранее принимал значение 32).
- Добавлена таблица TRIGGERED_UPDATE_COLUMNS в схеме INFORMATION_SCHEMA (INFORMATION_SCHEMA.TRIGGERED_UPDATE_COLUMNS), показывающая столбцы, изменяемые при срабатывании триггера.
- В таблице PARAMETERS в схеме INFORMATION_SCHEMA реализован столбец PARAMETER_DEFAULT, содержащий значения по умолчанию параметров хранимых процедур.
- Удалены переменные big_tables, large_page_size и storage_engine, ранее объявленные устаревшими.
Источник: http://www.opennet.ru/opennews/art.shtml?num=65581
