Представен е выпуск на СУБД 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“.
- Скоростта на векторното търсене с използване на типа VECTOR, прилаган в системите за машинно обучение, е увеличена с 30-50%. Ускорението се постига благодарение на оптимизацията на изчисленията при търсене на сходство между вектори в многомерни пространства и реализация на нова техника за екстраполация на базата на вложени векторни представяния (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 …;
ИЗБЕРЕТЕ /*+ MAX_EXECUTION_TIME(1000) */ * ОТ t1 ВЪТРЕШНО СЛЕПЯВАНЕ t2 WHERE …; - Подобрена производителност при неупорядочени изрази „LEFT JOIN“ и при упорядочено сканиране с израза „PARTITION BY RANGE“.
- В резултатите от трасировката на оптимизатора е предоставен показ на определенията
на таблици и изгледи. - При изпълнение на операции за сливане на таблици (JOIN) е реализирана оптимизация, която отчита уникалността на редовете в подзаявките с израз „GROUP BY“ за по-точно прогнозиране на броя на резултатните редове (out_rows) и коректно приложение на индексите.
- Подобрена мащабируемост на блокировките MDL (Metadata Lock).
- Добавена поддръжка на нови GIS функции (Географска информационна система):
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, които преди това бяха обявени за остарели.
Източник: opennet.ru
