Интерпретация новых функций MySQL 8.0 в разные эпохи

Java
Интерпретация новых функций MySQL 8.0 в разные эпохи

предисловие

После 20 лет разработки MySQL стала самой популярной в мире базой данных с открытым исходным кодом.8.0Версия как связующая основная версия после версии 5.7

  • Помимо добавления больших таблиц второго уровня, какие еще функции есть?

  • Можно ли его использовать в производстве? MySQL5.7

  • Как я могу перейти на MySQL 8.0 без потерь?

История развития MySQL

MySQL, возникшая в конце прошлого века, выпускает основную версию каждые 2-3 года и продолжает «апгрейдить».

В 2008 г. MySQL была приобретена Sun за $1 млрд. В 2009 г. Oracle приобрела Sun за $7,4 млрд. Это было очень удачное приобретение!

MySQL 5.6 и MySQL 5.7 в 2013 и 2016 годах — это этапные версии со многими качественными скачками;

Выпущен в 2018 году, 3 года в разработкеMySQL8.0, и какие новые функции он принес?

Новые возможности MySQL 8.0

Добавить столбец за секунды

  • Измените только метаданные таблицы словаря данных

  • Данные таблицы sbteset1 5.7 и 8.0 составляют 3000 Вт соответственно.

# mysql8.0.18
mysql> alter table sbtest1 add str varchar(200) not null default 'mysql8.0 新加字段';
Query OK, 0 rows affected (0.13 sec)
Records: 0  Duplicates: 0  Warnings: 0

# mysql5.7.16
mysql>  alter table sbtest1 add str varchar(200) not null default 'mysql5.7 新加字段';
Query OK, 0 rows affected (6 min 8.36 sec)
Records: 0  Duplicates: 0  Warnings: 0

Вы можете видеть, что для версии 8.0 требуется только0.13秒, а для версии 5.7 требуется6分8.36秒

В прошлом добавление столбца в таблицу требовало перестроения таблицы (потребляя много ресурсов ввода-вывода и времени), но добавление столбца в версии 8.0 не требует этого шага.

Добавление столбцов на втором уровне (не указывайте позицию столбца, например, после str1), чтобы разработчикам больше не приходилось ждать, пока столбец будет добавлен посреди ночи перед выходом в сеть, а также это позволяет нашему администратору баз данных не беспокойтесь о сбое добавления столбца (конфликт первичного ключа в рабочей среде при добавлении столбца). ошибка)

повышение производительности

# mysql5.7.16
mysql> select count(*) from sbtest1;
+----------+
| count(*) |
+----------+
| 29991137 |
+----------+
1 row in set (3 min 12.24 sec)

# mysql8.0.18
mysql> select count(*) from sbtest1;
+----------+
| count(*) |
+----------+
| 30000000 |
+----------+
1 row in set (45.70 sec)

можно увидеть三千万Объем данных, версии 8.0 требуется только45.70秒, а для версии 5.7 требуется3分12.24秒

В сценариях только для обновления и только для чтения производительность версии 8.0 почти удвоилась по сравнению с версией 5.7 при высокой степени параллелизма; время отклика версии 8.0 для всего объема данных таблицы также почти в пять раз меньше.

база данных документов

  • Хранилище документов MySQL, NoSQL + SQL = MySQL

  • Многодокументные транзакции, функции ACID

  • Поддержка обновления части файла в формате JSON

Хранение документов без фиксированной структуры таблицы с динамической схемой очень нравится нашим разработчикам.

Улучшение SQL

Общие табличные выражения (CTE)

  • Сделайте операторы SQL более простыми и интуитивно понятными

    Базы данных, поддерживающие CTE, — это Teradata, DB2, Firebird, Microsoft SQL Server, Oracle, PostgreSQL (начиная с 8.4), MariaDB (начиная с 10.2), SQLite (начиная с 3.8.3), HyperSQL и H2 (экспериментальная), MySQL8.0.

  • оконная функция

    Статистика по продуктам с наибольшим объемом продаж в каждом магазине, а каждый отдел ранжирован по эффективности

  • Общие табличные выражения (CTE) и оконные функции — мощный инструмент для создания отчетов и OLAP-бизнеса.

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

Внутренний оптимизатор игнорирует указанный индекс во время выполнения SQL; проверьте влияние на производительность запроса после удаления индекса

# 不可见
Alter table t1 alter index idx_str invisible;
# 可见
Alter table t1 alter index idx_str visible;

Нисходящие индексы

Индекс хранится в обратном порядке, а предыдущие методы сохраняются по порядку, используется составной индекс с обратным и возрастающим порядком

select * from tx where c1=10 order by c2 desc,c4 asc;

Функциональные индексы

Индекс не может быть использован в условии Where и становится легендой!

select * from tx where year(date_)=2020;

Набор символов по умолчанию — utf8mb4.

  • Лучшее хранение дополнительных символов, таких как смайлики

  • Улучшение производительности закодированных символов переменной длины

Последовательные улучшения запросов (лучшее управление активными строками)

  • SKIP LOCKED

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

    select * from tx where c1=12 for update skip locked;
    Empty set (0.00 sec)
    

NOWAIT

Если запись, которую необходимо заблокировать, имеет блокировку, будет сообщено об ошибке

select * from tx where c1=12 for update nowait;
ERROR 3572 (HY000): Statement aborted because lock(s) could not be acquired immediately and NOWAIT is set.

SKIP LOCKED и NOWAIT полезны для сценариев Hot Rows, таких как захват красных конвертов, шипов и т. д.

Группы ресурсов

  • Потоки назначаются разным группам ресурсов

  • Группы ресурсов связаны с различной памятью, вводом-выводом, ЦП (в настоящее время поддерживается только)

Официальная версия мультитенантной изоляции ресурсов стала возможной для лучшего повышения производительности в различных бизнес-сценариях чтения и записи.

новый словарь данных

  • Информация о метаданных таблицы базы данных на основе innodb
  • Улучшенная защита от сбоев MySQL
  • Атомарные DDL (атомарные DDL)

В предыдущих версиях словарь данных MySQL хранился в нескольких местах, и большое количество файловых дескрипторов потреблялось, когда на одной машине было несколько экземпляров.

Версия 8.0 хранится в транзакционных таблицах InnoDB, и после ненормального зависания MySQL больше не будет повреждения таблицы; сбои операций DDL больше не оставляют занимающих много места ""临时文件"

Улучшение MGR

  • Официальное решение с высокой доступностью 99,999 % финансового уровня

  • MGR — это идеальное решение для мультиактивного бизнеса (мультиактивное приложение + мультиактивная база данных)

  • Несколько MySQL образуют группу, и данные записываются в группу.

  • 10 наборов мультимастерных кластеров 8.0 MGR онлайн

Online 8.0.18 MGR стабильно работает уже более полугода, а усовершенствование MGR значительно повысило надежность и стабильность при сетевых аномалиях (сбоях на уровне машинного зала);

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

Повышение безопасности

# SQL角色
SQL Roles      
# 原子ACL语句
Atomic ACL Statements       
# 动态特权
Dynamic Privileges          
# 防止暴力攻击
Protection Against Brute Force Attacks     
# REDO & UNDO Logs加密
REDO & UNDO Logs Encryption        
# 缓存Sa2认证插件
Caching sha2 authentication plugin     
# 密码轮询策略
Password Rotation Policy        

улучшение репликации

# binlog中额外的Metadata
Additional Metadata in the binary log      

# 高效的json复制 
Efficient JSON Replication 

# 监控复制延迟细到毫秒
Monitor Replication Lag with Microsecond Precision 

# 组复制更多的P_S
More P_S Instrumentation for Group Replication 

#默认启动了binlog
Enable binary log by default   

# 基于Writeset-based Dependency Tracking的并行应用
Improving the Parallel Applier with Writeset-based Dependency Tracking 

# 组复制白名单中支持主机名
Hostname support in Group Replication Whitelist    

клон экземпляра

  • Традиционным способом резервное копирование и восстановление добавляются к репликации master-slave.

  • Установите подключаемый модуль клонирования, авторизуйтесь и клонируйте исходный целевой экземпляр.

  • Значительно улучшает масштабируемость MySQL

Постоянство глобальных переменных

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

Версию 8.0 можно настроить напрямую и навсегда с помощью команд SQL.

  • установить команду сохранения

    Если вы установите текущую глобальную переменную, она будет сохранена в файле mysqld-auto.cnf Для этой команды требуется следующее разрешение:system_variables_admin, выполнить

  • установить команду persist_only

    Он будет сохранен только в файле mysqld-auto.cnf без установки текущей глобальной переменной, что полезно для глобальных переменных только для чтения, эта команда требует этого разрешения:persist_ro_variables_admin, выполнить

mysql> set persist_only innodb_buffer_pool_size=268435456*2;
Query OK, 0 rows affected (0.00 sec)

mysql> 
mysql> set persist innodb_buffer_pool_size=268435456*2;
Query OK, 0 rows affected (0.00 sec)

Другие особенности

  • Гистограмма оптимизатора
  • Автоинкрементное сохранение первичного ключа
  • Удалить кэш запросов
  • Улучшение ГИС
  • Резервная блокировка
  • group by больше не сортирует неявно
  • оптимизация redo_log, многопоточный буфер журнала параллельной записи

MySQL5.7 обновление 8.0

Online 8.0.18 MGR в основном обновляется с 5.7.22 MySQL in situ;

Обновите подчиненную библиотеку по очереди, переключите старую главную библиотеку онлайн на новую подчиненную библиотеку (завершено в течение 30 с), а затем обновите старую главную библиотеку.

Jia-Xin

В этой статье используетсяmdniceнабор текста