Никто и не заметил, как вышел MySQL 8.0

    Неожиданно для себя обнаружил, что 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

    Поделиться публикацией
    Комментарии 34
      –2
      Некто?
        +2
        Заголовок спойлера

        — Предположим, что у вас в кармане два яблока. Некто взял у вас одно яблоко. Сколько у вас осталось яблок?
        — Два.
        — Подумайте хорошенько.
        Буратино сморщился, — так здорово подумал.
        — Два…
        — Почему?
        — Я же не отдам некту яблоко, хоть он дерись!

        0
        Исправьте на «Никто».
        Сравнения в производительности с 5.7 на тяжелых запросах нет?
        Пакет для Убунту в репозитории случайно не добавили?
          0
          В убунтовских репозиториях — нету. В Oracle-овских — должен быть. Сами .deb-пакеты на сайте есть.
          +2

          Ну, кто-то все-таки заметил)
          Успел 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)

            0

            Странно. Я еще с год назад юзал докер-образ с восьмеркой. Думал, что она уже давно зарелизилась

              0
              GA только сейчас. До этого был RC или бета
              +1
              Выражения DDL стали атомарными и защищенными от падений, метаданные в транзакционной таблице.

              То есть в предыдущих версиях падение во время выполнения DDL может всю БД сломать?

                0
                Ну, всю не всю, но можно было поиметь проблемы с той таблицей, которую менял этот DDL. Они, насколько я понимаю, не смертельные, все можно восстановить было, но ручками. А сейчас проблем, теоретически, быть больше не должно
                  +1
                  раньше структуры таблиц хранились в myisam
                  то же самое что внутри транзакции сделать update на таблице без поддержки транзакционных механизмов
                    +1
                    Нет, раньше структуры таблиц хранились в frm файлах. Одна таблица — один файл. То есть CREATE TABLE состоял из двух этапов — 1) создать frm файл 2) создать таблицу внутри InnoDB. Если сервер падал между этими двумя этапами, сервер думал, что таблица есть, а InnoDB — что нет. Лечилось такое drop-аньем этой полу-таблицы и созданием заново.
                +4
                CTE это отнюдь не только синтаксический сахар. Главное в них — рекурсия, и это принципиально новая штука в SQL (SQL-99, если честно) позволяющая делать то, что раньше было невозможно.
                +3
                И, для полноты картины, в MariaDB CTE и оконные функции есть уже год. REGEXP_REPLACE, SQL-роли и гистограммы — четыре года. Но вот атомарных DDL, например, нет пока.
                  +1
                  Да тут многие вещи в RC болтались минимум год, если приглядеться.
                    0

                    а еще check constraint есть
                    зато в марии json фейковый.
                    и чем дальше, тем больше они (эти две субд) будут отличаться.

                      +1
                      в MariaDB json стандартный. В SQL стандарте такого типа нет.
                      Вообще тип — фигня, в MySQL просто медленный JSON парсер, и без бинарного json-а все ползало, а в MariaDB парсер побыстрей и ломать стандарт причины не было.

                      Из реально интересных штук — JSON_TABLE в 8.0. Этого в MariaDB нет. И json partial updates тоже интересная фича.
                    +2
                    Выражения DDL стали атомарными и защищенными от падений, метаданные в транзакционной таблице.
                    Из доков:
                    This means that DDL statements cannot be performed within another transaction, within transaction control statements such as START TRANSACTION… COMMIT, or combined with other statements within the same transaction.
                    Раз менять DDL внутри транзакции по-прежнему нельзя, то, получается, команду можно поздравить разве что с тем, что фундаментальная функция БД теперь работает и больше не /dev/null.

                    А есть ли какая-то информация, когда завезут поддержку CHECK вместо «парсится и молча игнорируется»?
                      0
                      Ну, судя по тому, что CHECK в MariaDB есть уже год, то, наверно, скоро :)
                      0
                      Сразу скажу, с MySQL я довольно поверхностно знаком, несмотря на долгую эксплуатацию. Вопрос к database-админам и увлеченным программерам — вроде как обещают прирост производительности до 200%. Еще не проверяли, не тестировали на всяких сценариях? И как с совместимостью веб-приложений?

                      В свое время были вдохновляющие статьи про PHP 7.0 — 1, 2, 3 с бенчмарками. Про новый MySQL бы такое увидеть.
                        0
                        Если вы знакомы поверхностно, то не стоит рассчитывать на прирост. Прироста на стандартном my.conf нету, все надо настраивать(количество потоков. индексы и так далее).
                        +1
                        Для меня самое главное в innodb таблицах наконец-то сохраняется значение максимального авто-инкремента даже при удалении записей или перезагрузках базы
                        А то до этого как не старайся настроить, всё равно в разреженной таблице база пыталась писать по уже существующим id из-за чего было много не уловимых багов
                          –2
                          А может не использовать автоинкременты? =)
                          0

                          На всякий случай рекомендую проверить пофиксили ли баг
                          https://toster.ru/q/471767

                            0
                            >>Выражения DDL стали атомарными и защищенными от падений, метаданные в транзакционной таблице.
                            Это значит что можно накатывать пачку изменений на структуру БД в одной транзакции и при ошибке все скопом отменять rollback-ом?
                              0
                              Похоже на то, но я бы не отказывался от тестового стенда в связи с этим :)
                                0
                                Нет. Это только означает, что если сервер упадёт во время DDL, то после нового старта или DDL будет доделан до конца, или полностью отменён.

                                До 8.0 могли оставаться артефакты, которые надо было убирать вручную.
                                0
                                Еще из веселого — не веселого, убрали Query Cache.
                                  0

                                  так он давно deprecated

                                  0
                                  NOWAIT and SKIP LOCKED — Запретить запросу ждать блокировку на уровне таблицы и на уровне отдельных строк, соответственно.
                                  Неудачная формулировка. Создается впечатление, что NOWAIT относится к уровню таблицы, а SKIP LOCKED — строк. Это не так.

                                  SKIP LOCKED используюется для не детерминистического чтения из таблицы с пропуском строк, заблокированых другими пользователями.
                                  NOWAIT — при наличии заблокированной строки не ждать освобождения блокировки innodb_lock_wait_timeout секунд, а сразу завершить выполнение запроса и вернуть ошибку:
                                  ERROR 3572 (HY000): Do not wait for lock.

                                  Есть хорошая статья Мартина Ханссона, перевод тут.

                                  Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                  Самое читаемое