Неожиданно для себя обнаружил, что mysql вдруг релизнулся буквально на днях (19 апреля), а статьи на хабре нет — все обсуждают сами-знаете-что.
Постараюсь перевести выжимку из "What's new". Для тех, кто следит за разработкой, тут вероятно не будет ничего или почти ничего нового, для интересующихся время от времени — может показаться интересным. Сразу скажу, что в оригинальном посте более детальный
разбор всех пунктов — тут лишь краткая выжимка со ссылочками.
- SQL Window functions — оконные функции
- Common Table Expressions — Конструкции вида ```sql
WITH
cte1 AS (SELECT a, b FROM table1),
cte2 AS (SELECT c, d FROM table2)
SELECT b, d FROM cte1 JOIN cte2
WHERE cte1.a = cte2.c;
Теперь появилась возможность проделывать трюки вида выведи мне числа фибоначчи или обойди мне дерево
- NOWAIT and SKIP LOCKED — Запретить запросу ждать блокировку на уровне таблицы и на уровне отдельных строк, соответственно.
- Descending Indexes — индексы "по убыванию"
- Grouping — функция grouping в GROUP BY конструкциях
- Regular Expressions — сделали наконец REGEXP_REPLACE
- Character Sets — позакрывали, что могли
- Cost Model — внутренности оптимизатора запросов
- Histograms — гистограммы для анализа плана выполнения запроса.
- JSON Extended syntax — новые функции, улучшенная сортировка и частичные обновления. С табличными функциями JSON можно использовать SQL выражения для данных в JSON.
- GIS Geography support — поддерживает теперь различные системы коордиат — Spatial Reference Systems (SRS), соответствующие типы данных, индексы и функции.
- Выражения DDL стали атомарными и защищенными от падений, метаданные в транзакционной таблице.
- Существенные улучшения в "наблюдаемости" системы — доработаны Performance Schema, Information Schema, Configuration Variables, и Error Logging.
- Улучшения в удаленном администрировании, работе с откатом изменений в tablespace-ах, новые элементы DDL
- Безопасность — перевели community edition на OpenSSL, добавили SQL-роли,
раздробили привелегию "SUPER" на более мелкие, - Поменяли авторизацию по-умолчанию и усилили требования к паролям.
- Улучшили производительность InnoDB на различных типах нагрузок.
- Добавили Resource Group — фича, позволяющая пользователю явно раскладывать нагрузку по ядрам.
- Починили работу булевых операций с varbinary(16) типом, что упростило работу с ipv6-адресами.
Отдельное спасибо за уточнения в комментариях — petropavel
whykeks
Некто?
staticlab
— Предположим, что у вас в кармане два яблока. Некто взял у вас одно яблоко. Сколько у вас осталось яблок?
— Два.
— Подумайте хорошенько.
Буратино сморщился, — так здорово подумал.
— Два…
— Почему?
— Я же не отдам некту яблоко, хоть он дерись!
webviktor
Исправьте на «Никто».
Сравнения в производительности с 5.7 на тяжелых запросах нет?
Пакет для Убунту в репозитории случайно не добавили?
mickvav
В убунтовских репозиториях — нету. В Oracle-овских — должен быть. Сами .deb-пакеты на сайте есть.
Gemorroj
Ну, кто-то все-таки заметил)
Успел 2 задачи сделать:
https://bugs.php.net/bug.php?id=76243 в mysql8 новый механизм аутентификации по умолчанию, запрос на поддержку в php.
https://bugs.mysql.com/bug.php?id=90529 установка в Centos из yum репозитория требует дополнительных телодвижений, чтобы корректно проинициализировались технические таблицы (схемы sys, mysql, performance_schema, information_schema)
Yeah
Странно. Я еще с год назад юзал докер-образ с восьмеркой. Думал, что она уже давно зарелизилась
petropavel
GA только сейчас. До этого был RC или бета
fRoStBiT
То есть в предыдущих версиях падение во время выполнения DDL может всю БД сломать?
petropavel
Ну, всю не всю, но можно было поиметь проблемы с той таблицей, которую менял этот DDL. Они, насколько я понимаю, не смертельные, все можно восстановить было, но ручками. А сейчас проблем, теоретически, быть больше не должно
ohifck
раньше структуры таблиц хранились в myisam
то же самое что внутри транзакции сделать update на таблице без поддержки транзакционных механизмов
petropavel
Нет, раньше структуры таблиц хранились в frm файлах. Одна таблица — один файл. То есть CREATE TABLE состоял из двух этапов — 1) создать frm файл 2) создать таблицу внутри InnoDB. Если сервер падал между этими двумя этапами, сервер думал, что таблица есть, а InnoDB — что нет. Лечилось такое drop-аньем этой полу-таблицы и созданием заново.
petropavel
CTE это отнюдь не только синтаксический сахар. Главное в них — рекурсия, и это принципиально новая штука в SQL (SQL-99, если честно) позволяющая делать то, что раньше было невозможно.
mickvav
А можете дать ссылочку на какой-нибудь красивый пример, я в статью вставлю :)
petropavel
В документации есть примеры. Например, в dev.mysql.com/doc/refman/8.0/en/with.html#common-table-expressions-recursive есть примеры на генерацию последовательностей (числа фибоначчи, все даты от… и до...) и на проход дерева (таблица employees с отношениями начальник-подчиненный).
А в mariadb.com/kb/en/library/recursive-common-table-expressions-overview есть пример на граф — нахождение всех маршрутов (с пересадками) из Нью-Йорка до Роли
petropavel
Есть и более экзотические примеры (a.k.a. ненормальное программирование):
* Решатель судоку
* Интерпретатор Brainfuck
С добавлением рекурсивных CTE, SQL стал полным по Тьюрингу
mickvav
Я так понимаю, CTE в других SQL-ях уже давно, это для MySQL — «наконец-то».
kalininmr
ага. очень иногда нехватает.
хотя бы ради деревьев
petropavel
И, для полноты картины, в MariaDB CTE и оконные функции есть уже год. REGEXP_REPLACE, SQL-роли и гистограммы — четыре года. Но вот атомарных DDL, например, нет пока.
mickvav
Да тут многие вещи в RC болтались минимум год, если приглядеться.
Gemorroj
а еще check constraint есть
зато в марии json фейковый.
и чем дальше, тем больше они (эти две субд) будут отличаться.
petropavel
в MariaDB json стандартный. В SQL стандарте такого типа нет.
Вообще тип — фигня, в MySQL просто медленный JSON парсер, и без бинарного json-а все ползало, а в MariaDB парсер побыстрей и ломать стандарт причины не было.
Из реально интересных штук — JSON_TABLE в 8.0. Этого в MariaDB нет. И json partial updates тоже интересная фича.
elmigranto
/dev/null
.А есть ли какая-то информация, когда завезут поддержку
CHECK
вместо «парсится и молча игнорируется»?petropavel
Ну, судя по тому, что CHECK в MariaDB есть уже год, то, наверно, скоро :)
mtp
Сразу скажу, с MySQL я довольно поверхностно знаком, несмотря на долгую эксплуатацию. Вопрос к database-админам и увлеченным программерам — вроде как обещают прирост производительности до 200%. Еще не проверяли, не тестировали на всяких сценариях? И как с совместимостью веб-приложений?
В свое время были вдохновляющие статьи про PHP 7.0 — 1, 2, 3 с бенчмарками. Про новый MySQL бы такое увидеть.
arheops
Если вы знакомы поверхностно, то не стоит рассчитывать на прирост. Прироста на стандартном my.conf нету, все надо настраивать(количество потоков. индексы и так далее).
Shannon
Для меня самое главное в innodb таблицах наконец-то сохраняется значение максимального авто-инкремента даже при удалении записей или перезагрузках базы
А то до этого как не старайся настроить, всё равно в разреженной таблице база пыталась писать по уже существующим id из-за чего было много не уловимых багов
oxidmod
А может не использовать автоинкременты? =)
coalesce
На всякий случай рекомендую проверить пофиксили ли баг
https://toster.ru/q/471767
Introducer
>>Выражения DDL стали атомарными и защищенными от падений, метаданные в транзакционной таблице.
Это значит что можно накатывать пачку изменений на структуру БД в одной транзакции и при ошибке все скопом отменять rollback-ом?
mickvav Автор
Похоже на то, но я бы не отказывался от тестового стенда в связи с этим :)
petropavel
Нет. Это только означает, что если сервер упадёт во время DDL, то после нового старта или DDL будет доделан до конца, или полностью отменён.
До 8.0 могли оставаться артефакты, которые надо было убирать вручную.