Стабильный релиз СУБД MySQL 8.0
После двух с половиной лет разработки компания Oracle представила первый стабильный релиз СУБД MySQL 8.0. Версия 8.0 обусловлена сменой нумерации версий, релиз выпущен следом за 5.7 вместо версии 5.8. Сборки MySQL Community Server 8 сформированы для всех основных дистрибутивов Linux, FreeBSD, macOS и Windows.
Ключевые улучшения MySQL 8.0:
- Добавлен режим работы в качестве хранилища документов (Document Store), к которому можно обращаться с использованием методов NoSQL (коллекции JSON без предварительно определяемой схемы хранения). Функциональность реализована при помощи плагина mysqlxplugin;
- Добавлены оконные функции (window-функции или аналитические функции), позволяющие для каждой строки запроса выполнить вычисления, используя строки, связанные с текущей строкой. В отличие от агрегатных функций над сгруппированными строками, которые свёртывают сгруппированный набор строк в одну строку, оконные функции производят агрегирование для каждой строки в результирующем наборе. Реализованы как специальные оконные функции RANK, LAG, ROW_NUMBER, FIRST_VALUE, LEAD, LAG и NTILE, так как возможность применение некоторых агрегатных функций в форме оконных (например, COUNT, SUM, AVG, MIN, MAX);
- Поддержка рекурсивных и не рекурсивных обобщённых табличных выражений (Common Table Expression), позволяющих использовать временные именованные результирующие наборы , задаваемые при помощи оператора WITH;
- В InnoDB добавлена поддержка опций NOWAIT и SKIP LOCKED, которые можно использовать для управления поведением при наличии блокировок в момент выполнения выражений «SELECT … FOR SHARE» и «SELECT … FOR UPDATE». При указании NOWAIT управление будет возвращено сразу с выводом ошибки, если запрошенная строка заблокирована другой транзакцией, а при «SKIP LOCKED» заблокированные строки будут исключены из результирующего набора;
- Поддержка невидимых индексов (Invisible Indexes, которые никогда не используются оптимизатором. Управление видимостью индекса производится при помощи ключевых слов VISIBLE и INVISIBLE. Обычный видимый индекс может быть превращён в невидимый и наоборот. Невидимые индексы можно использовать для тестирования влияния того или иного индекса на производительность, без физического удаления данного индекса (индекс можно перевести в режим невидимого, изучить изменение производительности и вернуть обратно);
- Поддержка нисходящих индексов (descending indexes), позволяющих использовать оператор «DESC» при определении индекса для сохранения значений ключей в порядке убывания. В работе подобные индексы не требуют сканирования в обратном порядке, что значительно увеличивает эффективность работы с убывающими значениями;
- Реализована функция GROUPING (), которая позволяет отделить NULL-значения, полученные в результате агрегирования строк при группировке GROUP BY с использованием таких расширений, как ROLLUP, от NULL-значений в обычных сгруппированных строках;
- Добавлены новые подсказки для управления поведением оптимизатора (задаются внутри комментария /*+ */, указываемого сразу после ключевых слов SELECT, INSERT, REPLACE, UPDATE и DELETE): INDEX_MERGE и NO_INDEX_MERGE для управления поведением слияния индексов для отдельных запросов, JOIN_FIXED_ORDER, JOIN_ORDER, JOIN_PREFIX и JOIN_SUFFIX для управления порядком обработки таблиц при выполнении слияния, SET_VAR для установки системной переменной в контексте текущего выражения;
- Добавлены новые функции для манипуляции данными в формате JSON:
- Расширен синтаксис для определения диапазонов значений в JSON, например «SELECT JSON_EXTRACT ('[1, 2, 3, 4, 5]', '$[1 to 3]');».
- Добавлена поддержка табличных функций, позволяющих использовать SQL для данных JSON (при помощи функции JSON_TABLE () создаётся реляционного представление данных JSON).
- Добавлены агрегатные функции JSON_ARRAYAGG () для генерации массивов JSON и JSON_OBJECTAGG () для генерации объектов JSON.
- Добавлены функции слияния JSON_MERGE_PATCH () и JSON_MERGE_PRESERVE (). Добавлена функция JSON_PRETTY () для приведения блоков JSON к читаемому виду;
- Добавлена функция JSON_STORAGE_SIZE () для вычисления размера, который занимает объект JSON;
- От 1.2 до 18 раз увеличена производительность сортировки и группировки значений JSON;
- Добавлена поддержка пространственных типов данных, индексов и функций, позволяющих работать с географическими координатами и картографическими данными;
- По умолчанию задействована кодировка UTF8MB4 (ранее применялась кодировка latin1) и поддержка свойства локали «Collation», позволяющего задавать правила сортировки и методы сопоставления с учётом смысла символов. По сравнению с версией MySQL 5.7 существенно (до 20 раз) увеличена производительность сортировки данных в кодировке UTF8MB4;
- Добавлены новые функции для использования регулярных выражений REGEXP_INSTR (), REGEXP_LIKE (), REGEXP_SUBSTR () и долгожданная функция замены при помощи регулярных выражений REGEXP_REPLACE (). Кроме того, в регулярных выражениях реализована корректная работа с многобайтовыми Unicode-символами;
- Transactional Data Dictionary — новый механизм хранения системных данных, поддерживающий транзакции и реализованный в видео набора SQL-таблиц, хранимых отдельном табличном пространстве InnoDB (хранение системных данных и метаданных в MyISAM прекращено);
- Новая система ролей (именованных коллекций привилегий), позволяющая делегировать и блокировать полномочия для групп пользователей;
- Добавлена возможность переименования столбцов (ALTER TABLE … RENAME COLUMN old_name TO new_name);
- Задействован по умолчанию плагин аутентификации caching_sha2_password, использующий SHA-256 для хэширования паролей, но по сравнению с плагином sha256_password обеспечивающий более высокую производительность за счёт использования кэширования;
- Добавлена защита от атак по подбору паролей. В случае нескольких неудачных попыток аутентификации теперь между следующими попытками добавляется задержка;
- Добавлена команда «SET PERSIST», позволяющая менять значения переменных конфигурации с сохранением их между перезапусками. Также добавлена команда RESTART, позволяющая удалённо перезапустить MySQL при наличии соответствующих полномочий;
- В качестве библиотеки с реализацией TLS/SSL по умолчанию задействован OpenSSL;
- Добавлена поддержка шифрования Undo- и Redo-логов;
- Проведены различные оптимизации производительности, например, в тесте upto при 4 одновременно работающих клиентах достигнуто почти двухкратное ускорение — продемонстрирована производительность на уровне 1.8 млн запросов в секунду. Скорость запросов к таблицам Performance Schema возросла до 30 раз, а к таблицам Information Schema до 100 раз.
© OpenNet