SlideShare a Scribd company logo
1 of 114
Download to read offline
Что нового в
MySQL 8.0?
Дмитрий Ленев, Oracle/MySQL
Москва, Июнь 2017
Safe Harbor Statement
The following is intended to outline our general product
direction. It is intended for information purposes only, and
may not be incorporated into any contract. It is not a
commitment to deliver any material, code, or functionality,
and should not be relied upon in making purchasing
decisions. The development, release and timing of any
features or functionality described for Oracle's products
remains at the sole discretion of Oracle.
Актуальные версии MySQL
● 5.7 - cтабильная ветка
– Свежая версия - 5.7.18 (2017-04-10)
– Доступны на dev.mysql.com/downloads/mysql/
● 8.0 – активная разработка
– Development Milestone Release - 8.0.1 (2017-04-10)
– Доступны там же
● MySQL Labs версии
– 8.0.1 + unified data-dictionary (2017-04-21)
– Доступны на labs.mysql.com/
● Rapid плагины
– X (с 5.7.12), Group Replication (с 5.7.17)
– Распространяются вместе со стабильными или DMR версиями
Актуальные версии MySQL
● 5.7 - cтабильная ветка
– Свежая версия - 5.7.18 (2017-04-10)
– Доступны на dev.mysql.com/downloads/mysql/
● 8.0 – активная разработка
– Development Milestone Release - 8.0.1 (2017-04-10)
– Доступны там же
● MySQL Labs версии
– 8.0.1 + unified data-dictionary (2017-04-21)
– Доступны на labs.mysql.com/
● Rapid плагины
– X (с 5.7.12), Group Replication (с 5.7.17)
– Распространяются вместе со стабильными или DMR версиями
Актуальные версии MySQL
● 5.7 - cтабильная ветка
– Свежая версия - 5.7.18 (2017-04-10)
– Доступны на dev.mysql.com/downloads/mysql/
● 8.0 – активная разработка
– Development Milestone Release - 8.0.1 (2017-04-10)
– Доступны там же
● MySQL Labs версии
– 8.0.1 + unified data-dictionary (2017-04-21)
– Доступны на labs.mysql.com/
● Rapid плагины
– X (с 5.7.12), Group Replication (с 5.7.17)
– Распространяются вместе со стабильными или DMR версиями
Актуальные версии MySQL
● 5.7 - cтабильная ветка
– Свежая версия - 5.7.18 (2017-04-10)
– Доступны на dev.mysql.com/downloads/mysql/
● 8.0 – активная разработка
– Development Milestone Release - 8.0.1 (2017-04-10)
– Доступны там же
● MySQL Labs версии
– 8.0.1 + unified data-dictionary (2017-04-21)
– Доступны на labs.mysql.com/
● Rapid плагины
– X (с 5.7.12), Group Replication (с 5.7.17)
– Распространяются вместе со стабильными или DMR версиями
MySQL 8.0 с высоты птичьего полета
● Новый словарь данных и поддержка атомарного DDL
● Табличные выражения (CTE), оконные функции
● Убывающие и невидимые индексы
● Улучшения в поддержке Unicode
● Гибкая работа с блокировками (SKIP LOCKED/NO WAIT)
● Роли, улучшения в системе привилегий
● Улучшения в репликации
Словарь данных до 8.0:
Метаданные хранятся в разных местах
Словарь данных
Файлы
FRM TRG OPT
Таблицы (mysql.*)
user procevents
Таблицы (innodb.sys)
MyISAM
File
system
InnoDB
S
Q
L
Словарь данных до 8.0:
Проблемы
● INFORMATION_SCHEMA медленная
● Конфликты из-за нетранзакционного хранения МД
● Конфликты между МД в InnoDB и в ядре сервера
● Трудно реализовать атомарный и транзакционный DDL
● Проблемы с репликацией неатомарного DDL
● Сложно расширять
Словарь данных до 8.0:
Проблемы
● INFORMATION_SCHEMA медленная
● Конфликты из-за нетранзакционного хранения МД
● Конфликты между МД в InnoDB и в ядре сервера
● Трудно реализовать атомарный и транзакционный DDL
● Проблемы с репликацией неатомарного DDL
● Сложно расширять
Словарь данных до 8.0:
Проблемы
● INFORMATION_SCHEMA медленная
● Конфликты из-за нетранзакционного хранения МД
● Конфликты между МД в InnoDB и в ядре сервера
● Трудно реализовать атомарный и транзакционный DDL
● Проблемы с репликацией неатомарного DDL
● Сложно расширять
Словарь данных до 8.0:
Проблемы
● INFORMATION_SCHEMA медленная
● Конфликты из-за нетранзакционного хранения МД
● Конфликты между МД в InnoDB и в ядре сервера
● Трудно реализовать атомарный и транзакционный DDL
● Проблемы с репликацией неатомарного DDL
● Сложно расширять
Словарь данных до 8.0:
Проблемы
● INFORMATION_SCHEMA медленная
● Конфликты из-за нетранзакционного хранения МД
● Конфликты между МД в InnoDB и в ядре сервера
● Трудно реализовать атомарный и транзакционный DDL
● Проблемы с репликацией неатомарного DDL
● Сложно расширять
Словарь данных до 8.0:
Проблемы
● INFORMATION_SCHEMA медленная
● Конфликты из-за нетранзакционного хранения МД
● Конфликты между МД в InnoDB и в ядре сервера
● Трудно реализовать атомарный и транзакционный DDL
● Проблемы с репликацией неатомарного DDL
● Сложно расширять
Словарь данных до 8.0:
Проблемы
● INFORMATION_SCHEMA медленная
● Конфликты из-за нетранзакционного хранения МД
● Конфликты между МД в InnoDB и в ядре сервера
● Трудно реализовать атомарный и транзакционный DDL
● Проблемы с репликацией неатомарного DDL
● Сложно расширять
Новый словарь данных
● Единое хранилище для всех метаданных – таблицы
– Транзакционность
– INFORMATION_SCHEMA – просто представления
● Единое API для ядра сервера, SE и плагинов
● Единообразное API для разных объектов
● Расширяемость
– Продуман upgrade
– Поддержка плагинов
● Поддержка disaster recovery (SDI)
Новый словарь данных
● Единое хранилище для всех метаданных – таблицы
– Транзакционность
– INFORMATION_SCHEMA – просто представления
● Единое API для ядра сервера, SE и плагинов
● Единообразное API для разных объектов
● Расширяемость
– Продуман upgrade
– Поддержка плагинов
● Поддержка disaster recovery (SDI)
Новый словарь данных
● Единое хранилище для всех метаданных – таблицы
– Транзакционность
– INFORMATION_SCHEMA – просто представления
● Единое API для ядра сервера, SE и плагинов
● Единообразное API для разных объектов
● Расширяемость
– Продуман upgrade
– Поддержка плагинов
● Поддержка disaster recovery (SDI)
Новый словарь данных
● Единое хранилище для всех метаданных – таблицы
– Транзакционность
– INFORMATION_SCHEMA – просто представления
● Единое API для ядра сервера, SE и плагинов
● Единообразное API для разных объектов
● Расширяемость
– Продуман upgrade
– Поддержка плагинов
● Поддержка disaster recovery (SDI)
Новый словарь данных
● Единое хранилище для всех метаданных – таблицы
– Транзакционность
– INFORMATION_SCHEMA – просто представления
● Единое API для ядра сервера, SE и плагинов
● Единообразное API для разных объектов
● Расширяемость
– Продуман upgrade
– Поддержка плагинов
● Поддержка disaster recovery (SDI)
Новый словарь данных
● Единое хранилище для всех метаданных – таблицы
– Транзакционность
– INFORMATION_SCHEMA – просто представления
● Единое API для ядра сервера, SE и плагинов
● Единообразное API для разных объектов
● Расширяемость
– Продуман upgrade
– Поддержка плагинов
● Поддержка disaster recovery (SDI)
INFORMATION_SCHEMA в 5.7
Клиент
Запрос к I_S Результаты
Сервер MySQL
.
ФС / MyISAM
/ InnoDB SE
INFORMATION_SCHEMA в 5.7
Клиент
Запрос к I_S Результаты
Сервер MySQL
Создание временной
таблицы
.
Временная
таблица
ФС / MyISAM
/ InnoDB SE
INFORMATION_SCHEMA в 5.7
Клиент
Запрос к I_S Результаты
Сервер MySQL
Создание временной
таблицы
.
Временная
таблица
ФС / MyISAM
/ InnoDB SE
Оптимизатор готовит
план запроса.
INFORMATION_SCHEMA в 5.7
Клиент
Запрос к I_S Результаты
Сервер MySQL
Создание временной
таблицы
.
Временная
таблица
ФС / MyISAM
/ InnoDB SE
Оптимизатор готовит
план запроса.
План выполняется, заполняются временные таблицы,
читаются строки из временных таблиц.
INFORMATION_SCHEMA в 5.7
Клиент
Запрос к I_S Результаты
Сервер MySQL
Создание временной
таблицы
Эвристики
Чтение метаданных с ФС или MyISAM/
InnoDB.
.
Временная
таблица
ФС / MyISAM
/ InnoDB SE
Оптимизатор готовит
план запроса.
План выполняется, заполняются временные таблицы,
читаются строки из временных таблиц.
INFORMATION_SCHEMA в 5.7
Клиент
Запрос к I_S Результаты
Сервер MySQL
Создание временной
таблицы
Эвристики
Чтение метаданных с ФС или MyISAM/
InnoDB.
.
Временная
таблица
ФС / MyISAM
/ InnoDB SE
Оптимизатор готовит
план запроса.
План выполняется, заполняются временные таблицы,
читаются строки из временных таблиц.
INFORMATION_SCHEMA в 5.7
Клиент
Запрос к I_S Результаты
Сервер MySQL
Создание временной
таблицы
Эвристики
Чтение метаданных с ФС или MyISAM/
InnoDB.
.
Временная
таблица
Возвращаем строки
пользователю.
ФС / MyISAM
/ InnoDB SE
Оптимизатор готовит
план запроса.
План выполняется, заполняются временные таблицы,
читаются строки из временных таблиц.
INFORMATION_SCHEMA в 5.7
Клиент
Запрос к I_S Результаты
Сервер MySQL
Создание временной
таблицы
Эвристики
Чтение метаданных с ФС или MyISAM/
InnoDB.
.
Временная
таблица
Возвращаем строки
пользователю.
ФС / MyISAM
/ InnoDB SE
Оптимизатор готовит
план запроса.
План выполняется, заполняются временные таблицы,
читаются строки из временных таблиц.
INFORMATION_SCHEMA в 8.0
Клиент
Запрос к I_S Результаты
Сервер MySQL
.
InnoDB SE
INFORMATION_SCHEMA в 8.0
Клиент
Запрос к I_S Результаты
Сервер MySQL
.
InnoDB SE
Оптимизатор готовит
план запроса.
INFORMATION_SCHEMA в 8.0
Клиент
Запрос к I_S Результаты
Сервер MySQL
.
InnoDB SE
Оптимизатор готовит
план запроса.
План выполняется,
читаются строки из таблиц СД.
INFORMATION_SCHEMA в 8.0
Клиент
Запрос к I_S Результаты
Сервер MySQL
.
Возвращаем строки
пользователю.
InnoDB SE
Оптимизатор готовит
план запроса.
План выполняется,
читаются строки из таблиц СД.
Время выполнения запросов к
INFORMATION_SCHEMA в 8.0
(секунды, 100 БД по 50 таблиц)
Schema aggregate size stats
All Dynamic Table Info
All Static Table Info
Auto Increments Near Limit
Count All Columns
Count All Indexes
0 1 2 3 4
MySQL 8.0
MySQL 5.7
Атомарный DDL
● Семантика все или ничего при ошибках
– Лучше соотвествует ожиданиям пользователей
– Проще реплицировать
● Согласованность информации при падении сервера
– Словарь данных
– SE
– Binary log
● Нужна поддержка в SE (InnoDB, NDB)
В разработке
Атомарный DDL
● Семантика все или ничего при ошибках
– Лучше соотвествует ожиданиям пользователей
– Проще реплицировать
● Согласованность информации при падении сервера
– Словарь данных
– SE
– Binary log
● Нужна поддержка в SE (InnoDB, NDB)
В разработке
Атомарный DDL
● Семантика все или ничего при ошибках
– Лучше соотвествует ожиданиям пользователей
– Проще реплицировать
● Согласованность информации при падении сервера
– Словарь данных
– SE
– Binary log
● Нужна поддержка в SE (InnoDB, NDB)
В разработке
Атомарный DDL
● Семантика все или ничего при ошибках
– Лучше соотвествует ожиданиям пользователей
– Проще реплицировать
● Согласованность информации при падении сервера
– Словарь данных
– SE
– Binary log
● Нужна поддержка в SE (InnoDB, NDB)
В разработке
Работа с иерархическими данными до 8.0:
Модель списка соседей
Проблемы:
● Проблемы с высотой дерева
● Приходится писать процедуры
1 : Alice
2 : Bob 3 : Colin
4 : Dag 5 : Eve
1 1
2 2
ID NAME MANAGER_ID
1 Alice NULL
2 Bob 1
3 Colin 1
4 Dag 2
5 Eve 2
Работа с иерархическими данными до 8.0:
Модель списка соседей
Проблемы:
● Проблемы с высотой дерева
● Приходится писать процедуры
1 : Alice
2 : Bob 3 : Colin
4 : Dag 5 : Eve
1 1
2 2
ID NAME MANAGER_ID
1 Alice NULL
2 Bob 1
3 Colin 1
4 Dag 2
5 Eve 2
Работа с иерархическими данными до 8.0:
Модель вложенных множеств
Проблемы:
● Нетривиальная реализация
● Сложные вставка и удаление
Electronics
TVs Consoles
LCD Plasma
1
8
3
7
NAME LFT RGT
Electronics 1 10
TVs 2 7
Consoles 8 9
LCD 3 4
Plasma 5 6
4
2
5 6
9
10
Работа с иерархическими данными до 8.0:
Модель вложенных множеств
Проблемы:
● Нетривиальная реализация
● Сложные вставка и удаление
Electronics
TVs Consoles
LCD Plasma
1
8
3
7
NAME LFT RGT
Electronics 1 10
TVs 2 7
Consoles 8 9
LCD 3 4
Plasma 5 6
4
2
5 6
9
10
Работа с иерархическими данными в 8.0:
Рекурсивные табличные выражения
WITH RECURSIVE employee_levels (id, name, level) AS
(
SELECT id, name, 0
FROM employees
WHERE manager_id IS NULL
UNION ALL
SELECT e.id, e.name, el.level + 1
FROM employee_levels AS el JOIN employees AS e
ON el.id = e.manager_id
)
SELECT * FROM employee_leves ORDER BY level;
Работа с иерархическими данными в 8.0:
Рекурсивные табличные выражения
WITH RECURSIVE employee_levels (id, name, level) AS
(
SELECT id, name, 0
FROM employees
WHERE manager_id IS NULL
UNION ALL
SELECT e.id, e.name, el.level + 1
FROM employee_levels AS el JOIN employees AS e
ON el.id = e.manager_id
)
SELECT * FROM employee_levels ORDER BY level;
Работа с иерархическими данными в 8.0:
Рекурсивные табличные выражения
WITH RECURSIVE employee_levels (id, name, level) AS
(
SELECT id, name, 0
FROM employees
WHERE manager_id IS NULL
UNION ALL
SELECT e.id, e.name, el.level + 1
FROM employee_levels AS el JOIN employees AS e
ON el.id = e.manager_id
)
SELECT * FROM employee_levels ORDER BY level;
Работа с иерархическими данными в 8.0:
Рекурсивные табличные выражения
WITH RECURSIVE employee_levels (id, name, level) AS
(
SELECT id, name, 0
FROM employees
WHERE manager_id IS NULL
UNION ALL
SELECT e.id, e.name, el.level + 1
FROM employee_levels AS el JOIN employees AS e
ON el.id = e.manager_id
)
SELECT * FROM employee_levels ORDER BY level;
Работа с иерархическими данными в 8.0:
Рекурсивные табличные выражения
WITH RECURSIVE employee_levels (id, name, level) AS
(
SELECT id, name, 0
FROM employees
WHERE manager_id IS NULL
UNION ALL
SELECT e.id, e.name, el.level + 1
FROM employee_levels AS el JOIN employees AS e
ON el.id = e.manager_id
)
SELECT * FROM employee_levels ORDER BY level;
Табличные выражения: не только рекурсия!
SELECT s.name, r.total_revenue FROM supplier AS s, revenue0 AS r
WHERE s.id = r.supplier_id AND
r.total_revenue = (SELECT MAX(total_revenue) FROM revenue0)
ORDER BY s.name;
Табличные выражения: не только рекурсия!
SELECT s.name, r.total_revenue FROM supplier AS s, revenue0 AS r
WHERE s.id = r.supplier_id AND
r.total_revenue = (SELECT MAX(total_revenue) FROM revenue0)
ORDER BY s.name;
CREATE VIEW revenue0 AS
SELECT supplier_id,
SUM(item_price * items) AS total_revenue
FROM orders
WHERE …
GROUP BY supplier_id;
Табличные выражения: не только рекурсия!
SELECT s.name, r.total_revenue FROM supplier AS s, revenue0 AS r
WHERE s.id = r.supplier_id AND
r.total_revenue = (SELECT MAX(total_revenue) FROM revenue0)
ORDER BY s.name;
WITH revenue0(supplier_id , total_revenue) AS (
SELECT supplier_id, SUM(item_price * items) FROM orders
...
GROUP BY supplier_id )
SELECT s.name, r.total_revenue FROM supplier AS s, revenue0 AS r
WHERE s.id = r.supplier_id AND
r.total_revenue = (SELECT MAX(total_revenue) FROM revenue0)
ORDER BY s.name;
Табличные выражения: не только рекурсия!
SELECT s.name, r.total_revenue FROM supplier AS s, revenue0 AS r
WHERE s.id = r.supplier_id AND
r.total_revenue = (SELECT MAX(total_revenue) FROM revenue0)
ORDER BY s.name;
WITH revenue0(supplier_id , total_revenue) AS (
SELECT supplier_id, SUM(item_price * items) FROM orders
...
GROUP BY supplier_id )
SELECT s.name, r.total_revenue FROM supplier AS s, revenue0 AS r
WHERE s.id = r.supplier_id AND
r.total_revenue = (SELECT MAX(total_revenue) FROM revenue0)
ORDER BY s.name;
Оконные функции
Проблема:
● До версии 8.0 сложно и иногда невозможно считать
агрегатные функции от группы из текущей и связанных
с нею строк (окна) без группировки всех строк в
группе.
Решение:
● Оконные функции
Оконные функции
Проблема:
● До версии 8.0 сложно и иногда невозможно считать
агрегатные функции от группы из текущей и связанных
с нею строк (окна) без группировки всех строк в
группе.
Решение:
● Оконные функции
Оконные функции: пример
SELECT e.name, d.name AS dep_name, salary,
RANK() OVER (PARTITION BY d.id ORDER BY salary DESC) rank_in_dep
FROM employees e, departments d
WHERE e.department = d.id ORDER BY e.name;
NAME DEP_NAME SALARY RANK_IN_DEP
Alice B 50000 1
Donald A 20000 2
Ingrid B 40000 2
Mary A 15000 3
Sebastian B 40000 2
William A 30000 1
В разработке
Оконные функции: пример
SELECT e.name, d.name AS dep_name, salary,
RANK() OVER (PARTITION BY d.id ORDER BY salary DESC) rank_in_dep
FROM employees e, departments d
WHERE e.department = d.id ORDER BY e.name;
NAME DEP_NAME SALARY RANK_IN_DEP
Alice B 50000 1
Donald A 20000 2
Ingrid B 40000 2
Mary A 15000 3
Sebastian B 40000 2
William A 30000 1
В разработке
Оконные функции: пример
SELECT e.name, d.name AS dep_name, salary,
RANK() OVER (PARTITION BY d.id ORDER BY salary DESC) rank_in_dep
FROM employees e, departments d
WHERE e.department = d.id ORDER BY e.name;
NAME DEP_NAME SALARY RANK_IN_DEP
Alice B 50000 1
Donald A 20000 2
Ingrid B 40000 2
Mary A 15000 3
Sebastian B 40000 2
William A 30000 1
В разработке
Убывающие индексы до 8.0
● Поддержка синтаксиса
● Создается обычный возрастающий индекс
● Проблемы:
– Сканирование в обратном порядке дороже
– Нельзя использовать индекс когда нужно разное
направление обхода по разным колонкам индекса
Убывающие индексы до 8.0
● Поддержка синтаксиса
● Создается обычный возрастающий индекс
● Проблемы:
– Сканирование в обратном порядке дороже
– Нельзя использовать индекс когда нужно разное
направление обхода по разным колонкам индекса
Убывающие индексы в 8.0
● Поддерживаются InnoDB
● Оптимизатор умеет их правильно использовать
– Есть ограничения на оптимизации
CREATE TABLE t (c1 INT, c2 INT,
INDEX idx1 (c1 ASC, c2 DESC));
SELECT … ORDER BY c1 ASC, c2 DESC; # без filesort
Убывающие индексы в 8.0
● Поддерживаются InnoDB
● Оптимизатор умеет их правильно использовать
– Есть ограничения на оптимизации
CREATE TABLE t (c1 INT, c2 INT,
INDEX idx1 (c1 ASC, c2 DESC));
SELECT … ORDER BY c1 ASC, c2 DESC; # без filesort
Невидимые индексы
Что это такое ?
● Невидимы для оптимизатора
● Но обновляются DML (сравните с DISABLED индексами)
Нужно для:
● “Удаление” индексов с мгновенным восстановлением
● Пошаговое добавление индексов
Невидимые индексы
Что это такое ?
● Невидимы для оптимизатора
● Но обновляются DML (сравните с DISABLED индексами)
Нужно для:
● “Удаление” индексов с мгновенным восстановлением
● Пошаговое добавление индексов
Невидимые индексы: пример
● Думаем что индекс не используется:
ALTER TABLE country ALTER INDEX c INVISIBLE;
● Ошиблись! Быстро возвращаем индекс назад:
ALTER TABLE country ALTER INDEX c VISIBLE;
● Все верно. Можно удалить индекс:
ALTER TABLE country DROP INDEX c;
Невидимые индексы: пример
● Думаем что индекс не используется:
ALTER TABLE country ALTER INDEX c INVISIBLE;
● Ошиблись! Быстро возвращаем индекс назад:
ALTER TABLE country ALTER INDEX c VISIBLE;
● Все верно. Можно удалить индекс:
ALTER TABLE country DROP INDEX c;
Невидимые индексы: пример
● Думаем что индекс не используется:
ALTER TABLE country ALTER INDEX c INVISIBLE;
● Ошиблись! Быстро возвращаем индекс назад:
ALTER TABLE country ALTER INDEX c VISIBLE;
● Все верно. Можно удалить индекс:
ALTER TABLE country DROP INDEX c;
Unicode
● Utf8mb4 – по умолчанию в 8.0!
● Поддержка Unicode 9.0
● Новые accent-sensitive и case-sensitive collation
● Collation специфичные для различных языков
– В том числе для японского!
● Оптимизация производительности utf8mb4
– Самой реализации
– Сортировки ключей переменной длины
Unicode
● Utf8mb4 – по умолчанию в 8.0!
● Поддержка Unicode 9.0
● Новые accent-sensitive и case-sensitive collation
● Collation специфичные для различных языков
– В том числе для японского!
● Оптимизация производительности utf8mb4
– Самой реализации
– Сортировки ключей переменной длины
Unicode
● Utf8mb4 – по умолчанию в 8.0!
● Поддержка Unicode 9.0
● Новые accent-sensitive и case-sensitive collation
● Collation специфичные для различных языков
– В том числе для японского!
● Оптимизация производительности utf8mb4
– Самой реализации
– Сортировки ключей переменной длины
Unicode
● Utf8mb4 – по умолчанию в 8.0!
● Поддержка Unicode 9.0
● Новые accent-sensitive и case-sensitive collation
● Collation специфичные для различных языков
– В том числе для японского!
● Оптимизация производительности utf8mb4
– Самой реализации
– Сортировки ключей переменной длины
Unicode
● Utf8mb4 – по умолчанию в 8.0!
● Поддержка Unicode 9.0
● Новые accent-sensitive и case-sensitive collation
● Collation специфичные для различных языков
– В том числе для японского!
● Оптимизация производительности utf8mb4
– Самой реализации
– Сортировки ключей переменной длины
Unicode
● Utf8mb4 – по умолчанию в 8.0!
● Поддержка Unicode 9.0
● Новые accent-sensitive и case-sensitive collation
● Collation специфичные для различных языков
– В том числе для японского!
● Оптимизация производительности utf8mb4
– Самой реализации
– Сортировки ключей переменной длины
Оптимизация utf8mb4: 8.0 vs 5.7
8 16 64 128 512 1024
0
10000
20000
30000
40000
+300-350% в OLTP RO
Оптимизация utf8mb4: 8.0 vs 5.7
8 16 64 128 512 1024
0
10000
20000
30000
40000
8 16 64 128 512 1024
0
7500
15000
22500
30000
+300-350% в OLTP RO
+176-233% в OLTP RW
Оптимизация utf8mb4: 8.0 vs 5.7
8 16 64 128 512 1024
0
10000
20000
30000
40000
8 16 64 128 512 1024
0
7500
15000
22500
30000
+300-350% в OLTP RO
+176-233% в OLTP RW
+1500-1800% в SELECT_DISTINCT_RANGES
8 16 64 128 512 1024
0
45000
90000
135000
180000
Гибкая работа с блокировками
Проблема:
Хочется пропускать заблокированные строки:
– Выборка из таблицы заданий
– Резервирование ресурса
Решение:
SELECT … FOR UPDATE SKIP LOCKED;
Гибкая работа с блокировками
Проблема:
Хочется пропускать заблокированные строки:
– Выборка из таблицы заданий
– Резервирование ресурса
Решение:
SELECT … FOR UPDATE SKIP LOCKED;
Гибкая работа с блокировками
Проблема:
Хочется пропускать заблокированные строки:
– Выборка из таблицы заданий
– Резервирование ресурса
Решение:
SELECT … FOR UPDATE SKIP LOCKED;
Гибкая работа с блокировками (детали)
● SKIP LOCKED – пропустить заблокированные строки
● Используется совместно с:
– FOR UPDATE
– FOR SHARE (замена LOCK IN SHARE MODE)
● FOR UPDATE OF <table_name> SKIP LOCKED
● NOWAIT – выдать ошибку вместо ожидания
Гибкая работа с блокировками (детали)
● SKIP LOCKED – пропустить заблокированные строки
● Используется совместно с:
– FOR UPDATE
– FOR SHARE (замена LOCK IN SHARE MODE)
● FOR UPDATE OF <table_name> SKIP LOCKED
● NOWAIT – выдать ошибку вместо ожидания
Гибкая работа с блокировками (детали)
● SKIP LOCKED – пропустить заблокированные строки
● Используется совместно с:
– FOR UPDATE
– FOR SHARE (замена LOCK IN SHARE MODE)
● FOR UPDATE OF <table_name> SKIP LOCKED
● NOWAIT – выдать ошибку вместо ожидания
Гибкая работа с блокировками (детали)
● SKIP LOCKED – пропустить заблокированные строки
● Используется совместно с:
– FOR UPDATE
– FOR SHARE (замена LOCK IN SHARE MODE)
● FOR UPDATE OF <table_name> SKIP LOCKED
● NOWAIT – выдать ошибку вместо ожидания
Роли
● Именованные коллекции привилегий
– Могут включать другие роли
● Упрощают управление привилегиями пользователей
– Проще структура привилегий
– Легко добавлять и отбирать привилегии
● Можно активировать/деактивировать для сессии
● Можно назначить несколько активных ролей по умолчанию
● ROLES_GRAPHML()
Роли
● Именованные коллекции привилегий
– Могут включать другие роли
● Упрощают управление привилегиями пользователей
– Проще структура привилегий
– Легко добавлять и отбирать привилегии
● Можно активировать/деактивировать для сессии
● Можно назначить несколько активных ролей по умолчанию
● ROLES_GRAPHML()
Роли
● Именованные коллекции привилегий
– Могут включать другие роли
● Упрощают управление привилегиями пользователей
– Проще структура привилегий
– Легко добавлять и отбирать привилегии
● Можно активировать/деактивировать для сессии
● Можно назначить несколько активных ролей по умолчанию
● ROLES_GRAPHML()
Роли
● Именованные коллекции привилегий
– Могут включать другие роли
● Упрощают управление привилегиями пользователей
– Проще структура привилегий
– Легко добавлять и отбирать привилегии
● Можно активировать/деактивировать для сессии
● Можно назначить несколько активных ролей по умолчанию
● ROLES_GRAPHML()
Роли
● Именованные коллекции привилегий
– Могут включать другие роли
● Упрощают управление привилегиями пользователей
– Проще структура привилегий
– Легко добавлять и отбирать привилегии
● Можно активировать/деактивировать для сессии
● Можно назначить несколько активных ролей по умолчанию
● ROLES_GRAPHML()
Роли
● Именованные коллекции привилегий
– Могут включать другие роли
● Упрощают управление привилегиями пользователей
– Проще структура привилегий
– Легко добавлять и отбирать привилегии
● Можно активировать/деактивировать для сессии
● Можно назначить несколько активных ролей по умолчанию
● ROLES_GRAPHML()
Роли: пример
CREATE ROLE 'dev', 'reader';
GRANT ALL ON db.* TO 'dev';
GRANT SELECT ON db.* TO 'reader';
GRANT 'dev' TO 'alice'@'localhost';
GRANT 'reader' TO 'alice'@'localhost';
GRANT 'reader' TO 'bob'@'localhost';
SET ROLE 'dev';
SET DEFAULT ROLE ALL TO 'alice'@'localhost';
Роли: пример
CREATE ROLE 'dev', 'reader';
GRANT ALL ON db.* TO 'dev';
GRANT SELECT ON db.* TO 'reader';
GRANT 'dev' TO 'alice'@'localhost';
GRANT 'reader' TO 'alice'@'localhost';
GRANT 'reader' TO 'bob'@'localhost';
SET ROLE 'dev';
SET DEFAULT ROLE ALL TO 'alice'@'localhost';
Роли: пример
CREATE ROLE 'dev', 'reader';
GRANT ALL ON db.* TO 'dev';
GRANT SELECT ON db.* TO 'reader';
GRANT 'dev' TO 'alice'@'localhost';
GRANT 'reader' TO 'alice'@'localhost';
GRANT 'reader' TO 'bob'@'localhost';
SET ROLE 'dev';
SET DEFAULT ROLE ALL TO 'alice'@'localhost';
Роли: пример
CREATE ROLE 'dev', 'reader';
GRANT ALL ON db.* TO 'dev';
GRANT SELECT ON db.* TO 'reader';
GRANT 'dev' TO 'alice'@'localhost';
GRANT 'reader' TO 'alice'@'localhost';
GRANT 'reader' TO 'bob'@'localhost';
SET ROLE 'dev';
SET DEFAULT ROLE ALL TO 'alice'@'localhost';
Роли: пример
CREATE ROLE 'dev', 'reader';
GRANT ALL ON db.* TO 'dev';
GRANT SELECT ON db.* TO 'reader';
GRANT 'dev' TO 'alice'@'localhost';
GRANT 'reader' TO 'alice'@'localhost';
GRANT 'reader' TO 'bob'@'localhost';
SET ROLE 'dev';
SET DEFAULT ROLE ALL TO 'alice'@'localhost';
Динамические привилегии
Проблема: SUPER привилегия перегружена
Решение: Динамические привилегии
● Глобального уровня
● Замена SUPER:
AUDIT_ADMIN, BINLOG_ADMIN, CONNECTION_ADMIN,
ENCRYPTION_KEY_ADMIN, FIREWALL_ADMIN,...
● Изначально привилегии добавляемые плагинами
Динамические привилегии
Проблема: SUPER привилегия перегружена
Решение: Динамические привилегии
● Глобального уровня
● Замена SUPER:
AUDIT_ADMIN, BINLOG_ADMIN, CONNECTION_ADMIN,
ENCRYPTION_KEY_ADMIN, FIREWALL_ADMIN,...
● Изначально привилегии добавляемые плагинами
Динамические привилегии
Проблема: SUPER привилегия перегружена
Решение: Динамические привилегии
● Глобального уровня
● Замена SUPER:
AUDIT_ADMIN, BINLOG_ADMIN, CONNECTION_ADMIN,
ENCRYPTION_KEY_ADMIN, FIREWALL_ADMIN,...
● Изначально привилегии добавляемые плагинами
Динамические привилегии
Проблема: SUPER привилегия перегружена
Решение: Динамические привилегии
● Глобального уровня
● Замена SUPER:
AUDIT_ADMIN, BINLOG_ADMIN, CONNECTION_ADMIN,
ENCRYPTION_KEY_ADMIN, FIREWALL_ADMIN,...
● Изначально привилегии добавляемые плагинами
Репликация: оптимизация взаимодействия
между I/O и SQL потоками
Проблема:
Репликация отстает или неэффективна
Решение:
Вынести запись и чтение в/из relay log из критических секций
Меньше держим блокировки
Потоки ждут доступа к relay log меньше
Выше производительность
Репликация: оптимизация взаимодействия
между I/O и SQL потоками
Проблема:
Репликация отстает или неэффективна
Решение:
Вынести запись и чтение в/из relay log из критических секций
Меньше держим блокировки
Потоки ждут доступа к relay log меньше
Выше производительность
Репликация: оптимизация взаимодействия
между I/O и SQL потоками
Проблема:
Репликация отстает или неэффективна
Решение:
Вынести запись и чтение в/из relay log из критических секций
Меньше держим блокировки
Потоки ждут доступа к relay log меньше
Выше производительность
Результаты оптимизации взаимодействия между I/O и
SQL потоками
(Sysbench Update Indexed: применение транзакций/сек на реплике, RBR)
16 потоков 64 потоков
0
5000
10000
15000
20000
25000
30000
35000
40000
45000
MySQL 8.0.0 MySQL 8.0.1
Durable настройки для binlog
Результаты оптимизации взаимодействия между I/O и
SQL потоками
(Sysbench Update Indexed: применение транзакций/сек на реплике, RBR)
16 потоков 64 потоков 16 потоков 64 потоков
0
5000
10000
15000
20000
25000
30000
35000
40000
45000
MySQL 8.0.0 MySQL 8.0.1
Durable настройки для binlog Non-durable настройки для binlog
Репликация: параллелизм
на основе использования write-set
Проблема:
● Репликация отстает или неэффективна
● Параллельная репликация на основе логических временных меток не
помогает
– Малое число или одно соединение на мастере
– Сложная топология приводит к потере параллелизма
Решение:
● Использовать параллелизм на основе write-set транзакций
Репликация: параллелизм
на основе использования write-set
Проблема:
● Репликация отстает или неэффективна
● Параллельная репликация на основе логических временных меток не
помогает
– Малое число или одно соединение на мастере
– Сложная топология приводит к потере параллелизма
Решение:
● Использовать параллелизм на основе write-set транзакций
Репликация: параллелизм
на основе использования write-set
Проблема:
● Репликация отстает или неэффективна
● Параллельная репликация на основе логических временных меток не
помогает
– Малое число или одно соединение на мастере
– Сложная топология приводит к потере параллелизма
Решение:
● Использовать параллелизм на основе write-set транзакций
Репликация: параллелизм
на основе использования write-set
● Write-set транзакции – множество строк измененных
транзакцией
● Write-set – средство обнаружить завимости
● Транзакции с непересекающимися write-set можно применять
паралелльно
● Параллелизм на основе write-set расширяет механизм на
основе логических временных меток
● Зависимости определяются на мастере и выражаются при
помощи логических временных меток в binary log
Репликация: параллелизм
на основе использования write-set
● Write-set транзакции – множество строк измененных
транзакцией
● Write-set – средство обнаружить завимости
● Транзакции с непересекающимися write-set можно применять
паралелльно
● Параллелизм на основе write-set расширяет механизм на
основе логических временных меток
● Зависимости определяются на мастере и выражаются при
помощи логических временных меток в binary log
Репликация: параллелизм
на основе использования write-set
● Write-set транзакции – множество строк измененных
транзакцией
● Write-set – средство обнаружить завимости
● Транзакции с непересекающимися write-set можно применять
паралелльно
● Параллелизм на основе write-set расширяет механизм на
основе логических временных меток
● Зависимости определяются на мастере и выражаются при
помощи логических временных меток в binary log
Репликация: параллелизм
на основе использования write-set
● Write-set транзакции – множество строк измененных
транзакцией
● Write-set – средство обнаружить завимости
● Транзакции с непересекающимися write-set можно применять
паралелльно
● Параллелизм на основе write-set расширяет механизм на
основе логических временных меток
● Зависимости определяются на мастере и выражаются при
помощи логических временных меток в binary log
Репликация: параллелизм
на основе использования write-set
● Write-set транзакции – множество строк измененных
транзакцией
● Write-set – средство обнаружить завимости
● Транзакции с непересекающимися write-set можно применять
паралелльно
● Параллелизм на основе write-set расширяет механизм на
основе логических временных меток
● Зависимости определяются на мастере и выражаются при
помощи логических временных меток в binary log
Параллельная репликация до версии 8.0:
на основе логических временных меток
1 n n+1 n+2 n+3 n+4
T1T1
Session
A
Session
A
T2T2
Session
B
Session
B
T3T3
Session
B
Session
B
T4T4
Session
A
Session
A
T5T5
Session
C
Session
C
T6T6
Session
C
Session
C
T7T7
Session
C
Session
C
T8T8
Session
B
Session
B
Время
Множествострок
Параллельная репликация начиная с 8.0:
на основе использования write-set
n n+1 n+2 n+3 n+4
T1T1
Session
A
Session
A
T2T2
Session
B
Session
B
T3T3
Session
B
Session
B
T4T4
Session
A
Session
A
T5T5
Session
C
Session
C
T6T6
Session
C
Session
C
T7T7
Session
C
Session
C
T8T8
Session
B
Session
B
Время
Множествострок
1
Write-set история
Параллельная репликация с использованием write-set с
сохранением порядка транзакций в сессии
1 n n+1 n+2 n+3 n+4
T1T1
Session
A
Session
A
T2T2
Session
B
Session
B
T3T3
Session
B
Session
B
T4T4
Session
A
Session
A
T5T5
Session
C
Session
C
T6T6
Session
C
Session
C
T7T7
Session
C
Session
C
T8T8
Session
B
Session
B
Время
Множествострок
Write set история
Результаты использования write-set параллелизма:
(Sysbench Update Indexed: применение транзакций/сек на реплике)
1 2 4 8 16 32 64 128 256
0
5000
10000
15000
20000
25000
30000
35000
40000
45000
50000
COMMIT_ORDER WRITESET WRITESET_SESSION
Количество клиентов на мастере
Спасибо!

More Related Content

What's hot

LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (...
LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (...LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (...
LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (...Ontico
 
Семантическое ядро рунета - высоконагруженная сontent-based рекомендательная ...
Семантическое ядро рунета - высоконагруженная сontent-based рекомендательная ...Семантическое ядро рунета - высоконагруженная сontent-based рекомендательная ...
Семантическое ядро рунета - высоконагруженная сontent-based рекомендательная ...Ontico
 
NewSQL: SQL никуда не уходит / Константин Осипов (tarantool.org)
NewSQL: SQL никуда не уходит / Константин Осипов (tarantool.org)NewSQL: SQL никуда не уходит / Константин Осипов (tarantool.org)
NewSQL: SQL никуда не уходит / Константин Осипов (tarantool.org)Ontico
 
Эффективная отладка репликации MySQL / Света Смирнова (Percona)
Эффективная отладка репликации MySQL / Света Смирнова (Percona)Эффективная отладка репликации MySQL / Света Смирнова (Percona)
Эффективная отладка репликации MySQL / Света Смирнова (Percona)Ontico
 
Стратегия и тактика улучшения производительности BSS систем оператора мобильн...
Стратегия и тактика улучшения производительности BSS систем оператора мобильн...Стратегия и тактика улучшения производительности BSS систем оператора мобильн...
Стратегия и тактика улучшения производительности BSS систем оператора мобильн...Ontico
 
NodeJS в HighLoad проекте / Акрицкий Владимир (iAge Engineering)
NodeJS в HighLoad проекте / Акрицкий Владимир (iAge Engineering)NodeJS в HighLoad проекте / Акрицкий Владимир (iAge Engineering)
NodeJS в HighLoad проекте / Акрицкий Владимир (iAge Engineering)Ontico
 
Сергей Аверин "Распространенные ошибки применения баз данных"
Сергей Аверин "Распространенные ошибки применения баз данных"Сергей Аверин "Распространенные ошибки применения баз данных"
Сергей Аверин "Распространенные ошибки применения баз данных"Tanya Denisyuk
 
"Производительность MySQL: что нового?"
"Производительность MySQL: что нового?""Производительность MySQL: что нового?"
"Производительность MySQL: что нового?"Badoo Development
 
smart balancing with nginx+lua / Андрей Кононов (IPONWEB)
smart balancing with nginx+lua / Андрей Кононов (IPONWEB)smart balancing with nginx+lua / Андрей Кононов (IPONWEB)
smart balancing with nginx+lua / Андрей Кононов (IPONWEB)Ontico
 
Настройка и оптимизация высоконагруженных J2EE веб-приложений / Шамим Ахмед (...
Настройка и оптимизация высоконагруженных J2EE веб-приложений / Шамим Ахмед (...Настройка и оптимизация высоконагруженных J2EE веб-приложений / Шамим Ахмед (...
Настройка и оптимизация высоконагруженных J2EE веб-приложений / Шамим Ахмед (...Ontico
 
Архитектура HAWQ / Алексей Грищенко (Pivotal)
Архитектура HAWQ / Алексей Грищенко (Pivotal)Архитектура HAWQ / Алексей Грищенко (Pivotal)
Архитектура HAWQ / Алексей Грищенко (Pivotal)Ontico
 
"Новые возможности MySQL 5.7"
"Новые возможности MySQL 5.7""Новые возможности MySQL 5.7"
"Новые возможности MySQL 5.7"Badoo Development
 
Миф об очень сложном Highload / Александр Горный (Mail.Ru Group)
Миф об очень сложном Highload / Александр Горный (Mail.Ru Group)Миф об очень сложном Highload / Александр Горный (Mail.Ru Group)
Миф об очень сложном Highload / Александр Горный (Mail.Ru Group)Ontico
 
Брокер сообщений Kafka в условиях повышенной нагрузки / Артём Выборнов (Rambl...
Брокер сообщений Kafka в условиях повышенной нагрузки / Артём Выборнов (Rambl...Брокер сообщений Kafka в условиях повышенной нагрузки / Артём Выборнов (Rambl...
Брокер сообщений Kafka в условиях повышенной нагрузки / Артём Выборнов (Rambl...Ontico
 
Хайлоад и безопасность в мире DevOps: совместимы ли? / Юрий Колесов (security...
Хайлоад и безопасность в мире DevOps: совместимы ли? / Юрий Колесов (security...Хайлоад и безопасность в мире DevOps: совместимы ли? / Юрий Колесов (security...
Хайлоад и безопасность в мире DevOps: совместимы ли? / Юрий Колесов (security...Ontico
 
Как SRE следит за стабильностью и скоростью HeadHunter / Антон Иванов (HeadHu...
Как SRE следит за стабильностью и скоростью HeadHunter / Антон Иванов (HeadHu...Как SRE следит за стабильностью и скоростью HeadHunter / Антон Иванов (HeadHu...
Как SRE следит за стабильностью и скоростью HeadHunter / Антон Иванов (HeadHu...Ontico
 
Всему своё время / Роман Ивлиев (Банки.ру)
Всему своё время / Роман Ивлиев (Банки.ру)Всему своё время / Роман Ивлиев (Банки.ру)
Всему своё время / Роман Ивлиев (Банки.ру)Ontico
 
MySQL: чек-лист для новичка в highload (Cвета Cмирнова, Aнастасия Распопина ...
MySQL:  чек-лист для новичка в highload (Cвета Cмирнова, Aнастасия Распопина ...MySQL:  чек-лист для новичка в highload (Cвета Cмирнова, Aнастасия Распопина ...
MySQL: чек-лист для новичка в highload (Cвета Cмирнова, Aнастасия Распопина ...Anastasia Rostova
 

What's hot (18)

LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (...
LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (...LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (...
LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (...
 
Семантическое ядро рунета - высоконагруженная сontent-based рекомендательная ...
Семантическое ядро рунета - высоконагруженная сontent-based рекомендательная ...Семантическое ядро рунета - высоконагруженная сontent-based рекомендательная ...
Семантическое ядро рунета - высоконагруженная сontent-based рекомендательная ...
 
NewSQL: SQL никуда не уходит / Константин Осипов (tarantool.org)
NewSQL: SQL никуда не уходит / Константин Осипов (tarantool.org)NewSQL: SQL никуда не уходит / Константин Осипов (tarantool.org)
NewSQL: SQL никуда не уходит / Константин Осипов (tarantool.org)
 
Эффективная отладка репликации MySQL / Света Смирнова (Percona)
Эффективная отладка репликации MySQL / Света Смирнова (Percona)Эффективная отладка репликации MySQL / Света Смирнова (Percona)
Эффективная отладка репликации MySQL / Света Смирнова (Percona)
 
Стратегия и тактика улучшения производительности BSS систем оператора мобильн...
Стратегия и тактика улучшения производительности BSS систем оператора мобильн...Стратегия и тактика улучшения производительности BSS систем оператора мобильн...
Стратегия и тактика улучшения производительности BSS систем оператора мобильн...
 
NodeJS в HighLoad проекте / Акрицкий Владимир (iAge Engineering)
NodeJS в HighLoad проекте / Акрицкий Владимир (iAge Engineering)NodeJS в HighLoad проекте / Акрицкий Владимир (iAge Engineering)
NodeJS в HighLoad проекте / Акрицкий Владимир (iAge Engineering)
 
Сергей Аверин "Распространенные ошибки применения баз данных"
Сергей Аверин "Распространенные ошибки применения баз данных"Сергей Аверин "Распространенные ошибки применения баз данных"
Сергей Аверин "Распространенные ошибки применения баз данных"
 
"Производительность MySQL: что нового?"
"Производительность MySQL: что нового?""Производительность MySQL: что нового?"
"Производительность MySQL: что нового?"
 
smart balancing with nginx+lua / Андрей Кононов (IPONWEB)
smart balancing with nginx+lua / Андрей Кононов (IPONWEB)smart balancing with nginx+lua / Андрей Кононов (IPONWEB)
smart balancing with nginx+lua / Андрей Кононов (IPONWEB)
 
Настройка и оптимизация высоконагруженных J2EE веб-приложений / Шамим Ахмед (...
Настройка и оптимизация высоконагруженных J2EE веб-приложений / Шамим Ахмед (...Настройка и оптимизация высоконагруженных J2EE веб-приложений / Шамим Ахмед (...
Настройка и оптимизация высоконагруженных J2EE веб-приложений / Шамим Ахмед (...
 
Архитектура HAWQ / Алексей Грищенко (Pivotal)
Архитектура HAWQ / Алексей Грищенко (Pivotal)Архитектура HAWQ / Алексей Грищенко (Pivotal)
Архитектура HAWQ / Алексей Грищенко (Pivotal)
 
"Новые возможности MySQL 5.7"
"Новые возможности MySQL 5.7""Новые возможности MySQL 5.7"
"Новые возможности MySQL 5.7"
 
Миф об очень сложном Highload / Александр Горный (Mail.Ru Group)
Миф об очень сложном Highload / Александр Горный (Mail.Ru Group)Миф об очень сложном Highload / Александр Горный (Mail.Ru Group)
Миф об очень сложном Highload / Александр Горный (Mail.Ru Group)
 
Брокер сообщений Kafka в условиях повышенной нагрузки / Артём Выборнов (Rambl...
Брокер сообщений Kafka в условиях повышенной нагрузки / Артём Выборнов (Rambl...Брокер сообщений Kafka в условиях повышенной нагрузки / Артём Выборнов (Rambl...
Брокер сообщений Kafka в условиях повышенной нагрузки / Артём Выборнов (Rambl...
 
Хайлоад и безопасность в мире DevOps: совместимы ли? / Юрий Колесов (security...
Хайлоад и безопасность в мире DevOps: совместимы ли? / Юрий Колесов (security...Хайлоад и безопасность в мире DevOps: совместимы ли? / Юрий Колесов (security...
Хайлоад и безопасность в мире DevOps: совместимы ли? / Юрий Колесов (security...
 
Как SRE следит за стабильностью и скоростью HeadHunter / Антон Иванов (HeadHu...
Как SRE следит за стабильностью и скоростью HeadHunter / Антон Иванов (HeadHu...Как SRE следит за стабильностью и скоростью HeadHunter / Антон Иванов (HeadHu...
Как SRE следит за стабильностью и скоростью HeadHunter / Антон Иванов (HeadHu...
 
Всему своё время / Роман Ивлиев (Банки.ру)
Всему своё время / Роман Ивлиев (Банки.ру)Всему своё время / Роман Ивлиев (Банки.ру)
Всему своё время / Роман Ивлиев (Банки.ру)
 
MySQL: чек-лист для новичка в highload (Cвета Cмирнова, Aнастасия Распопина ...
MySQL:  чек-лист для новичка в highload (Cвета Cмирнова, Aнастасия Распопина ...MySQL:  чек-лист для новичка в highload (Cвета Cмирнова, Aнастасия Распопина ...
MySQL: чек-лист для новичка в highload (Cвета Cмирнова, Aнастасия Распопина ...
 

Similar to Что нового в MySQL 8.0? / Дмитрий Ленев (Oracle)

Решения Dell для защиты данных и оптимизации ресурсов хранения
Решения Dell для защиты данных и оптимизации ресурсов храненияРешения Dell для защиты данных и оптимизации ресурсов хранения
Решения Dell для защиты данных и оптимизации ресурсов храненияDell_Russia
 
MySQL InnoDB Cluster
MySQL InnoDB ClusterMySQL InnoDB Cluster
MySQL InnoDB ClusterVittorio Cioe
 
Презентация Защита данных от Dell Software: краткий обзор и планы развития ...
Презентация Защита данных от Dell Software:  краткий обзор и планы  развития ...Презентация Защита данных от Dell Software:  краткий обзор и планы  развития ...
Презентация Защита данных от Dell Software: краткий обзор и планы развития ...Marina Gryshko
 
Защита данных от Dell Software: краткий обзор и планы развития продуктов
Защита данных от Dell Software: краткий обзор и планы  развития продуктов   Защита данных от Dell Software: краткий обзор и планы  развития продуктов
Защита данных от Dell Software: краткий обзор и планы развития продуктов BAKOTECH
 
Проверено и работает. Инструменты Oracle для разработки веб приложений
Проверено и работает. Инструменты Oracle для разработки веб приложенийПроверено и работает. Инструменты Oracle для разработки веб приложений
Проверено и работает. Инструменты Oracle для разработки веб приложенийMedia Gorod
 
Fors и big data appliance
Fors и big data applianceFors и big data appliance
Fors и big data applianceCleverDATA
 
Модели OPEN SOURCE компаний и можно ли выжить без OPEN CORE и ENTERPRISE EDITION
Модели OPEN SOURCE компаний и можно ли выжить без OPEN CORE и ENTERPRISE EDITIONМодели OPEN SOURCE компаний и можно ли выжить без OPEN CORE и ENTERPRISE EDITION
Модели OPEN SOURCE компаний и можно ли выжить без OPEN CORE и ENTERPRISE EDITIONUP2IT
 
Модернизация хранилища данных для использования передовой аналитики
Модернизация хранилища данных для использования передовой аналитикиМодернизация хранилища данных для использования передовой аналитики
Модернизация хранилища данных для использования передовой аналитикиElizaveta Alekseeva
 
Перепись приложения. Нативного. На JS. Done. | Odessa Frontend Meetup #10
Перепись приложения. Нативного. На JS. Done. | Odessa Frontend Meetup #10Перепись приложения. Нативного. На JS. Done. | Odessa Frontend Meetup #10
Перепись приложения. Нативного. На JS. Done. | Odessa Frontend Meetup #10OdessaFrontend
 
СХД DEPO Storage 4600 для консолидации данных в современной IT-инфраструктуре
СХД DEPO Storage 4600 для консолидации данных в современной IT-инфраструктуреСХД DEPO Storage 4600 для консолидации данных в современной IT-инфраструктуре
СХД DEPO Storage 4600 для консолидации данных в современной IT-инфраструктуреDEPO Computers
 
Решения DEPO Computers для консолидации данных и серверной виртуализации на б...
Решения DEPO Computers для консолидации данных и серверной виртуализации на б...Решения DEPO Computers для консолидации данных и серверной виртуализации на б...
Решения DEPO Computers для консолидации данных и серверной виртуализации на б...DEPO Computers
 
Сценарии перехода в облако. Сравнительный анализ
Сценарии перехода в облако. Сравнительный анализСценарии перехода в облако. Сравнительный анализ
Сценарии перехода в облако. Сравнительный анализpcweek_ua
 
Модернизация хранилища данных для использования передовой аналитики
Модернизация хранилища данных для использования передовой аналитикиМодернизация хранилища данных для использования передовой аналитики
Модернизация хранилища данных для использования передовой аналитикиYuri Yashkin
 
Embarcadero All-Access
Embarcadero All-AccessEmbarcadero All-Access
Embarcadero All-AccessSerghei Urban
 
Новости и анонсы Oracle Open World 2014
Новости и анонсы Oracle Open World 2014Новости и анонсы Oracle Open World 2014
Новости и анонсы Oracle Open World 2014Andrey Akulov
 
#ITsubbotnik Spring 2017: Sergey Chernolyas "JPA for NoSQL"
#ITsubbotnik Spring 2017: Sergey Chernolyas "JPA for NoSQL"#ITsubbotnik Spring 2017: Sergey Chernolyas "JPA for NoSQL"
#ITsubbotnik Spring 2017: Sergey Chernolyas "JPA for NoSQL"epamspb
 
инструментарий
инструментарийинструментарий
инструментарийigdweb
 
Инфраструктура Big data - от источников до быстрых витрин - версия для МИСиС
Инфраструктура Big data - от источников до быстрых витрин - версия для МИСиСИнфраструктура Big data - от источников до быстрых витрин - версия для МИСиС
Инфраструктура Big data - от источников до быстрых витрин - версия для МИСиСYury Petrov
 

Similar to Что нового в MySQL 8.0? / Дмитрий Ленев (Oracle) (20)

Решения Dell для защиты данных и оптимизации ресурсов хранения
Решения Dell для защиты данных и оптимизации ресурсов храненияРешения Dell для защиты данных и оптимизации ресурсов хранения
Решения Dell для защиты данных и оптимизации ресурсов хранения
 
MySQL InnoDB Cluster
MySQL InnoDB ClusterMySQL InnoDB Cluster
MySQL InnoDB Cluster
 
Презентация Защита данных от Dell Software: краткий обзор и планы развития ...
Презентация Защита данных от Dell Software:  краткий обзор и планы  развития ...Презентация Защита данных от Dell Software:  краткий обзор и планы  развития ...
Презентация Защита данных от Dell Software: краткий обзор и планы развития ...
 
Защита данных от Dell Software: краткий обзор и планы развития продуктов
Защита данных от Dell Software: краткий обзор и планы  развития продуктов   Защита данных от Dell Software: краткий обзор и планы  развития продуктов
Защита данных от Dell Software: краткий обзор и планы развития продуктов
 
Проверено и работает. Инструменты Oracle для разработки веб приложений
Проверено и работает. Инструменты Oracle для разработки веб приложенийПроверено и работает. Инструменты Oracle для разработки веб приложений
Проверено и работает. Инструменты Oracle для разработки веб приложений
 
Fors и big data appliance
Fors и big data applianceFors и big data appliance
Fors и big data appliance
 
MySQL NDB Cluster
MySQL NDB ClusterMySQL NDB Cluster
MySQL NDB Cluster
 
Модели OPEN SOURCE компаний и можно ли выжить без OPEN CORE и ENTERPRISE EDITION
Модели OPEN SOURCE компаний и можно ли выжить без OPEN CORE и ENTERPRISE EDITIONМодели OPEN SOURCE компаний и можно ли выжить без OPEN CORE и ENTERPRISE EDITION
Модели OPEN SOURCE компаний и можно ли выжить без OPEN CORE и ENTERPRISE EDITION
 
Модернизация хранилища данных для использования передовой аналитики
Модернизация хранилища данных для использования передовой аналитикиМодернизация хранилища данных для использования передовой аналитики
Модернизация хранилища данных для использования передовой аналитики
 
Перепись приложения. Нативного. На JS. Done. | Odessa Frontend Meetup #10
Перепись приложения. Нативного. На JS. Done. | Odessa Frontend Meetup #10Перепись приложения. Нативного. На JS. Done. | Odessa Frontend Meetup #10
Перепись приложения. Нативного. На JS. Done. | Odessa Frontend Meetup #10
 
СХД DEPO Storage 4600 для консолидации данных в современной IT-инфраструктуре
СХД DEPO Storage 4600 для консолидации данных в современной IT-инфраструктуреСХД DEPO Storage 4600 для консолидации данных в современной IT-инфраструктуре
СХД DEPO Storage 4600 для консолидации данных в современной IT-инфраструктуре
 
Решения DEPO Computers для консолидации данных и серверной виртуализации на б...
Решения DEPO Computers для консолидации данных и серверной виртуализации на б...Решения DEPO Computers для консолидации данных и серверной виртуализации на б...
Решения DEPO Computers для консолидации данных и серверной виртуализации на б...
 
Сценарии перехода в облако. Сравнительный анализ
Сценарии перехода в облако. Сравнительный анализСценарии перехода в облако. Сравнительный анализ
Сценарии перехода в облако. Сравнительный анализ
 
Модернизация хранилища данных для использования передовой аналитики
Модернизация хранилища данных для использования передовой аналитикиМодернизация хранилища данных для использования передовой аналитики
Модернизация хранилища данных для использования передовой аналитики
 
Embarcadero All-Access
Embarcadero All-AccessEmbarcadero All-Access
Embarcadero All-Access
 
Новости и анонсы Oracle Open World 2014
Новости и анонсы Oracle Open World 2014Новости и анонсы Oracle Open World 2014
Новости и анонсы Oracle Open World 2014
 
Breaking logs
Breaking logsBreaking logs
Breaking logs
 
#ITsubbotnik Spring 2017: Sergey Chernolyas "JPA for NoSQL"
#ITsubbotnik Spring 2017: Sergey Chernolyas "JPA for NoSQL"#ITsubbotnik Spring 2017: Sergey Chernolyas "JPA for NoSQL"
#ITsubbotnik Spring 2017: Sergey Chernolyas "JPA for NoSQL"
 
инструментарий
инструментарийинструментарий
инструментарий
 
Инфраструктура Big data - от источников до быстрых витрин - версия для МИСиС
Инфраструктура Big data - от источников до быстрых витрин - версия для МИСиСИнфраструктура Big data - от источников до быстрых витрин - версия для МИСиС
Инфраструктура Big data - от источников до быстрых витрин - версия для МИСиС
 

More from Ontico

One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...Ontico
 
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)Ontico
 
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)Ontico
 
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...Ontico
 
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...Ontico
 
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)Ontico
 
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...Ontico
 
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...Ontico
 
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)Ontico
 
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)Ontico
 
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...Ontico
 
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...Ontico
 
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...Ontico
 
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)Ontico
 
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)Ontico
 
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)Ontico
 
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Ontico
 
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...Ontico
 
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...Ontico
 
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...Ontico
 

More from Ontico (20)

One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
 
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
 
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
 
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
 
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
 
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
 
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
 
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
 
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
 
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
 
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
 
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
 
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
 
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
 
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
 
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
 
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
 
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
 
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
 
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
 

Что нового в MySQL 8.0? / Дмитрий Ленев (Oracle)

  • 1. Что нового в MySQL 8.0? Дмитрий Ленев, Oracle/MySQL Москва, Июнь 2017
  • 2. Safe Harbor Statement The following is intended to outline our general product direction. It is intended for information purposes only, and may not be incorporated into any contract. It is not a commitment to deliver any material, code, or functionality, and should not be relied upon in making purchasing decisions. The development, release and timing of any features or functionality described for Oracle's products remains at the sole discretion of Oracle.
  • 3. Актуальные версии MySQL ● 5.7 - cтабильная ветка – Свежая версия - 5.7.18 (2017-04-10) – Доступны на dev.mysql.com/downloads/mysql/ ● 8.0 – активная разработка – Development Milestone Release - 8.0.1 (2017-04-10) – Доступны там же ● MySQL Labs версии – 8.0.1 + unified data-dictionary (2017-04-21) – Доступны на labs.mysql.com/ ● Rapid плагины – X (с 5.7.12), Group Replication (с 5.7.17) – Распространяются вместе со стабильными или DMR версиями
  • 4. Актуальные версии MySQL ● 5.7 - cтабильная ветка – Свежая версия - 5.7.18 (2017-04-10) – Доступны на dev.mysql.com/downloads/mysql/ ● 8.0 – активная разработка – Development Milestone Release - 8.0.1 (2017-04-10) – Доступны там же ● MySQL Labs версии – 8.0.1 + unified data-dictionary (2017-04-21) – Доступны на labs.mysql.com/ ● Rapid плагины – X (с 5.7.12), Group Replication (с 5.7.17) – Распространяются вместе со стабильными или DMR версиями
  • 5. Актуальные версии MySQL ● 5.7 - cтабильная ветка – Свежая версия - 5.7.18 (2017-04-10) – Доступны на dev.mysql.com/downloads/mysql/ ● 8.0 – активная разработка – Development Milestone Release - 8.0.1 (2017-04-10) – Доступны там же ● MySQL Labs версии – 8.0.1 + unified data-dictionary (2017-04-21) – Доступны на labs.mysql.com/ ● Rapid плагины – X (с 5.7.12), Group Replication (с 5.7.17) – Распространяются вместе со стабильными или DMR версиями
  • 6. Актуальные версии MySQL ● 5.7 - cтабильная ветка – Свежая версия - 5.7.18 (2017-04-10) – Доступны на dev.mysql.com/downloads/mysql/ ● 8.0 – активная разработка – Development Milestone Release - 8.0.1 (2017-04-10) – Доступны там же ● MySQL Labs версии – 8.0.1 + unified data-dictionary (2017-04-21) – Доступны на labs.mysql.com/ ● Rapid плагины – X (с 5.7.12), Group Replication (с 5.7.17) – Распространяются вместе со стабильными или DMR версиями
  • 7. MySQL 8.0 с высоты птичьего полета ● Новый словарь данных и поддержка атомарного DDL ● Табличные выражения (CTE), оконные функции ● Убывающие и невидимые индексы ● Улучшения в поддержке Unicode ● Гибкая работа с блокировками (SKIP LOCKED/NO WAIT) ● Роли, улучшения в системе привилегий ● Улучшения в репликации
  • 8. Словарь данных до 8.0: Метаданные хранятся в разных местах Словарь данных Файлы FRM TRG OPT Таблицы (mysql.*) user procevents Таблицы (innodb.sys) MyISAM File system InnoDB S Q L
  • 9. Словарь данных до 8.0: Проблемы ● INFORMATION_SCHEMA медленная ● Конфликты из-за нетранзакционного хранения МД ● Конфликты между МД в InnoDB и в ядре сервера ● Трудно реализовать атомарный и транзакционный DDL ● Проблемы с репликацией неатомарного DDL ● Сложно расширять
  • 10. Словарь данных до 8.0: Проблемы ● INFORMATION_SCHEMA медленная ● Конфликты из-за нетранзакционного хранения МД ● Конфликты между МД в InnoDB и в ядре сервера ● Трудно реализовать атомарный и транзакционный DDL ● Проблемы с репликацией неатомарного DDL ● Сложно расширять
  • 11. Словарь данных до 8.0: Проблемы ● INFORMATION_SCHEMA медленная ● Конфликты из-за нетранзакционного хранения МД ● Конфликты между МД в InnoDB и в ядре сервера ● Трудно реализовать атомарный и транзакционный DDL ● Проблемы с репликацией неатомарного DDL ● Сложно расширять
  • 12. Словарь данных до 8.0: Проблемы ● INFORMATION_SCHEMA медленная ● Конфликты из-за нетранзакционного хранения МД ● Конфликты между МД в InnoDB и в ядре сервера ● Трудно реализовать атомарный и транзакционный DDL ● Проблемы с репликацией неатомарного DDL ● Сложно расширять
  • 13. Словарь данных до 8.0: Проблемы ● INFORMATION_SCHEMA медленная ● Конфликты из-за нетранзакционного хранения МД ● Конфликты между МД в InnoDB и в ядре сервера ● Трудно реализовать атомарный и транзакционный DDL ● Проблемы с репликацией неатомарного DDL ● Сложно расширять
  • 14. Словарь данных до 8.0: Проблемы ● INFORMATION_SCHEMA медленная ● Конфликты из-за нетранзакционного хранения МД ● Конфликты между МД в InnoDB и в ядре сервера ● Трудно реализовать атомарный и транзакционный DDL ● Проблемы с репликацией неатомарного DDL ● Сложно расширять
  • 15. Словарь данных до 8.0: Проблемы ● INFORMATION_SCHEMA медленная ● Конфликты из-за нетранзакционного хранения МД ● Конфликты между МД в InnoDB и в ядре сервера ● Трудно реализовать атомарный и транзакционный DDL ● Проблемы с репликацией неатомарного DDL ● Сложно расширять
  • 16. Новый словарь данных ● Единое хранилище для всех метаданных – таблицы – Транзакционность – INFORMATION_SCHEMA – просто представления ● Единое API для ядра сервера, SE и плагинов ● Единообразное API для разных объектов ● Расширяемость – Продуман upgrade – Поддержка плагинов ● Поддержка disaster recovery (SDI)
  • 17. Новый словарь данных ● Единое хранилище для всех метаданных – таблицы – Транзакционность – INFORMATION_SCHEMA – просто представления ● Единое API для ядра сервера, SE и плагинов ● Единообразное API для разных объектов ● Расширяемость – Продуман upgrade – Поддержка плагинов ● Поддержка disaster recovery (SDI)
  • 18. Новый словарь данных ● Единое хранилище для всех метаданных – таблицы – Транзакционность – INFORMATION_SCHEMA – просто представления ● Единое API для ядра сервера, SE и плагинов ● Единообразное API для разных объектов ● Расширяемость – Продуман upgrade – Поддержка плагинов ● Поддержка disaster recovery (SDI)
  • 19. Новый словарь данных ● Единое хранилище для всех метаданных – таблицы – Транзакционность – INFORMATION_SCHEMA – просто представления ● Единое API для ядра сервера, SE и плагинов ● Единообразное API для разных объектов ● Расширяемость – Продуман upgrade – Поддержка плагинов ● Поддержка disaster recovery (SDI)
  • 20. Новый словарь данных ● Единое хранилище для всех метаданных – таблицы – Транзакционность – INFORMATION_SCHEMA – просто представления ● Единое API для ядра сервера, SE и плагинов ● Единообразное API для разных объектов ● Расширяемость – Продуман upgrade – Поддержка плагинов ● Поддержка disaster recovery (SDI)
  • 21. Новый словарь данных ● Единое хранилище для всех метаданных – таблицы – Транзакционность – INFORMATION_SCHEMA – просто представления ● Единое API для ядра сервера, SE и плагинов ● Единообразное API для разных объектов ● Расширяемость – Продуман upgrade – Поддержка плагинов ● Поддержка disaster recovery (SDI)
  • 22. INFORMATION_SCHEMA в 5.7 Клиент Запрос к I_S Результаты Сервер MySQL . ФС / MyISAM / InnoDB SE
  • 23. INFORMATION_SCHEMA в 5.7 Клиент Запрос к I_S Результаты Сервер MySQL Создание временной таблицы . Временная таблица ФС / MyISAM / InnoDB SE
  • 24. INFORMATION_SCHEMA в 5.7 Клиент Запрос к I_S Результаты Сервер MySQL Создание временной таблицы . Временная таблица ФС / MyISAM / InnoDB SE Оптимизатор готовит план запроса.
  • 25. INFORMATION_SCHEMA в 5.7 Клиент Запрос к I_S Результаты Сервер MySQL Создание временной таблицы . Временная таблица ФС / MyISAM / InnoDB SE Оптимизатор готовит план запроса. План выполняется, заполняются временные таблицы, читаются строки из временных таблиц.
  • 26. INFORMATION_SCHEMA в 5.7 Клиент Запрос к I_S Результаты Сервер MySQL Создание временной таблицы Эвристики Чтение метаданных с ФС или MyISAM/ InnoDB. . Временная таблица ФС / MyISAM / InnoDB SE Оптимизатор готовит план запроса. План выполняется, заполняются временные таблицы, читаются строки из временных таблиц.
  • 27. INFORMATION_SCHEMA в 5.7 Клиент Запрос к I_S Результаты Сервер MySQL Создание временной таблицы Эвристики Чтение метаданных с ФС или MyISAM/ InnoDB. . Временная таблица ФС / MyISAM / InnoDB SE Оптимизатор готовит план запроса. План выполняется, заполняются временные таблицы, читаются строки из временных таблиц.
  • 28. INFORMATION_SCHEMA в 5.7 Клиент Запрос к I_S Результаты Сервер MySQL Создание временной таблицы Эвристики Чтение метаданных с ФС или MyISAM/ InnoDB. . Временная таблица Возвращаем строки пользователю. ФС / MyISAM / InnoDB SE Оптимизатор готовит план запроса. План выполняется, заполняются временные таблицы, читаются строки из временных таблиц.
  • 29. INFORMATION_SCHEMA в 5.7 Клиент Запрос к I_S Результаты Сервер MySQL Создание временной таблицы Эвристики Чтение метаданных с ФС или MyISAM/ InnoDB. . Временная таблица Возвращаем строки пользователю. ФС / MyISAM / InnoDB SE Оптимизатор готовит план запроса. План выполняется, заполняются временные таблицы, читаются строки из временных таблиц.
  • 30. INFORMATION_SCHEMA в 8.0 Клиент Запрос к I_S Результаты Сервер MySQL . InnoDB SE
  • 31. INFORMATION_SCHEMA в 8.0 Клиент Запрос к I_S Результаты Сервер MySQL . InnoDB SE Оптимизатор готовит план запроса.
  • 32. INFORMATION_SCHEMA в 8.0 Клиент Запрос к I_S Результаты Сервер MySQL . InnoDB SE Оптимизатор готовит план запроса. План выполняется, читаются строки из таблиц СД.
  • 33. INFORMATION_SCHEMA в 8.0 Клиент Запрос к I_S Результаты Сервер MySQL . Возвращаем строки пользователю. InnoDB SE Оптимизатор готовит план запроса. План выполняется, читаются строки из таблиц СД.
  • 34. Время выполнения запросов к INFORMATION_SCHEMA в 8.0 (секунды, 100 БД по 50 таблиц) Schema aggregate size stats All Dynamic Table Info All Static Table Info Auto Increments Near Limit Count All Columns Count All Indexes 0 1 2 3 4 MySQL 8.0 MySQL 5.7
  • 35. Атомарный DDL ● Семантика все или ничего при ошибках – Лучше соотвествует ожиданиям пользователей – Проще реплицировать ● Согласованность информации при падении сервера – Словарь данных – SE – Binary log ● Нужна поддержка в SE (InnoDB, NDB) В разработке
  • 36. Атомарный DDL ● Семантика все или ничего при ошибках – Лучше соотвествует ожиданиям пользователей – Проще реплицировать ● Согласованность информации при падении сервера – Словарь данных – SE – Binary log ● Нужна поддержка в SE (InnoDB, NDB) В разработке
  • 37. Атомарный DDL ● Семантика все или ничего при ошибках – Лучше соотвествует ожиданиям пользователей – Проще реплицировать ● Согласованность информации при падении сервера – Словарь данных – SE – Binary log ● Нужна поддержка в SE (InnoDB, NDB) В разработке
  • 38. Атомарный DDL ● Семантика все или ничего при ошибках – Лучше соотвествует ожиданиям пользователей – Проще реплицировать ● Согласованность информации при падении сервера – Словарь данных – SE – Binary log ● Нужна поддержка в SE (InnoDB, NDB) В разработке
  • 39. Работа с иерархическими данными до 8.0: Модель списка соседей Проблемы: ● Проблемы с высотой дерева ● Приходится писать процедуры 1 : Alice 2 : Bob 3 : Colin 4 : Dag 5 : Eve 1 1 2 2 ID NAME MANAGER_ID 1 Alice NULL 2 Bob 1 3 Colin 1 4 Dag 2 5 Eve 2
  • 40. Работа с иерархическими данными до 8.0: Модель списка соседей Проблемы: ● Проблемы с высотой дерева ● Приходится писать процедуры 1 : Alice 2 : Bob 3 : Colin 4 : Dag 5 : Eve 1 1 2 2 ID NAME MANAGER_ID 1 Alice NULL 2 Bob 1 3 Colin 1 4 Dag 2 5 Eve 2
  • 41. Работа с иерархическими данными до 8.0: Модель вложенных множеств Проблемы: ● Нетривиальная реализация ● Сложные вставка и удаление Electronics TVs Consoles LCD Plasma 1 8 3 7 NAME LFT RGT Electronics 1 10 TVs 2 7 Consoles 8 9 LCD 3 4 Plasma 5 6 4 2 5 6 9 10
  • 42. Работа с иерархическими данными до 8.0: Модель вложенных множеств Проблемы: ● Нетривиальная реализация ● Сложные вставка и удаление Electronics TVs Consoles LCD Plasma 1 8 3 7 NAME LFT RGT Electronics 1 10 TVs 2 7 Consoles 8 9 LCD 3 4 Plasma 5 6 4 2 5 6 9 10
  • 43. Работа с иерархическими данными в 8.0: Рекурсивные табличные выражения WITH RECURSIVE employee_levels (id, name, level) AS ( SELECT id, name, 0 FROM employees WHERE manager_id IS NULL UNION ALL SELECT e.id, e.name, el.level + 1 FROM employee_levels AS el JOIN employees AS e ON el.id = e.manager_id ) SELECT * FROM employee_leves ORDER BY level;
  • 44. Работа с иерархическими данными в 8.0: Рекурсивные табличные выражения WITH RECURSIVE employee_levels (id, name, level) AS ( SELECT id, name, 0 FROM employees WHERE manager_id IS NULL UNION ALL SELECT e.id, e.name, el.level + 1 FROM employee_levels AS el JOIN employees AS e ON el.id = e.manager_id ) SELECT * FROM employee_levels ORDER BY level;
  • 45. Работа с иерархическими данными в 8.0: Рекурсивные табличные выражения WITH RECURSIVE employee_levels (id, name, level) AS ( SELECT id, name, 0 FROM employees WHERE manager_id IS NULL UNION ALL SELECT e.id, e.name, el.level + 1 FROM employee_levels AS el JOIN employees AS e ON el.id = e.manager_id ) SELECT * FROM employee_levels ORDER BY level;
  • 46. Работа с иерархическими данными в 8.0: Рекурсивные табличные выражения WITH RECURSIVE employee_levels (id, name, level) AS ( SELECT id, name, 0 FROM employees WHERE manager_id IS NULL UNION ALL SELECT e.id, e.name, el.level + 1 FROM employee_levels AS el JOIN employees AS e ON el.id = e.manager_id ) SELECT * FROM employee_levels ORDER BY level;
  • 47. Работа с иерархическими данными в 8.0: Рекурсивные табличные выражения WITH RECURSIVE employee_levels (id, name, level) AS ( SELECT id, name, 0 FROM employees WHERE manager_id IS NULL UNION ALL SELECT e.id, e.name, el.level + 1 FROM employee_levels AS el JOIN employees AS e ON el.id = e.manager_id ) SELECT * FROM employee_levels ORDER BY level;
  • 48. Табличные выражения: не только рекурсия! SELECT s.name, r.total_revenue FROM supplier AS s, revenue0 AS r WHERE s.id = r.supplier_id AND r.total_revenue = (SELECT MAX(total_revenue) FROM revenue0) ORDER BY s.name;
  • 49. Табличные выражения: не только рекурсия! SELECT s.name, r.total_revenue FROM supplier AS s, revenue0 AS r WHERE s.id = r.supplier_id AND r.total_revenue = (SELECT MAX(total_revenue) FROM revenue0) ORDER BY s.name; CREATE VIEW revenue0 AS SELECT supplier_id, SUM(item_price * items) AS total_revenue FROM orders WHERE … GROUP BY supplier_id;
  • 50. Табличные выражения: не только рекурсия! SELECT s.name, r.total_revenue FROM supplier AS s, revenue0 AS r WHERE s.id = r.supplier_id AND r.total_revenue = (SELECT MAX(total_revenue) FROM revenue0) ORDER BY s.name; WITH revenue0(supplier_id , total_revenue) AS ( SELECT supplier_id, SUM(item_price * items) FROM orders ... GROUP BY supplier_id ) SELECT s.name, r.total_revenue FROM supplier AS s, revenue0 AS r WHERE s.id = r.supplier_id AND r.total_revenue = (SELECT MAX(total_revenue) FROM revenue0) ORDER BY s.name;
  • 51. Табличные выражения: не только рекурсия! SELECT s.name, r.total_revenue FROM supplier AS s, revenue0 AS r WHERE s.id = r.supplier_id AND r.total_revenue = (SELECT MAX(total_revenue) FROM revenue0) ORDER BY s.name; WITH revenue0(supplier_id , total_revenue) AS ( SELECT supplier_id, SUM(item_price * items) FROM orders ... GROUP BY supplier_id ) SELECT s.name, r.total_revenue FROM supplier AS s, revenue0 AS r WHERE s.id = r.supplier_id AND r.total_revenue = (SELECT MAX(total_revenue) FROM revenue0) ORDER BY s.name;
  • 52. Оконные функции Проблема: ● До версии 8.0 сложно и иногда невозможно считать агрегатные функции от группы из текущей и связанных с нею строк (окна) без группировки всех строк в группе. Решение: ● Оконные функции
  • 53. Оконные функции Проблема: ● До версии 8.0 сложно и иногда невозможно считать агрегатные функции от группы из текущей и связанных с нею строк (окна) без группировки всех строк в группе. Решение: ● Оконные функции
  • 54. Оконные функции: пример SELECT e.name, d.name AS dep_name, salary, RANK() OVER (PARTITION BY d.id ORDER BY salary DESC) rank_in_dep FROM employees e, departments d WHERE e.department = d.id ORDER BY e.name; NAME DEP_NAME SALARY RANK_IN_DEP Alice B 50000 1 Donald A 20000 2 Ingrid B 40000 2 Mary A 15000 3 Sebastian B 40000 2 William A 30000 1 В разработке
  • 55. Оконные функции: пример SELECT e.name, d.name AS dep_name, salary, RANK() OVER (PARTITION BY d.id ORDER BY salary DESC) rank_in_dep FROM employees e, departments d WHERE e.department = d.id ORDER BY e.name; NAME DEP_NAME SALARY RANK_IN_DEP Alice B 50000 1 Donald A 20000 2 Ingrid B 40000 2 Mary A 15000 3 Sebastian B 40000 2 William A 30000 1 В разработке
  • 56. Оконные функции: пример SELECT e.name, d.name AS dep_name, salary, RANK() OVER (PARTITION BY d.id ORDER BY salary DESC) rank_in_dep FROM employees e, departments d WHERE e.department = d.id ORDER BY e.name; NAME DEP_NAME SALARY RANK_IN_DEP Alice B 50000 1 Donald A 20000 2 Ingrid B 40000 2 Mary A 15000 3 Sebastian B 40000 2 William A 30000 1 В разработке
  • 57. Убывающие индексы до 8.0 ● Поддержка синтаксиса ● Создается обычный возрастающий индекс ● Проблемы: – Сканирование в обратном порядке дороже – Нельзя использовать индекс когда нужно разное направление обхода по разным колонкам индекса
  • 58. Убывающие индексы до 8.0 ● Поддержка синтаксиса ● Создается обычный возрастающий индекс ● Проблемы: – Сканирование в обратном порядке дороже – Нельзя использовать индекс когда нужно разное направление обхода по разным колонкам индекса
  • 59. Убывающие индексы в 8.0 ● Поддерживаются InnoDB ● Оптимизатор умеет их правильно использовать – Есть ограничения на оптимизации CREATE TABLE t (c1 INT, c2 INT, INDEX idx1 (c1 ASC, c2 DESC)); SELECT … ORDER BY c1 ASC, c2 DESC; # без filesort
  • 60. Убывающие индексы в 8.0 ● Поддерживаются InnoDB ● Оптимизатор умеет их правильно использовать – Есть ограничения на оптимизации CREATE TABLE t (c1 INT, c2 INT, INDEX idx1 (c1 ASC, c2 DESC)); SELECT … ORDER BY c1 ASC, c2 DESC; # без filesort
  • 61. Невидимые индексы Что это такое ? ● Невидимы для оптимизатора ● Но обновляются DML (сравните с DISABLED индексами) Нужно для: ● “Удаление” индексов с мгновенным восстановлением ● Пошаговое добавление индексов
  • 62. Невидимые индексы Что это такое ? ● Невидимы для оптимизатора ● Но обновляются DML (сравните с DISABLED индексами) Нужно для: ● “Удаление” индексов с мгновенным восстановлением ● Пошаговое добавление индексов
  • 63. Невидимые индексы: пример ● Думаем что индекс не используется: ALTER TABLE country ALTER INDEX c INVISIBLE; ● Ошиблись! Быстро возвращаем индекс назад: ALTER TABLE country ALTER INDEX c VISIBLE; ● Все верно. Можно удалить индекс: ALTER TABLE country DROP INDEX c;
  • 64. Невидимые индексы: пример ● Думаем что индекс не используется: ALTER TABLE country ALTER INDEX c INVISIBLE; ● Ошиблись! Быстро возвращаем индекс назад: ALTER TABLE country ALTER INDEX c VISIBLE; ● Все верно. Можно удалить индекс: ALTER TABLE country DROP INDEX c;
  • 65. Невидимые индексы: пример ● Думаем что индекс не используется: ALTER TABLE country ALTER INDEX c INVISIBLE; ● Ошиблись! Быстро возвращаем индекс назад: ALTER TABLE country ALTER INDEX c VISIBLE; ● Все верно. Можно удалить индекс: ALTER TABLE country DROP INDEX c;
  • 66. Unicode ● Utf8mb4 – по умолчанию в 8.0! ● Поддержка Unicode 9.0 ● Новые accent-sensitive и case-sensitive collation ● Collation специфичные для различных языков – В том числе для японского! ● Оптимизация производительности utf8mb4 – Самой реализации – Сортировки ключей переменной длины
  • 67. Unicode ● Utf8mb4 – по умолчанию в 8.0! ● Поддержка Unicode 9.0 ● Новые accent-sensitive и case-sensitive collation ● Collation специфичные для различных языков – В том числе для японского! ● Оптимизация производительности utf8mb4 – Самой реализации – Сортировки ключей переменной длины
  • 68. Unicode ● Utf8mb4 – по умолчанию в 8.0! ● Поддержка Unicode 9.0 ● Новые accent-sensitive и case-sensitive collation ● Collation специфичные для различных языков – В том числе для японского! ● Оптимизация производительности utf8mb4 – Самой реализации – Сортировки ключей переменной длины
  • 69. Unicode ● Utf8mb4 – по умолчанию в 8.0! ● Поддержка Unicode 9.0 ● Новые accent-sensitive и case-sensitive collation ● Collation специфичные для различных языков – В том числе для японского! ● Оптимизация производительности utf8mb4 – Самой реализации – Сортировки ключей переменной длины
  • 70. Unicode ● Utf8mb4 – по умолчанию в 8.0! ● Поддержка Unicode 9.0 ● Новые accent-sensitive и case-sensitive collation ● Collation специфичные для различных языков – В том числе для японского! ● Оптимизация производительности utf8mb4 – Самой реализации – Сортировки ключей переменной длины
  • 71. Unicode ● Utf8mb4 – по умолчанию в 8.0! ● Поддержка Unicode 9.0 ● Новые accent-sensitive и case-sensitive collation ● Collation специфичные для различных языков – В том числе для японского! ● Оптимизация производительности utf8mb4 – Самой реализации – Сортировки ключей переменной длины
  • 72. Оптимизация utf8mb4: 8.0 vs 5.7 8 16 64 128 512 1024 0 10000 20000 30000 40000 +300-350% в OLTP RO
  • 73. Оптимизация utf8mb4: 8.0 vs 5.7 8 16 64 128 512 1024 0 10000 20000 30000 40000 8 16 64 128 512 1024 0 7500 15000 22500 30000 +300-350% в OLTP RO +176-233% в OLTP RW
  • 74. Оптимизация utf8mb4: 8.0 vs 5.7 8 16 64 128 512 1024 0 10000 20000 30000 40000 8 16 64 128 512 1024 0 7500 15000 22500 30000 +300-350% в OLTP RO +176-233% в OLTP RW +1500-1800% в SELECT_DISTINCT_RANGES 8 16 64 128 512 1024 0 45000 90000 135000 180000
  • 75. Гибкая работа с блокировками Проблема: Хочется пропускать заблокированные строки: – Выборка из таблицы заданий – Резервирование ресурса Решение: SELECT … FOR UPDATE SKIP LOCKED;
  • 76. Гибкая работа с блокировками Проблема: Хочется пропускать заблокированные строки: – Выборка из таблицы заданий – Резервирование ресурса Решение: SELECT … FOR UPDATE SKIP LOCKED;
  • 77. Гибкая работа с блокировками Проблема: Хочется пропускать заблокированные строки: – Выборка из таблицы заданий – Резервирование ресурса Решение: SELECT … FOR UPDATE SKIP LOCKED;
  • 78. Гибкая работа с блокировками (детали) ● SKIP LOCKED – пропустить заблокированные строки ● Используется совместно с: – FOR UPDATE – FOR SHARE (замена LOCK IN SHARE MODE) ● FOR UPDATE OF <table_name> SKIP LOCKED ● NOWAIT – выдать ошибку вместо ожидания
  • 79. Гибкая работа с блокировками (детали) ● SKIP LOCKED – пропустить заблокированные строки ● Используется совместно с: – FOR UPDATE – FOR SHARE (замена LOCK IN SHARE MODE) ● FOR UPDATE OF <table_name> SKIP LOCKED ● NOWAIT – выдать ошибку вместо ожидания
  • 80. Гибкая работа с блокировками (детали) ● SKIP LOCKED – пропустить заблокированные строки ● Используется совместно с: – FOR UPDATE – FOR SHARE (замена LOCK IN SHARE MODE) ● FOR UPDATE OF <table_name> SKIP LOCKED ● NOWAIT – выдать ошибку вместо ожидания
  • 81. Гибкая работа с блокировками (детали) ● SKIP LOCKED – пропустить заблокированные строки ● Используется совместно с: – FOR UPDATE – FOR SHARE (замена LOCK IN SHARE MODE) ● FOR UPDATE OF <table_name> SKIP LOCKED ● NOWAIT – выдать ошибку вместо ожидания
  • 82. Роли ● Именованные коллекции привилегий – Могут включать другие роли ● Упрощают управление привилегиями пользователей – Проще структура привилегий – Легко добавлять и отбирать привилегии ● Можно активировать/деактивировать для сессии ● Можно назначить несколько активных ролей по умолчанию ● ROLES_GRAPHML()
  • 83. Роли ● Именованные коллекции привилегий – Могут включать другие роли ● Упрощают управление привилегиями пользователей – Проще структура привилегий – Легко добавлять и отбирать привилегии ● Можно активировать/деактивировать для сессии ● Можно назначить несколько активных ролей по умолчанию ● ROLES_GRAPHML()
  • 84. Роли ● Именованные коллекции привилегий – Могут включать другие роли ● Упрощают управление привилегиями пользователей – Проще структура привилегий – Легко добавлять и отбирать привилегии ● Можно активировать/деактивировать для сессии ● Можно назначить несколько активных ролей по умолчанию ● ROLES_GRAPHML()
  • 85. Роли ● Именованные коллекции привилегий – Могут включать другие роли ● Упрощают управление привилегиями пользователей – Проще структура привилегий – Легко добавлять и отбирать привилегии ● Можно активировать/деактивировать для сессии ● Можно назначить несколько активных ролей по умолчанию ● ROLES_GRAPHML()
  • 86. Роли ● Именованные коллекции привилегий – Могут включать другие роли ● Упрощают управление привилегиями пользователей – Проще структура привилегий – Легко добавлять и отбирать привилегии ● Можно активировать/деактивировать для сессии ● Можно назначить несколько активных ролей по умолчанию ● ROLES_GRAPHML()
  • 87. Роли ● Именованные коллекции привилегий – Могут включать другие роли ● Упрощают управление привилегиями пользователей – Проще структура привилегий – Легко добавлять и отбирать привилегии ● Можно активировать/деактивировать для сессии ● Можно назначить несколько активных ролей по умолчанию ● ROLES_GRAPHML()
  • 88. Роли: пример CREATE ROLE 'dev', 'reader'; GRANT ALL ON db.* TO 'dev'; GRANT SELECT ON db.* TO 'reader'; GRANT 'dev' TO 'alice'@'localhost'; GRANT 'reader' TO 'alice'@'localhost'; GRANT 'reader' TO 'bob'@'localhost'; SET ROLE 'dev'; SET DEFAULT ROLE ALL TO 'alice'@'localhost';
  • 89. Роли: пример CREATE ROLE 'dev', 'reader'; GRANT ALL ON db.* TO 'dev'; GRANT SELECT ON db.* TO 'reader'; GRANT 'dev' TO 'alice'@'localhost'; GRANT 'reader' TO 'alice'@'localhost'; GRANT 'reader' TO 'bob'@'localhost'; SET ROLE 'dev'; SET DEFAULT ROLE ALL TO 'alice'@'localhost';
  • 90. Роли: пример CREATE ROLE 'dev', 'reader'; GRANT ALL ON db.* TO 'dev'; GRANT SELECT ON db.* TO 'reader'; GRANT 'dev' TO 'alice'@'localhost'; GRANT 'reader' TO 'alice'@'localhost'; GRANT 'reader' TO 'bob'@'localhost'; SET ROLE 'dev'; SET DEFAULT ROLE ALL TO 'alice'@'localhost';
  • 91. Роли: пример CREATE ROLE 'dev', 'reader'; GRANT ALL ON db.* TO 'dev'; GRANT SELECT ON db.* TO 'reader'; GRANT 'dev' TO 'alice'@'localhost'; GRANT 'reader' TO 'alice'@'localhost'; GRANT 'reader' TO 'bob'@'localhost'; SET ROLE 'dev'; SET DEFAULT ROLE ALL TO 'alice'@'localhost';
  • 92. Роли: пример CREATE ROLE 'dev', 'reader'; GRANT ALL ON db.* TO 'dev'; GRANT SELECT ON db.* TO 'reader'; GRANT 'dev' TO 'alice'@'localhost'; GRANT 'reader' TO 'alice'@'localhost'; GRANT 'reader' TO 'bob'@'localhost'; SET ROLE 'dev'; SET DEFAULT ROLE ALL TO 'alice'@'localhost';
  • 93. Динамические привилегии Проблема: SUPER привилегия перегружена Решение: Динамические привилегии ● Глобального уровня ● Замена SUPER: AUDIT_ADMIN, BINLOG_ADMIN, CONNECTION_ADMIN, ENCRYPTION_KEY_ADMIN, FIREWALL_ADMIN,... ● Изначально привилегии добавляемые плагинами
  • 94. Динамические привилегии Проблема: SUPER привилегия перегружена Решение: Динамические привилегии ● Глобального уровня ● Замена SUPER: AUDIT_ADMIN, BINLOG_ADMIN, CONNECTION_ADMIN, ENCRYPTION_KEY_ADMIN, FIREWALL_ADMIN,... ● Изначально привилегии добавляемые плагинами
  • 95. Динамические привилегии Проблема: SUPER привилегия перегружена Решение: Динамические привилегии ● Глобального уровня ● Замена SUPER: AUDIT_ADMIN, BINLOG_ADMIN, CONNECTION_ADMIN, ENCRYPTION_KEY_ADMIN, FIREWALL_ADMIN,... ● Изначально привилегии добавляемые плагинами
  • 96. Динамические привилегии Проблема: SUPER привилегия перегружена Решение: Динамические привилегии ● Глобального уровня ● Замена SUPER: AUDIT_ADMIN, BINLOG_ADMIN, CONNECTION_ADMIN, ENCRYPTION_KEY_ADMIN, FIREWALL_ADMIN,... ● Изначально привилегии добавляемые плагинами
  • 97. Репликация: оптимизация взаимодействия между I/O и SQL потоками Проблема: Репликация отстает или неэффективна Решение: Вынести запись и чтение в/из relay log из критических секций Меньше держим блокировки Потоки ждут доступа к relay log меньше Выше производительность
  • 98. Репликация: оптимизация взаимодействия между I/O и SQL потоками Проблема: Репликация отстает или неэффективна Решение: Вынести запись и чтение в/из relay log из критических секций Меньше держим блокировки Потоки ждут доступа к relay log меньше Выше производительность
  • 99. Репликация: оптимизация взаимодействия между I/O и SQL потоками Проблема: Репликация отстает или неэффективна Решение: Вынести запись и чтение в/из relay log из критических секций Меньше держим блокировки Потоки ждут доступа к relay log меньше Выше производительность
  • 100. Результаты оптимизации взаимодействия между I/O и SQL потоками (Sysbench Update Indexed: применение транзакций/сек на реплике, RBR) 16 потоков 64 потоков 0 5000 10000 15000 20000 25000 30000 35000 40000 45000 MySQL 8.0.0 MySQL 8.0.1 Durable настройки для binlog
  • 101. Результаты оптимизации взаимодействия между I/O и SQL потоками (Sysbench Update Indexed: применение транзакций/сек на реплике, RBR) 16 потоков 64 потоков 16 потоков 64 потоков 0 5000 10000 15000 20000 25000 30000 35000 40000 45000 MySQL 8.0.0 MySQL 8.0.1 Durable настройки для binlog Non-durable настройки для binlog
  • 102. Репликация: параллелизм на основе использования write-set Проблема: ● Репликация отстает или неэффективна ● Параллельная репликация на основе логических временных меток не помогает – Малое число или одно соединение на мастере – Сложная топология приводит к потере параллелизма Решение: ● Использовать параллелизм на основе write-set транзакций
  • 103. Репликация: параллелизм на основе использования write-set Проблема: ● Репликация отстает или неэффективна ● Параллельная репликация на основе логических временных меток не помогает – Малое число или одно соединение на мастере – Сложная топология приводит к потере параллелизма Решение: ● Использовать параллелизм на основе write-set транзакций
  • 104. Репликация: параллелизм на основе использования write-set Проблема: ● Репликация отстает или неэффективна ● Параллельная репликация на основе логических временных меток не помогает – Малое число или одно соединение на мастере – Сложная топология приводит к потере параллелизма Решение: ● Использовать параллелизм на основе write-set транзакций
  • 105. Репликация: параллелизм на основе использования write-set ● Write-set транзакции – множество строк измененных транзакцией ● Write-set – средство обнаружить завимости ● Транзакции с непересекающимися write-set можно применять паралелльно ● Параллелизм на основе write-set расширяет механизм на основе логических временных меток ● Зависимости определяются на мастере и выражаются при помощи логических временных меток в binary log
  • 106. Репликация: параллелизм на основе использования write-set ● Write-set транзакции – множество строк измененных транзакцией ● Write-set – средство обнаружить завимости ● Транзакции с непересекающимися write-set можно применять паралелльно ● Параллелизм на основе write-set расширяет механизм на основе логических временных меток ● Зависимости определяются на мастере и выражаются при помощи логических временных меток в binary log
  • 107. Репликация: параллелизм на основе использования write-set ● Write-set транзакции – множество строк измененных транзакцией ● Write-set – средство обнаружить завимости ● Транзакции с непересекающимися write-set можно применять паралелльно ● Параллелизм на основе write-set расширяет механизм на основе логических временных меток ● Зависимости определяются на мастере и выражаются при помощи логических временных меток в binary log
  • 108. Репликация: параллелизм на основе использования write-set ● Write-set транзакции – множество строк измененных транзакцией ● Write-set – средство обнаружить завимости ● Транзакции с непересекающимися write-set можно применять паралелльно ● Параллелизм на основе write-set расширяет механизм на основе логических временных меток ● Зависимости определяются на мастере и выражаются при помощи логических временных меток в binary log
  • 109. Репликация: параллелизм на основе использования write-set ● Write-set транзакции – множество строк измененных транзакцией ● Write-set – средство обнаружить завимости ● Транзакции с непересекающимися write-set можно применять паралелльно ● Параллелизм на основе write-set расширяет механизм на основе логических временных меток ● Зависимости определяются на мастере и выражаются при помощи логических временных меток в binary log
  • 110. Параллельная репликация до версии 8.0: на основе логических временных меток 1 n n+1 n+2 n+3 n+4 T1T1 Session A Session A T2T2 Session B Session B T3T3 Session B Session B T4T4 Session A Session A T5T5 Session C Session C T6T6 Session C Session C T7T7 Session C Session C T8T8 Session B Session B Время Множествострок
  • 111. Параллельная репликация начиная с 8.0: на основе использования write-set n n+1 n+2 n+3 n+4 T1T1 Session A Session A T2T2 Session B Session B T3T3 Session B Session B T4T4 Session A Session A T5T5 Session C Session C T6T6 Session C Session C T7T7 Session C Session C T8T8 Session B Session B Время Множествострок 1 Write-set история
  • 112. Параллельная репликация с использованием write-set с сохранением порядка транзакций в сессии 1 n n+1 n+2 n+3 n+4 T1T1 Session A Session A T2T2 Session B Session B T3T3 Session B Session B T4T4 Session A Session A T5T5 Session C Session C T6T6 Session C Session C T7T7 Session C Session C T8T8 Session B Session B Время Множествострок Write set история
  • 113. Результаты использования write-set параллелизма: (Sysbench Update Indexed: применение транзакций/сек на реплике) 1 2 4 8 16 32 64 128 256 0 5000 10000 15000 20000 25000 30000 35000 40000 45000 50000 COMMIT_ORDER WRITESET WRITESET_SESSION Количество клиентов на мастере