Блог

Что нового в MySQL 8.0?

Дмитрий Ленев из Oracle кратко рассказал о новых возможностях MySQL 8.0. Вот, что запомнилось.

Версия MySQL 5.7 - стабильная ветка (на момент написания заметки 8.0 тоже стала GA) рекомендуемая для продакшена. В ветке 5.7 нет активной разработки, только исправления ошибок.

На MySQL Labs можно скачать dev-сборки будущих релизов. В них имеется новый функционал, но меньше внимания к тестированию.

Rapid плагины - часть функционала сервера, вынесенная в отдельные модули (или плагины), которые можно подключать к dev-релизам.

На текущий момент есть два плагина, доступные для 5.7:

  • X-plugin - позволяет сделать из MySQL NoSQL-хранилище
  • Group replication plugin - реализует master-master репликацию

Словарь данных.

До версии 8.0 мета-данные об объектах сервера (таблицы, процедуры и т.д.) хранились в разных местах. Определение таблиц в frm-файлах (файловая система), часть данных в myisam-таблицах (информация о пользователях, например), часть внутри InnoDb. Это приводило к ряду сложностей:

  • Медленная INFORMATION_SCHEMA
  • Конфликты мета-данных. Если сервер "упал" во время операции DDL - часть информации могла не успеть записаться в frm-файл, но записалась в innodb.
  • Очень сложно сделать атомарный и транзакционный DDL
  • Проблема с репликацией неатомарного DDL

В новом словаре все мета-данные хранятся в едином хранилище - InnoDB.

Атомарный DDL.

До версии 8.0 при удалении, например, 4-х таблиц, могло произойти так, что только часть из них удалится, а часть останется.

Аналогичная ситуация могла возникнуть при падении сервера во время DDL операций. В 8.0 это исправлено.

Работа с иерархическими данными.

Появились оконные функции и рекурсивные выражения.

Теперь построить иерархию категорий в условном интернет-магазине будет гораздо проще и удобнее.

Убывающие индексы.

До 8.0 синтаксис создания индексов поддерживал создания убывающих индексов, но на самом деле создавались обычные возрастающие индексы.

Запросы с сортировкой по двум полям в разном порядке теперь полноценно могут использовать индекс.

Невидимые индексы.

Индексы теперь можно "выключить" или сделать невидимым. Такой индекс продолжает реагировать на все DML запросы, но планировщик его не использует.

Можно использовать, например, для плавного удаления индекса. Делаем индекс невидимым, смотрим не просело ли наше приложение по скорости.

Если нет - делаем DROP для индекса, если просело - моментально "включаем" индекс и продолжаем работу.

Unicode.

Кодировка по умолчанию теперь utf8mb4 (Ура!), emoji поддерживаются из коробки.

Версия Unicode обновлена до 9.0

Роли.

Роли - именованные коллекции привилегий, которые могут наследоваться.

Упрощают администрирование и улучшают безопасность сервера.


Много полезных и интересных возможностей!