Новые возможности базы данных MySQL 8

Команда разработчиков СУБД MySQL недавно анонсировала свой основной релиз как MySQL 8 Development Milestone Release (DMR) со значительными обновле­ниями и исправлениями проблем, которые были очень необходимы в изменени­ях больших данных.

Вам может быть интересно, почему номер версии 8 сразу после 5.7! Разве не пропущены промежуточные версии, то есть номера 6 и 7? Конечно, нет; фактиче­ски номер 6.0 был сохранен в рамках перехода к более частому и своевременному выпуску, в то время как номер 7.0 оставлен для кластерной версии MySQL.

Давайте посмотрим на некоторые интересные функциональные возможности, представленные в этой последней версии, показанные на следующей ниже схеме:

Новые  функциональные возможности MySQL 8

Самое время подробно рассмотреть функциональные возможности MySQL 8, которые вдохновляют и убеждают в необходимости крупного обновления версии MySQL.

Транзакционный словарь данных

В предыдущей версии словарь данных СУБД MySQL хранился в разных файлах метаданных и нетранзакционных таблицах, но начиная с этой версии она будет иметь транзакционный словарь данных для хранения информации о базе данных. Больше нет файлов .frm, .trg или .par. Вся информация будет храниться в базе данных, что снимает затраты на выполнение тяжелых файловых операций. Были многочисленные проблемы с хранением метаданных файловой системы, такие как уязвимость файловой системы, непомерные файловые операции, которые с трудом справляются с восстановлением после аварийного завершения работы или репликацией; было также трудно добавлять новые метаданные, связанные с каким-то функциональным средством. Теперь это обновление упрощает цент­рализованное хранение информации и повышает производительность, посколь­ку этот объект-словарь данных может кешироваться в памяти, как и другие объ­екты базы данных.

Этот словарь данных будет содержать данные, необходимые для выполнения SQL-запроса, в частности каталожную информацию, наборы символов, парамет­ры сортировки, типы столбцов, индексы, сведения о базе данных, таблицы, про­цедуры хранения, функции и триггеры и т. д.

Роли

В MySQL 8 модуль привилегий был улучшен путем введения ролей, то есть коллек­ции разрешений. Теперь мы можем создавать роли с несколькими привилегиями и назначать их нескольким пользователям.

Проблема предыдущей версии была в том, что мы не могли определять общие разрешения для группы пользователей и каждый пользователь имел индивиду­альные привилегии. Предположим, что если уже существует 1000 пользователей с общими привилегиями и вы хотите удалить разрешения на запись для всех этих 1000 пользователей, то что бы вы сделали в предыдущей версии? Вы бы предпри­няли длительный подход к обновлению каждого пользователя, не так ли? Брр... трудоемкая задача.

Теперь с MySQL 8 любое изменение привилегий легко обновляется. Роли бу­дут определять все необходимые привилегии, и эта роль будет назначена этим 1000 пользователям. Нам просто нужно внести какие-либо изменения привиле­гий в роли, и все пользователи будут автоматически наследовать соответствую­щие привилегии.

Роли можно создавать, удалять, предоставлять или отзывать разрешения, пре­доставлять или отзывать из учетной записи пользователя, а также указывать роль по умолчанию в текущем сеансе.

Автоинкремент InnoDB

СУБД MySQL 8 изменила механизм хранения значения автоинкрементного счет­чика. Ранее он хранился в памяти, что приводило к значительным сложностям в управлении во время перезапуска или сбоев сервера. Однако теперь значение автоинкрементного счетчика записывается в журнал повтора при каждом изме­нении его значения, и на каждой контрольной точке оно сохраняется в системной таблице, что делает его непрерывным при перезапуске сервера.

В предыдущей версии обновление значения автоинкрементного счетчика мог­ло вызвать ошибки дублирования при вводе. Предположим, если вы обновили значение автоинкремента в середине последовательности большим значением, чем текущее максимальное значение, тогда только последующие операции встав­ки смогут определить неиспользуемые значения, что может вызвать проблему повторяющейся записи. Это было предотвращено путем обеспечения непрерыв­ности автоинкрементного значения, поэтому последующие операции вставки могут получить новое значение и правильно его назначить.

Если происходил перезапуск сервера, то в предыдущей версии автоинкремент­ное значение терялось, поскольку оно хранилось в памяти, и InnoDB должен был выполнить запрос, чтобы узнать максимальное используемое значение. Это было изменено, поскольку более новая версия имеет возможность поддерживать его значение непрерывным во всех перезапусках сервера. Во время перезапуска сер­вера InnoDB инициализирует значение счетчика в памяти, используя максималь­ное значение, сохраненное в таблице словаря данных. В случае сбоев сервера In- noDB инициализирует значение автоинкрементного счетчика, которое больше, чем в таблице словаря данных и журнале повтора/отката.

Поддержка невидимых индексов

СУБД MySQL 8 предоставляет возможность делать индексы невидимыми. Такие индексы не могут использоваться оптимизатором. В случае, если вы хотите прове­рить производительность запросов без индексов, используя это функциональное средство, это можно выполнить, сделав их невидимыми, а не отбрасывая и повтор­но добавляя индекс. Это довольно удобное функциональное средство, когда индек­сирование должно отбрасываться и воссоздаваться на огромных наборах данных.

По умолчанию все индексы являются видимыми. Чтобы сделать их невидимы­ми или видимыми, используются ключевые слова соответственно INVISIBLE и VIS­IBLE, как описано в следующем ниже фрагменте кода:

ALTER TABLE таблица1 ALTER INDEX ix_столбца1_таблицы1 INVISIBLE; ALTER TABLE таблица1 ALTER INDEX ix_столбца1_таблицы1 VISIBLE;

Улучшение индексов, отсортированных по убыванию

Нисходящие индексы существовали и в версии 5.7, но они сканировались в об­ратном порядке, что создавало барьеры производительности. Чтобы улучшить производительность, СУБД MySQL 8 это оптимизирует и сканирует нисходящие индексы в прямом порядке, что резко улучшило производительность. Она также передает в оптимизатор многостолбцовые индексы, когда наиболее эффектив­ный порядок сканирования для некоторых столбцов возрастающий и для других столбцов убывающий.

SET PERSIST

Серверные переменные могут быть настроены глобально и динамически во вре­мя работы сервера. Существует множество системных переменных, которые мож­но установить с помощью SET GLOBAL:

SET GLOBAL max_connections = 1000;

Однако такие настройки будут потеряны после перезапуска сервера. Чтобы из­бежать этого, MySQL 8 ввел параметр SET PERSIST, который сохраняет переменные во всех перезапусках сервера:

SET PERSIST max_connections = 1000;

Расширенная поддержка ГИС

В предыдущей версии СУБД поддерживала только одну систему координат, без­размерное двумерное положение, которое не было привязано к положению на земле. Теперь СУБД MySQL 8 добавила поддержку для системы пространствен­ной привязки Spatial Reference System (SRS) с геопривязанными эллипсоидами и двумерными проекциями. SRS помогает назначать местоположению коорди­наты и устанавливает связи между наборами таких координат. Этими простран­ственными данными можно управлять в хранилище словаря данных в виде таб­лицы ST_SPATIAL_REFERENCE_SYSTEMS.

Кодировка символов по умолчанию

Кодировка символов по умолчанию была изменена с latin1 на UTF8. UTF8 являет­ся доминирующим набором символов, хотя это не было по умолчанию в преды­дущих версиях MySQL. Наряду с кодировкой символов по умолчанию, парамет­ры сортировки были изменены с latin1_swedish_ci на utf8mb4_800_ci_ai. С этими глобально принятыми изменениями наборы символов и параметры сортировки теперь основаны на UTF8; одна из распространенных причин заключается в том, что UTF8 поддерживает около 21 различных языков, что позволяет системам обе­спечивать многоязычную поддержку.

Улучшение побитовых операций

В MySQL 5.7 побитовые операции и функции работали только для типов данных Bigint (64-разрядных целых чисел). Нам нужно было передавать BIGINT в качестве аргумента, и она возвращала результат как BIGINT. Короче говоря, для выполнения операций он имел максимальный диапазон до 64 разрядов. Если пользователь хо­тел выполнить их для других типов данных, то ему нужно было выполнять преоб­разование в тип данных BIGINT. Такая типизация невозможна для типов данных, размер которых превышает 64 разряда, так как она приведет к усечению факти­ческого значения и в конечном счете к неточности в данных.

В СУБД MySQL 8 усовершенствованы побитовые операции путем включения поддержки других двоичных типов данных, таких как Binary, VarBinary и BLOB. Это позволяет выполнять побитовые операции с большей, чем 64-разрядные данные, длиной. Типизация больше не требуется! Это позволяет принимать аргументы и возвращать результаты размером более 64 разрядов.

InnoDB Memcached

Множественные операции чтения сейчас возможны с плагином InnoDB Memcached, который действительно помогает в улучшении их производительности. Те­перь множественные пары ключ-значение могут выбираться в одиночном запросе Memcached. Кроме того, был минимизирован частый коммуникационный трафик, так как мы можем получать многочисленные данные за один раз.

Плагин InnoDB Memcached также поддерживает диапазонные запросы. Это упрощает поиск по диапазону, позволяя задавать определенный диапазон и из­влекать значения в этом диапазоне.

NOWAIT и SKIP LOCKED

Когда строки блокируются другими транзакциями, к которым вы пытаетесь полу­чить доступ, вам нужно дождаться, пока эта транзакция освободит блокировку данной строки, чтобы вы могли получить к ней соответствующий доступ. Чтобы избежать ожидания другой транзакции, InnoDB добавил поддержку параметров NOWAIT и SKIP LOCKED. Параметр NOWAIT немедленно возвращается с ошибкой, в слу­чае если запрошенная строка заблокирована, а не переходит в режим ожидания, а параметр SKIP LOCKED пропускает заблокированную строку и не ждет получения блокированной строки. Следовательно, SKIP LOCKED не будет учитывать блокиро­ванную строку в результирующем наборе:

SELECT * FROM таблица1 WHERE id = 5 FOR UPDATE NOWAIT;

SELECT * FROM таблица1 FOR UPDATE SKIP LOCKED;

Вас заинтересует / Intresting for you:

MyISAM: подсистема хранения ба...
MyISAM: подсистема хранения ба... 2671 просмотров Ирина Светлова Wed, 04 Aug 2021, 19:39:29
Оператор SELECT в MySQL 8: пол...
Оператор SELECT в MySQL 8: пол... 7338 просмотров Дэйзи ак-Макарова Sat, 07 Aug 2021, 10:47:45
InnoDB: подсистема хранения ба...
InnoDB: подсистема хранения ба... 4925 просмотров Ирина Светлова Mon, 07 Jan 2019, 06:34:07
Инсталляция СУБД MySQL 8: поша...
Инсталляция СУБД MySQL 8: поша... 1325 просмотров Дэйзи ак-Макарова Wed, 04 Aug 2021, 04:09:17
Войдите чтобы комментировать

OraDevel аватар
OraDevel ответил в теме #10103 2 года 8 мес. назад
Отличный обзор отличительных особенностей и новшеств MySQL 8. Хорошо, но запоздало... Конкуренты уже преуспели.