SlideShare a Scribd company logo
Что нужно знать
о трёх топовых фичах MySQL
August, 22, 2019
Sveta Smirnova
∙ Инженер тех. поддержки MySQL
∙
Автор
∙ MySQL Troubleshooting
∙
JSON UDF функции
∙ FILTER clause для MySQL
∙ Докладчик
∙
Percona Live, OOW, Fosdem,
DevConf, HighLoad...
Света Смирнова
2
Идея Доклада
3
∙Табличные Движки
InnoDB
∙Репликация
∙NoSQL
Содержание
4
Табличные Движки
Connectors: C, JDBC, ODBC, Python, ...
Connection Pool: Authentication, Caches
SQL interface
Parser
Optimizer
Caches and Buffers:
Global
Engine-specific
Storage engines: InnoDB, TokuDB, ...
File system: Data, Index, logs, other files
∙
mysqld и его файлы
∙ Коннекторы
∙ Оптимизатор
∙ Кэши
∙ Табличные движки
∙ Управление
Архитектура MySQL
6
∙
Владеют данными
∙
Собственный формат индексов
∙
Собственные блокировки
∙
Собственная диагностика
∙ Собственные журналы
∙ CHECK TABLE
Табличные Движки
7
∙
InnoDB
∙ Сначала пишет в redo log и buffer pool
∙ Асинхронно копирует в файлы таблиц
∙
Мы не можем скопировать только tablespaces
сразу после записи: новые данные будут
только в redo logs и buffer pool
Каждый Хранит Данные По-своему
8
∙
InnoDB
∙
MyISAM, CSV, ...
∙ Сразу изменяет файлы данных
∙ Просто реализовать бинарный бэкап
∙
Изменения нельзя откатить
Каждый Хранит Данные По-своему
8
∙
InnoDB
∙
MyISAM, CSV, ...
∙
Blackhole
∙ Игнорирует все записи
Каждый Хранит Данные По-своему
8
∙
InnoDB
∙
MyISAM, CSV, ...
∙
Blackhole
∙
Federated
∙ Читает и пишет с удалённого сервера
∙ Зависит от соединения и табличного движка
оригинальной таблицы
Каждый Хранит Данные По-своему
8
∙ Сервер
∙ Метаданных (MDL) защищают структуру
∙ Табличные защищают данные
Имплицитно
LOCK TABLES
Взаимодействие с Сервером: Блокировки
9
∙ Сервер
∙ Табличный движок
∙ Строковые
∙
Табличные
∙ Какие угодно
∙ Не коррелируют с серверными
Взаимодействие с Сервером: Блокировки
9
∙ Сервер
∙ Табличный движок
∙ Возможны неопределяемые "дедлоки"
Взаимодействие с Сервером: Блокировки
9
∙ Обычно префиксом engine_name_
∙ У MyISAM есть несколько исключений
Как Найти Опции Движка?
10
∙ Обычно начинаются с engine_name
∙ myisamchk
∙
myisam_ftdump
∙ myisampack
Как Найти Инструменты Движка?
11
∙ Обычно начинаются с engine_name
∙ Иногда только часть engine_name
∙ innochecksum
∙
tokuftdump
∙ tokuft_logprint
Как Найти Инструменты Движка?
11
Табличные Движки
InnoDB
∙
Транзакционный
∙ Каждый запрос - часть транзакции!
∙ Даже SELECT
READ ONLY транзакции в 5.6+
InnoDB Вкратце
13
∙
Транзакционный
∙
Поддерживает MVCC
∙ Хранит старые версии до тех пор пока все
транзакции, которые могут их запросить,
завершили работу
InnoDB Вкратце
13
∙
Транзакционный
∙
Поддерживает MVCC
∙
ACID
∙ Atomicity
∙ Consistency
∙
Isolation
∙ Durability
InnoDB Вкратце
13
∙
Транзакционный
∙
Поддерживает MVCC
∙
ACID
∙
Физическое расположение
∙ Системный (shared) tablespace
∙ Redo log
∙
Индивидуальные tablespaces
InnoDB Вкратце
13
∙ Системный tablespace
∙
InnoDB data dictionary
Метаданные
∙ Doublewrite buffer
Хранит страницу после удаления из Buffer Pool и до записи в нужное место
Для восстановления после крэша во время записи страницы
∙ Change buffer
Кэш изменений вторичных индексов
Если их нет в Buffer Pool
∙ Undo log (rollback segment)
Копии данных, изменённых активными транзакциями
Могут храниться отдельно в 5.6+
Структуры InnoDB
14
∙ Системный tablespace
∙ Buffer pool
∙ В памяти
∙
Кэш данных и индексов
∙ Устаревшие данные удаляются с применением
LRU алгоритма
Структуры InnoDB
14
∙ Системный tablespace
∙ Buffer pool
∙ Redo log
∙ Кодированные изменения страниц
∙
Записываются в циклической манере
∙
Незавершенные записи в файлы таблиц
проигрываются из журнала после крэша
Структуры InnoDB
14
∙ Системный tablespace
∙ Buffer pool
∙ Redo log
∙
File-Per-Table Tablespaces
∙ Данные и индексы таблицы
∙ Поддерживают разные форматы
∙
Могут храниться на разных дисках
Структуры InnoDB
14
∙ Больше потоков - больше работы может
быть выполнено одновременно
Конкуренция
15
∙ Больше потоков - больше работы может
быть выполнено одновременно
∙
Поток InnoDB ̸= соединение
∙ Соединения могут бездействовать пока
InnoDB выполняет свою работу
∙ Если активных соединений (Running_threads)
больше, чем потоков InnoDB
Часть ждёт в очереди
Конкуренция
15
∙ Больше потоков - больше работы может
быть выполнено одновременно
∙
Поток InnoDB ̸= соединение
∙
Ограничено количеством ядер CPU
Конкуренция
15
∙ Больше потоков - больше работы может
быть выполнено одновременно
∙
Поток InnoDB ̸= соединение
∙
Ограничено количеством ядер CPU
∙ Слишком большое количество потоков
может привести к конфликтам
∙
Производительность уменьшится
∙ Сервер зависнет!
Конкуренция
15
∙ Больше потоков - больше работы может
быть выполнено одновременно
∙
Поток InnoDB ̸= соединение
∙
Ограничено количеством ядер CPU
∙ Слишком большое количество потоков
может привести к конфликтам
∙ innodb_thread_concurrency
Конкуренция
15
1 2 4 8 16 32 64 128 256
10
15
20
Number of threads
Transactionspersecond
Taken on 8-cores laptop
Неоправданно большое количество потоков
16
∙
Меньше записи-чтения
∙
Больше производительность
∙
Выше риск потери данных
Ввод-Вывод: Производительность
17
∙
Меньше записи-чтения
∙
Больше производительность
∙
Выше риск потери данных
∙
Не всегда нужно снижать количество
операций ввода-вывода
∙
Быстрые диски
∙ Приложение много пишет
Ввод-Вывод: Производительность
17
∙ Обязательные
∙ innodb_flush_method
∙
innodb_log_file_size
∙ innodb_io_capacity
Настройка ввода-вывода для InnoDB
18
∙ Обязательные
∙ С риском потери данных
∙ innodb_doublewrite
∙
innodb_flush_log_at_trx_commit
∙ innodb_flush_log_at_timeout
∙ Изменяйте только на репликах!
Настройка ввода-вывода для InnoDB
18
∙ innodb_buffer_pool_size
∙ innodb_log_file_size
∙ innodb_thread_concurrency
∙ innodb_io_capacity
∙ innodb_flush_method
Топ настроек InnoDB
19
Репликация
∙
Начиная с очень ранних версий
Репликация в MySQL
21
∙
Начиная с очень ранних версий
∙
Легко использовать
Репликация в MySQL
21
∙
Начиная с очень ранних версий
∙
Легко использовать
∙
Минимальные настройки
Репликация в MySQL
21
∙
Мастер
∙
–log-bin
∙
–server-id
∙ GRANT REPLICATION SLAVE ON *.* ...
Как включить
22
∙
Мастер
∙
–log-bin
∙
–server-id
∙ GRANT REPLICATION SLAVE ON *.* ...
∙ Слейв
∙
–server-id
∙ CHANGE MASTER ...
∙ START SLAVE
Как включить
22
Простая
23
Круговая
24
Звезда
25
Креативная
26
Мастер Слейв
← Инициирует
Асинхронная
27
Мастер Слейв
← Инициирует
← Запрашивает пакет
Асинхронная
27
Мастер
Пересылает пакет →
Слейв
← Инициирует
← Запрашивает пакет
Асинхронная
27
Мастер
Пересылает пакет →
Слейв
← Инициирует
← Запрашивает пакет
... ?
Асинхронная
27
IO thread
Читает с мастера
SQL thread
Два Типа Потоков Слейва
28
IO thread
Читает с мастера
Записывает в relay log
SQL thread
Два Типа Потоков Слейва
28
IO thread
Читает с мастера
Записывает в relay log
SQL thread
← Читает из relay log
Два Типа Потоков Слейва
28
IO thread
Читает с мастера
Записывает в relay log
SQL thread
← Читает из relay log
Выполняет
Два Типа Потоков Слейва
28
∙
Прост в отладке
Единственный SQL Thread
29
∙
Прост в отладке
∙
Обычно медленнее мастера
∙
Высоконкурентная нагрузка
Единственный SQL Thread
29
Записи на Мастере
30
Записи на Слейве: Один SQL Thread
31
Несколько SQL Threads: 5.6+
32
Master
Получает изменение
Табличный Движок
Логическая
33
Master
Получает изменение
Передаёт движку →
Табличный Движок
Логическая
33
Master
Получает изменение
Передаёт движку →
Табличный Движок
Пишет в таблицу
Логическая
33
Master
Получает изменение
Передаёт движку →
Табличный Движок
Пишет в таблицу
← Возвращает контроль
Логическая
33
Master
Получает изменение
Передаёт движку →
Пишет в binary log
Табличный Движок
Пишет в таблицу
← Возвращает контроль
Логическая
33
Master
Получает изменение
Передаёт движку →
Пишет в binary log
Синхронизируется →
Табличный Движок
Пишет в таблицу
← Возвращает контроль
← Синхронизируется
Логическая
33
Клиент Binary log
Statement-Based Binary Log Format
34
Клиент
INSERT INTO ... →
Binary log
Statement-Based Binary Log Format
34
Клиент
INSERT INTO ... →
Binary log
SET TIMESTAMP...
Statement-Based Binary Log Format
34
Клиент
INSERT INTO ... →
Binary log
SET TIMESTAMP...
SET sql_mode...
Statement-Based Binary Log Format
34
Клиент
INSERT INTO ... →
Binary log
SET TIMESTAMP...
SET sql_mode...
INSERT INTO ...
Statement-Based Binary Log Format
34
Клиент Binary log
Row-Based Binary Log Format
35
Клиент
UPDATE ... →
Binary log
Row-Based Binary Log Format
35
Клиент
UPDATE ... →
Binary log
SET TIMESTAMP...
Row-Based Binary Log Format
35
Клиент
UPDATE ... →
Binary log
SET TIMESTAMP...
SET sql_mode...
Row-Based Binary Log Format
35
Клиент
UPDATE ... →
Binary log
SET TIMESTAMP...
SET sql_mode...
Строка до изменений
Row-Based Binary Log Format
35
Клиент
UPDATE ... →
Binary log
SET TIMESTAMP...
SET sql_mode...
Строка до изменений
Строка с изменениями
Row-Based Binary Log Format
35
∙
Нужно указать
∙
Название binary log
∙
Позицию
Позиционная
36
∙
Нужно указать
∙
Название binary log
∙
Позицию
∙
С точки зрения отладки
∙ Выполнение с указанной позиции
Позиционная
36
∙
Нужно указать
∙
Название binary log
∙
Позицию
∙
С точки зрения отладки
∙ Выполнение с указанной позиции
∙
Легко пропустить
Позиционная
36
∙
Нужно указать
∙
Название binary log
∙
Позицию
∙
С точки зрения отладки
∙ Выполнение с указанной позиции
∙
Легко пропустить
∙ Легко переместить назад
Позиционная
36
∙
Нужно указать
∙
Название binary log
∙
Позицию
∙
С точки зрения отладки
∙ Выполнение с указанной позиции
∙
Легко пропустить
∙ Легко переместить назад
∙ Все конфликты - ваши
Позиционная
36
∙ У каждой транзакции свой номер: GTID
Global Transaction Identifiers (GTID)
37
∙ У каждой транзакции свой номер: GTID
∙ Название binary log и позиция не нужны
∙ AUTO_POSITION=1
Global Transaction Identifiers (GTID)
37
∙ У каждой транзакции свой номер: GTID
∙ Название binary log и позиция не нужны
∙ Сложно пропустить ошибочные записи
Global Transaction Identifiers (GTID)
37
∙ У каждой транзакции свой номер: GTID
∙ Название binary log и позиция не нужны
∙ Сложно пропустить ошибочные записи
∙ Не все команды разрешены
∙ Транзакционные и нетранзакционные движки
∙ CREATE TABLE ... SELECT
∙ Временные таблицы
8.0.13+: разрешены при RBR
Global Transaction Identifiers (GTID)
37
∙ Синхронизация binary log и таблицы
Табличные Движки и Репликация
38
∙ Синхронизация binary log и таблицы
∙ SBR и transaction isolation levels
mysql> set transaction isolation level read committed;
Query OK, 0 rows affected (0,00 sec)
mysql> update t1 set f1=f1*2;
ERROR 1665 (HY000): Cannot execute statement: impossible to write to binary log since
BINLOG_FORMAT = STATEMENT and at least one table uses a storage engine limited to
row-based logging. InnoDB is limited to row-logging when transaction isolation level
is READ COMMITTED or READ UNCOMMITTED.
Табличные Движки и Репликация
38
∙ Синхронизация binary log и таблицы
∙ SBR и transaction isolation levels
∙ RBR - независимый от движка формат
Табличные Движки и Репликация
38
∙ Синхронизация binary log и таблицы
∙ SBR и transaction isolation levels
∙ RBR - независимый от движка формат
∙
GTIDs независимы от движка
Табличные Движки и Репликация
38
∙ Синхронизация binary log и таблицы
∙ SBR и transaction isolation levels
∙ RBR - независимый от движка формат
∙
GTIDs независимы от движка
∙
У движка могут быть свои специфические
фичи для репликации
∙ Read free репликация в TokuDB
Табличные Движки и Репликация
38
NoSQL
∙ Функции JSON
∙ MySQL Shell
∙ Document Store
∙
Memcached API
Что Поддерживает MySQL
40
∙ Манипулируют документами JSON
∙
Создают
JSON_OBJECT
JSON_ARRAY
∙ Ищут
JSON_EXTRACT
column->path
∙
Модифицируют
JSON_INSERT
JSON_SET
Функции JSON
41
∙ Манипулируют документами JSON
∙ Тип данных JSON
∙ Оптимизированное хранилище
∙
Автоматическая валидация
Функции JSON
41
∙ Манипулируют документами JSON
∙ Тип данных JSON
∙ Может работать со строками
∙ Медленно
∙ Автоматическая валидация не
поддерживается
Функции JSON
41
∙
Командный клиент
∙
Поддерживает Python и JavaScript
MySQL Shell
42
∙ Доступ из MySQL Shell
∙ Поддерживает
∙ Python, JavaScript, C#, C++, Java
∙ Your driver
∙ X Plugin: асинхронный клиент
X Protocol
X DevAPi
∙ Данные хранятся в реляционном формате
MySQL как Document Store
43
∙ Интерфейс к memcached
∙ Доступ ключ-значение
∙ Данные хранятся в InnoDB
∙ Могут быть кэшированы
∙
Кэш может быть настроен для высокой
производительности
∙ Умолчания: только прямой доступ, высокая
надёжности, фактически никакого кэша
Memcached API
44
∙ Вебинары
Introduction to MySQL Troubleshooting
Storage engines troubleshooting
InnoDB Troubleshooting
MySQL Replication Troubleshooting
Дополнительная Информация
45
∙ Мануалы
The InnoDB Storage Engine
Replication
JSON Functions
MySQL as a Document Store
InnoDB memcached Plugin
Дополнительная Информация
45
www.slideshare.net/SvetaSmirnova
twitter.com/svetsmirnova
github.com/svetasmirnova
Спасибо!
46
DATABASE PERFORMANCE
MATTERS

More Related Content

PDF
Отладка производительности СУБД MySQL
PDF
Асинхронная репликация без цензуры: архитектурные проблемы MySQL, или почему ...
PDF
Эффективная отладка репликации MySQL
PDF
NDC2013 - 심리학으로 다시 보는 게임 디자인
PDF
Datomic - Lidando com dados de maneira versionada
PDF
양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012
PDF
〈야생의 땅: 듀랑고〉 서버 아키텍처 Vol. 3
PDF
게임 개발자들을 위한 마케팅 상식 (BDC 발표)
Отладка производительности СУБД MySQL
Асинхронная репликация без цензуры: архитектурные проблемы MySQL, или почему ...
Эффективная отладка репликации MySQL
NDC2013 - 심리학으로 다시 보는 게임 디자인
Datomic - Lidando com dados de maneira versionada
양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012
〈야생의 땅: 듀랑고〉 서버 아키텍처 Vol. 3
게임 개발자들을 위한 마케팅 상식 (BDC 발표)

What's hot (20)

PDF
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
PPTX
Next-generation MMORPG service architecture
PDF
실시간 게임 서버 최적화 전략
PPTX
라이브 서비스를 위한 게임 서버 구성
PDF
[NDC2017 : 박준철] Python 게임 서버 안녕하십니까 - 몬스터 슈퍼리그 게임 서버
PPTX
プログラマに優しいバグレポートの書き方
PPTX
김동건, 할머니가 들려주신 마비노기 개발 전설, NDC2019
PDF
신입 개발자 생활백서 [개정판]
PPTX
[KGC2014] 두 마리 토끼를 잡기 위한 C++ - C# 혼합 멀티플랫폼 게임 아키텍처 설계
PDF
프로그래머에게 사랑받는 게임 기획서 작성법
PPTX
NDC 11 자이언트 서버의 비밀
PDF
[2019] 게임 서버 대규모 부하 테스트와 모니터링 이렇게 해보자
PPTX
Apresentação jn andrews e primeira igreja portugues
PDF
임태현, 게임 서버 디자인 가이드, NDC2013
PPTX
Ndc14 분산 서버 구축의 ABC
PDF
[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)
PPTX
[0410 박민근] 기술 면접시 자주 나오는 문제들
PDF
NDC12 인디게임 개발 시 주의할 점
PDF
중앙 서버 없는 게임 로직
PDF
[IGC 2017] 아마존 구승모 - 게임 엔진으로 서버 제작 및 운영까지
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
Next-generation MMORPG service architecture
실시간 게임 서버 최적화 전략
라이브 서비스를 위한 게임 서버 구성
[NDC2017 : 박준철] Python 게임 서버 안녕하십니까 - 몬스터 슈퍼리그 게임 서버
プログラマに優しいバグレポートの書き方
김동건, 할머니가 들려주신 마비노기 개발 전설, NDC2019
신입 개발자 생활백서 [개정판]
[KGC2014] 두 마리 토끼를 잡기 위한 C++ - C# 혼합 멀티플랫폼 게임 아키텍처 설계
프로그래머에게 사랑받는 게임 기획서 작성법
NDC 11 자이언트 서버의 비밀
[2019] 게임 서버 대규모 부하 테스트와 모니터링 이렇게 해보자
Apresentação jn andrews e primeira igreja portugues
임태현, 게임 서버 디자인 가이드, NDC2013
Ndc14 분산 서버 구축의 ABC
[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)
[0410 박민근] 기술 면접시 자주 나오는 문제들
NDC12 인디게임 개발 시 주의할 점
중앙 서버 없는 게임 로직
[IGC 2017] 아마존 구승모 - 게임 엔진으로 서버 제작 및 운영까지
Ad

Similar to Что нужно знать о трёх топовых фичах MySQL (20)

PDF
SQL-ник DevDay. Рубцов. Новое в Percona Server и MariaDB в сравнении с MySQL 5.5
PDF
Эффективная отладка репликации MySQL / Света Смирнова (Percona)
PDF
Павел Пушкарев - Базы данных: легковесная реляционная высокопроизводительная ...
PDF
Percona XtraBackup: экспертные возможности (Алексей Копытов)
PDF
"Новые возможности MySQL 5.7"
PDF
My sql 5.6-new-stable-mmug
PDF
CQRS на практике. В поиске точки масштабирования и новых метафор
PDF
Эволюция репликации в MySQL и MariaDB
PDF
Devconf2013 new-features-in-mysql-and-mariadb
PDF
Решения DEPO Computers для консолидации данных и серверной виртуализации на б...
PDF
Евгений Лазин. Неизменяемая структура данных HAMT для создания БД в памяти
PDF
Purely practical data structures
PDF
CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...
PDF
MyBatis и Hibernate на одном проекте. Как подружить?
PDF
CodeFest 2013. Зиновьев А. — MyBatis & Hibernate, давайте жить дружно!
PPTX
Вебинар «Обмен данными между 1С: Конвертация данных 3.0»
PPTX
Breaking logs
PDF
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...
PPT
Introduction to MongoDB
PDF
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
SQL-ник DevDay. Рубцов. Новое в Percona Server и MariaDB в сравнении с MySQL 5.5
Эффективная отладка репликации MySQL / Света Смирнова (Percona)
Павел Пушкарев - Базы данных: легковесная реляционная высокопроизводительная ...
Percona XtraBackup: экспертные возможности (Алексей Копытов)
"Новые возможности MySQL 5.7"
My sql 5.6-new-stable-mmug
CQRS на практике. В поиске точки масштабирования и новых метафор
Эволюция репликации в MySQL и MariaDB
Devconf2013 new-features-in-mysql-and-mariadb
Решения DEPO Computers для консолидации данных и серверной виртуализации на б...
Евгений Лазин. Неизменяемая структура данных HAMT для создания БД в памяти
Purely practical data structures
CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...
MyBatis и Hibernate на одном проекте. Как подружить?
CodeFest 2013. Зиновьев А. — MyBatis & Hibernate, давайте жить дружно!
Вебинар «Обмен данными между 1С: Конвертация данных 3.0»
Breaking logs
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...
Introduction to MongoDB
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
Ad

More from Sveta Smirnova (20)

PDF
War Story: Removing Offensive Language from Percona Toolkit
PDF
MySQL 2024: Зачем переходить на MySQL 8, если в 5.х всё устраивает?
PDF
Database in Kubernetes: Diagnostics and Monitoring
PDF
MySQL Database Monitoring: Must, Good and Nice to Have
PDF
MySQL Cookbook: Recipes for Developers
PDF
MySQL Performance for DevOps
PDF
MySQL Test Framework для поддержки клиентов и верификации багов
PDF
MySQL Cookbook: Recipes for Your Business
PDF
Introduction into MySQL Query Tuning for Dev[Op]s
PDF
Производительность MySQL для DevOps
PDF
MySQL Performance for DevOps
PDF
How to Avoid Pitfalls in Schema Upgrade with Percona XtraDB Cluster
PDF
How to migrate from MySQL to MariaDB without tears
PDF
Modern solutions for modern database load: improvements in the latest MariaDB...
PDF
How Safe is Asynchronous Master-Master Setup?
PDF
Современному хайлоду - современные решения: MySQL 8.0 и улучшения Percona
PDF
How to Avoid Pitfalls in Schema Upgrade with Galera
PDF
How Safe is Asynchronous Master-Master Setup?
PDF
Introduction to MySQL Query Tuning for Dev[Op]s
PDF
Billion Goods in Few Categories: How Histograms Save a Life?
War Story: Removing Offensive Language from Percona Toolkit
MySQL 2024: Зачем переходить на MySQL 8, если в 5.х всё устраивает?
Database in Kubernetes: Diagnostics and Monitoring
MySQL Database Monitoring: Must, Good and Nice to Have
MySQL Cookbook: Recipes for Developers
MySQL Performance for DevOps
MySQL Test Framework для поддержки клиентов и верификации багов
MySQL Cookbook: Recipes for Your Business
Introduction into MySQL Query Tuning for Dev[Op]s
Производительность MySQL для DevOps
MySQL Performance for DevOps
How to Avoid Pitfalls in Schema Upgrade with Percona XtraDB Cluster
How to migrate from MySQL to MariaDB without tears
Modern solutions for modern database load: improvements in the latest MariaDB...
How Safe is Asynchronous Master-Master Setup?
Современному хайлоду - современные решения: MySQL 8.0 и улучшения Percona
How to Avoid Pitfalls in Schema Upgrade with Galera
How Safe is Asynchronous Master-Master Setup?
Introduction to MySQL Query Tuning for Dev[Op]s
Billion Goods in Few Categories: How Histograms Save a Life?

Что нужно знать о трёх топовых фичах MySQL