Компания Oracle създаде нова версия на СУБД MySQL 9.1.0. Сборките на MySQL Community Server 9.1.0 са подготвени за всички основни дистрибуции на Linux, FreeBSD, macOS и Windows. В рамките на новата моделна структура за издаване, въведена миналата година, MySQL 9.1 попада в категориите „Innovation“, в които ще бъде включен и следващият значителен релиз MySQL 9.2. Иновационните версии са препоръчителни за тези, които искат по-ранен достъп до новата функционалност, издават се на всеки 3 месеца и се поддържат само до публикуването на следващия значителен релиз (например, след появата на версия 9.1 поддръжката на версия 9.0 спира). През лятото на следващата година е планирано създаване на LTS-релиз, препоръчителен за внедрения, нуждаещи се от предсказуемост и дълготрайно запазване на неизменността на поведението. След LTS-версията ще бъде създадена нова иновационна линия — MySQL 10.0.
Основни промени в MySQL 9.1:
- Към операцията „CREATE VIEW“ е добавена поддръжка на израза „IF NOT EXISTS“, който позволява създаването на изглед само ако изглед с посоченото име все още не съществува и избягва връщането на грешка, ако изгледът вече е създаден.
- Съществуването на тригери е спрянo при изпълнението на операции, свързани само с четене. По-рано тригерите се зареждаха при всякакъв достъп до таблицата, което водеше до разход на памет и създаване на натоварване на процесора в ситуации, когато тригерите не се използваха (например, при изпълнение на SELECT заявки). В MySQL 9.1 обработката и зареждането на тригери е разделено на два етапа: четене на метаданни за тригера и парсване + изпълнение на тригера. Данните, получени на първия етап, се запазват еднократно и след това се използват съвместно в различни инстанции на тригера. Парсването и изпълнението на тригера се извършва само за изрази, които водят до промяна на данните. Освен това, за намаляване на консумацията на памет, вместо статично разпределение на буфери за обработка на грешки в тригерите, е извършен преход към динамично разпределение на памет, когато е необходимо.
- Изходът на операцията „EXPLAIN“ е разширен, новата информация показва детайли за прилагането на многодиапазонно четене (multi-range) и стратегия на полуобединение (semijoin), при което при JOIN операции се обработват редове само от едната таблица.
- Гарантирано атомарно изпълнение на операциите „CREATE DATABASE“ и „DROP DATABASE“ за защита от сривове при аварийно завършване или възникване на грешки на ниво файловата система по време на изпълнението на тези операции. Например, преди при аварийно завършване на „CREATE DATABASE“ можеше да бъде създадена непълна некоректна структура на базата данни, чиято почистване изискваше ръчна намеса.
- В написаните на JavaScript хранимите процедури е осигурена поддръжка на типа VECTOR. Данни с указан този тип сега могат да бъдат предавани в входни и връщащи параметри.
- Добавена е възможност за удостоверяване при свързване към СУБД с използване на протокола OpenID Connect.
- Премахнати са 27 уязвимости, най-сериозната от които (CVE-2024-5535) е присвоена критичен ниво на опасност (9.1 от 10). Уязвимостта може да бъде експлоатирана от разстояние без преминаване на удостоверяване. Проблемът е предизвикан от четене на данни извън определената памет в библиотеката OpenSSL и води до аварийно завършване или изтичане на съдържанието на паметта в отговора след свързване с сървър с указание на некоректни параметри на протокола.
Източник: opennet.ru
