Опубликовано

Новая книга: “Изучаем MySQL. 2-е издание”

Изучаем MySQL. 2-е издание

Книга знакомит с MySQL — самой популярной системой управления базами данных с открытым исходным кодом. Изложены основы MySQL: установка, моделирование и конструирование баз данных, команды SQL и создание новой базы данных. Рассмотрены практически вопросы работы с MySQL: расширенные запросы, транзакции и замковый механизм, проверка эффективности запросов, управление пользователями и привилегиями, использование файлов опций, резервное копирование и восстановление, конфигурирование и настройка сервераОтдельное внимание уделено мониторингу серверов MySQL, асинхронной и синхронной репликации, кластерным решениям, работе в облаке, балансировке нагрузки и другим продвинутым методам и инструментам.

Электронный архив на сайте издательства содержит цветные иллюстрации к книге.

Для программистов баз данных

Возьмите свои данные под контроль

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

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

Вы узнаете, как:

  • Начинать работу с реляционной СУБД MySQL и управлять данными
  • Развертывать базы данных MySQL на “голом железе”, на виртуальных машинах и в облаке
  • Конструировать инфраструктуры базы данных
  • Кодировать высокоэффективные запросы
  • Обеспечивать мониторинг и устранять неполадки баз данных MySQL
  • Выполнять эффективные операции резервного копирования и восстановления
  • Оптимизировать издержки баз данных в облаке
  • Понимать концепции баз данных, в особенности те, которые относятся к MySQL

Книгу “Изучаем MySQL. 2-е издание” можно купить со скидкой в интернет-магазине издательства “БХВ“.

Отзывы………………………………………………………………………………………………….. 13

Об авторах……………………………………………………………………………………………… 14

Благодарности……………………………………………………………………………………….. 15

Предисловие…………………………………………………………………………………………… 17

Для кого эта книга предназначена…………………………………………………………………………………………… 17

Как эта книга организована……………………………………………………………………………………………………… 18

Начало работы с MySQL………………………………………………………………………………………………….. 18

Использование MySQL……………………………………………………………………………………………………… 18

MySQL в производстве……………………………………………………………………………………………………… 19

Прочие темы………………………………………………………………………………………………………………………. 20

Исходный код и иллюстрации………………………………………………………………………………………………….. 20

Условные обозначения в книге…………………………………………………………………………………………………. 20

Глава 1. Установка MySQL……………………………………………………………………. 23

Развилки MySQL………………………………………………………………………………………………………………………… 24

Редакция MySQL для сообщества……………………………………………………………………………………. 24

Сервер Percona для MySQL………………………………………………………………………………………………. 24

Сервер MariaDB…………………………………………………………………………………………………………………. 24

Редакция MySQL для предприятий………………………………………………………………………………….. 25

Варианты инсталляции и платформы……………………………………………………………………………………… 25

  1. Скачать дистрибутив, который вы хотите инсталлировать……………………………………… 26
  2. Установить дистрибутив………………………………………………………………………………………………. 26
  3. Выполнить все необходимые постинсталляционные настройки……………………………… 27
  4. Выполнить контрольные нагрузочные тесты……………………………………………………………… 27

Установка MySQL в Linux………………………………………………………………………………………………………… 27

Инсталлирование MySQL в CentOS 7……………………………………………………………………………… 27

Инсталлирование MySQL 8.0………………………………………………………………………………….. 28

Инсталлирование MariaDB 10.5……………………………………………………………………………… 31

Инсталлирование сервера Percona Server 8.0…………………………………………………………. 32

Инсталлирование MySQL 5.7………………………………………………………………………………….. 33

Инсталлирование Percona Server 5.7……………………………………………………………………….. 34

Инсталлирование MySQL в CentOS 8……………………………………………………………………………… 35

Инсталлирование MySQL 8.0………………………………………………………………………………….. 35

Инсталлирование сервера Percona Server 8.0…………………………………………………………. 36

Инсталлирование MySQL 5.7………………………………………………………………………………….. 39

Инсталлирование MySQL в Ubuntu 20.04 LTS (Focal Fossa)…………………………………………. 41

Инсталлирование MySQL 8.0………………………………………………………………………………….. 41

Инсталлирование сервера Percona Server 8……………………………………………………………. 44

Инсталлирование MariaDB 10.5……………………………………………………………………………… 45

Инсталлирование MySQL 5.7………………………………………………………………………………….. 46

Установка MySQL в macOS Big Sur………………………………………………………………………………………….. 49

Инсталлирование MySQL 8……………………………………………………………………………………………… 49

Установка MySQL в Windows 10………………………………………………………………………………………………. 55

Содержимое каталога MySQL………………………………………………………………………………………………….. 62

Файлы MySQL 5.7, используемые по умолчанию………………………………………………………….. 63

Файлы MySQL 8.0, используемые по умолчанию………………………………………………………….. 66

Использование интерфейса командной строки………………………………………………………………………. 66

Использование Docker……………………………………………………………………………………………………………….. 67

Установка Docker………………………………………………………………………………………………………………. 67

Инсталлирование Docker в CentOS 7………………………………………………………………………. 68

Инсталлирование Docker в Ubuntu 20.04 (Focal Fossa)…………………………………………. 68

Развертывание контейнера MySQL…………………………………………………………………………. 69

Развертывание контейнеров MariaDB и Percona Server…………………………………………. 71

Использование симулированных производственных сред……………………………………………………. 72

Инсталлирование DBdeployer………………………………………………………………………………………….. 73

Использование DBdeployer……………………………………………………………………………………………….. 73

Модернизация сервера MySQL………………………………………………………………………………………………… 77

Глава 2. Моделирование и конструирование баз данных………………………. 81

Как не надо разрабатывать базу данных……………………………………………………………………………….. 81

Процесс конструирования базы данных…………………………………………………………………………………. 83

Модель взаимосвязей сущностей……………………………………………………………………………………………… 84

Представление сущностей………………………………………………………………………………………………… 84

Представление взаимосвязей……………………………………………………………………………………………. 87

Частичное и полное участие…………………………………………………………………………………………….. 89

Сущность или атрибут?……………………………………………………………………………………………………. 89

Сущность или взаимосвязь?……………………………………………………………………………………………… 91

Промежуточные сущности……………………………………………………………………………………………….. 91

Слабые и сильные сущности……………………………………………………………………………………………. 92

Нормализация базы данных…………………………………………………………………………………………………….. 94

Нормализация таблицы образцов……………………………………………………………………………………………. 96

Первая нормальная форма: никаких повторяющихся групп…………………………………………. 96

Вторая нормальная форма: устранить избыточные данные………………………………………… 97

Третья нормальная форма: исключить данные, не зависящие от ключа……………………… 97

Примеры моделирования взаимосвязей сущностей……………………………………………………………….. 98

Использование модели взаимосвязей сущностей…………………………………………………………………. 102

Соотнесение сущностей и взаимосвязей с таблицами базы данных………………………….. 103

Соотнести сущности с таблицами базы данных…………………………………………………. 104

Соотнесите взаимосвязи с таблицами базы данных……………………………………………. 104

Создание модели взаимосвязей сущностей банковской базы данных……………………….. 104

Взаимосвязь “многие ко многим” (N:M)…………………………………………………………………. 105

Взаимосвязь “один ко многим” (1:N)……………………………………………………………………… 105

Конвертирование EER в базу данных MySQL с помощью
инструмента Workbench…………………………………………………………………………………………………. 106

Глава 3. Базовый SQL………………………………………………………………………….. 111

Использование базы данных sakila……………………………………………………………………………………….. 112

Инструкция SELECT и базовые приемы выполнения запросов…………………………………………… 114

Однотабличные инструкции SELECT……………………………………………………………………………. 115

Выбор столбцов………………………………………………………………………………………………………………. 116

Отбор строк с помощью компонента WHERE……………………………………………………………….. 118

Основы WHERE……………………………………………………………………………………………………….. 118

Комбинирование условий с AND, OR, NOT и XOR……………………………………………….. 122

Компонент ORDER BY……………………………………………………………………………………………………… 127

Компонент LIMIT……………………………………………………………………………………………………………… 129

Соединение двух таблиц………………………………………………………………………………………… 131

Инструкция INSERT…………………………………………………………………………………………………………………. 133

Основы INSERT………………………………………………………………………………………………………………… 133

Альтернативные синтаксические конструкции…………………………………………………………….. 136

Инструкция DELETE………………………………………………………………………………………………………………… 139

Основы DELETE……………………………………………………………………………………………………………….. 139

Использование WHERE, ORDER BY и LIMIT………………………………………………………………….. 140

Удаление всех строк с помощью TRUNCATE……………………………………………………………….. 141

Инструкция UPDATE……………………………………………………………………………………………………………….. 142

Примеры…………………………………………………………………………………………………………………………… 142

Использование WHERE, ORDER BY и LIMIT………………………………………………………………….. 143

Разведывательный анализ баз данных и таблиц с помощью SHOW и mysqlshow……………… 144

Глава 4. Работа со структурами базы данных………………………………………. 149

Создание и использование баз данных…………………………………………………………………………………. 149

Создание таблиц……………………………………………………………………………………………………………………… 152

Основы……………………………………………………………………………………………………………………………… 152

Порядок расстановки и наборы символов…………………………………………………………………….. 155

Другие функциональные возможности………………………………………………………………………….. 158

Типы столбцов…………………………………………………………………………………………………………………. 160

Целочисленные типы……………………………………………………………………………………………… 161

Типы с фиксированной точкой………………………………………………………………………………. 163

Типы с плавающей точкой…………………………………………………………………………………….. 164

Строковые типы………………………………………………………………………………………………………. 167

Типы даты и времени……………………………………………………………………………………………… 177

Другие типы…………………………………………………………………………………………………………….. 183

Ключи и индексы…………………………………………………………………………………………………………….. 183

Функциональность AUTO_INCREMENT………………………………………………………………………… 190

Изменение структур…………………………………………………………………………………………………………………. 193

Добавление, удаление и изменение столбцов………………………………………………………………. 193

Добавление, удаление и изменение индексов……………………………………………………………….. 197

Переименование таблиц и изменение других структур……………………………………………….. 199

Удаление структур………………………………………………………………………………………………………………….. 200

Удаление баз данных……………………………………………………………………………………………………… 200

Удаление таблиц……………………………………………………………………………………………………………… 201

Глава 5. Расширенные запросы……………………………………………………………. 203

Псевдонимы……………………………………………………………………………………………………………………………… 203

Псевдонимы столбцов…………………………………………………………………………………………………….. 204

Псевдонимы таблиц………………………………………………………………………………………………………… 206

Агрегирование данных……………………………………………………………………………………………………………. 209

Компонент DISTINCT………………………………………………………………………………………………………. 209

Компонент GROUP BY…………………………………………………………………………………………………….. 211

Агрегатные функции……………………………………………………………………………………………….. 218

Компонент HAVING…………………………………………………………………………………………………………. 219

Расширенные соединения……………………………………………………………………………………………………….. 221

Внутреннее соединение………………………………………………………………………………………………….. 221

Объединение…………………………………………………………………………………………………………………….. 224

Левое и правое соединения…………………………………………………………………………………………….. 231

Естественное соединение……………………………………………………………………………………………….. 235

Постоянные выражения в соединениях…………………………………………………………………………. 237

Вложенные запросы………………………………………………………………………………………………………………… 239

Основы вложенных запросов…………………………………………………………………………………………. 240

Компоненты ANY, SOME, ALL, IN и NOT IN…………………………………………………………………… 243

Использование ANY и IN…………………………………………………………………………………………. 244

Использование ALL…………………………………………………………………………………………………. 247

Написание строковых подзапросов……………………………………………………………………… 249

Компоненты EXISTS и NOT EXISTS………………………………………………………………………………… 250

Основы EXISTS и NOT EXISTS………………………………………………………………………………… 251

Коррелированные подзапросы……………………………………………………………………………… 252

Вложенные запросы в компоненте FROM…………………………………………………………………….. 256

Вложенные запросы в соединениях………………………………………………………………………………. 258

Пользовательские переменные……………………………………………………………………………………………….. 260

Глава 6. Транзакции и замковый механизм…………………………………………. 265

Уровни изоляции……………………………………………………………………………………………………………………… 266

REPEATABLE READ…………………………………………………………………………………………………………. 268

READ COMMITTED………………………………………………………………………………………………………….. 269

READ UNCOMMITTED…………………………………………………………………………………………………….. 270

SERIALIZABLE………………………………………………………………………………………………………………….. 271

Применение замков………………………………………………………………………………………………………………….. 274

Замки на основе метаданных…………………………………………………………………………………………. 275

Строковые замки……………………………………………………………………………………………………………… 280

Тупики………………………………………………………………………………………………………………………………. 283

Параметры MySQL, связанные с изоляцией и замками……………………………………………………….. 285

Глава 7. Достижение большего с MySQL……………………………………………… 287

Вставка данных с помощью запросов…………………………………………………………………………………… 287

Загрузка данных из файлов c разделителями-запятыми……………………………………………………… 293

Выгрузка данных в файлы с разделителями-запятыми……………………………………………………….. 301

Создание таблиц с помощью запросов………………………………………………………………………………….. 303

Выполнение многотабличных обновлений и удалений………………………………………………………. 308

Удаление………………………………………………………………………………………………………………………….. 308

Обновления………………………………………………………………………………………………………………………. 313

Замена данных…………………………………………………………………………………………………………………………. 314

Инструкция EXPLAIN………………………………………………………………………………………………………………. 318

Альтернативные механизмы хранения данных……………………………………………………………………. 324

InnoDB……………………………………………………………………………………………………………………………… 326

MyISAM и Aria…………………………………………………………………………………………………………………. 328

MyRocks и TokuDB…………………………………………………………………………………………………………. 329

Другие табличные типы………………………………………………………………………………………………….. 331

Глава 8. Управление пользователями и привилегиями………………………… 333

Пользователи и привилегии……………………………………………………………………………………………………. 333

Корневой пользователь…………………………………………………………………………………………………………… 335

Создание и использование новых пользователей………………………………………………………………… 336

Таблицы привилегий……………………………………………………………………………………………………………….. 343

Команды управления пользователями и журналирование…………………………………………………. 345

Модифицирование и удаление пользователей……………………………………………………………………… 347

Модифицирование пользователя…………………………………………………………………………………… 347

Удаление пользователя…………………………………………………………………………………………………… 351

Привилегии……………………………………………………………………………………………………………………………….. 355

Статические и динамические привилегии…………………………………………………………………….. 357

SUPER-привилегия…………………………………………………………………………………………………………… 358

Команды управления привилегиями……………………………………………………………………………… 359

GRANT………………………………………………………………………………………………………………………. 359

REVOKE……………………………………………………………………………………………………………………. 361

Проверка привилегий………………………………………………………………………………………………………. 362

Привилегия GRANT OPTION……………………………………………………………………………………………. 365

Роли…………………………………………………………………………………………………………………………………………… 368

Изменение пароля пользователя root и небезопасный запуск…………………………………………….. 375

Несколько идей в отношении безопасной настройки…………………………………………………………… 376

Глава 9. Использование файлов опций………………………………………………… 379

Структура файла опций………………………………………………………………………………………………………….. 379

Диапазон опций……………………………………………………………………………………………………………………….. 384

Порядок поиска файлов опций……………………………………………………………………………………………….. 387

Специальные файлы опций…………………………………………………………………………………………………….. 388

Конфигурационный файл путей для входа…………………………………………………………………… 388

Конфигурационный файл хранимых на диске системных переменных…………………….. 391

Определение действующих опций…………………………………………………………………………………………. 393

Глава 10. Резервное копирование и восстановление…………………………….. 399

Физические и логические резервные копии…………………………………………………………………………… 399

Логические резервные копии………………………………………………………………………………………….. 400

Физические резервные копии………………………………………………………………………………………….. 402

Обзор логических и физических резервных копий……………………………………………………….. 404

Репликация как инструмент резервного копирования………………………………………………………….. 405

Отказ инфраструктуры……………………………………………………………………………………………………. 405

Дефект развертывания…………………………………………………………………………………………………….. 406

Программа mysqldump…………………………………………………………………………………………………………….. 406

Самогенерация репликации с помощью mysqldump…………………………………………………….. 412

Загрузка данных из файла дампа SQL…………………………………………………………………………………… 413

mysqlpump…………………………………………………………………………………………………………………………………. 414

mydumper и myloader……………………………………………………………………………………………………………….. 416

Холодное резервное копирование и моментальные снимки файловой системы……………….. 418

Percona XtraBackup…………………………………………………………………………………………………………………. 419

Резервное копирование и восстановление…………………………………………………………………….. 421

Продвинутые функциональные возможности………………………………………………………………. 424

Инкрементное резервное копирование с помощью XtraBackup…………………………………. 425

Другие средства физического резервного копирования………………………………………………………. 427

MySQL Enterprise Backup……………………………………………………………………………………………….. 428

mariabackup……………………………………………………………………………………………………………………… 428

Восстановление на определенный момент времени…………………………………………………………….. 429

Техническая информация о двоичных журналах………………………………………………………… 430

Поддержка двоичных журналов……………………………………………………………………………………. 431

Идентификация цели восстановления на определенный момент времени…………………. 432

Пример восстановления на определенный момент времени: XtraBackup…………………. 433

Пример восстановления на определенный момент времени: mysqldump…………………… 434

Экспортирование и импортирование табличных пространств InnoDB…………………………….. 435

Технические предпосылки……………………………………………………………………………………………… 436

Экспортирование табличного пространства……………………………………………………………….. 436

Импортирование табличного пространства…………………………………………………………………. 437

Однотабличная реконструкция с помощью XtraBackup……………………………………………… 439

Тестирование и верифицирование резервных копий……………………………………………………………. 440

Вводное пособие по стратегии резервного копирования баз данных………………………………… 442

Глава 11. Конфигурирование и настройка сервера………………………………. 445

Демон сервера MySQL…………………………………………………………………………………………………………….. 445

Переменные сервера MySQL………………………………………………………………………………………………….. 446

Проверка настроек сервера……………………………………………………………………………………………. 446

Лучшие образцы практики……………………………………………………………………………………………… 447

Лучшие образцы практики в работе с операционной системой………………………… 447

Лучшие образцы практики в работе с MySQL…………………………………………………….. 455

Глава 12. Мониторинг серверов MySQL……………………………………………….. 463

Метрики операционной системы……………………………………………………………………………………………. 464

Центральный процессор…………………………………………………………………………………………………. 464

Диск…………………………………………………………………………………………………………………………………… 473

Память………………………………………………………………………………………………………………………………. 478

Сеть…………………………………………………………………………………………………………………………………… 483

Наблюдаемость сервера MySQL……………………………………………………………………………………………. 488

Переменные состояния……………………………………………………………………………………………………. 488

Базовые рецепты мониторинга………………………………………………………………………………………. 491

Доступность сервера MySQL………………………………………………………………………………… 491

Клиентские подключения………………………………………………………………………………………. 492

Счетчики запросов………………………………………………………………………………………………….. 495

Типы и качество запросов……………………………………………………………………………………… 496

Метрики операций ввода-вывода и транзакций InnoDB…………………………………….. 501

Журнал медленных запросов…………………………………………………………………………………………. 506

Отчет о состоянии механизма InnoDB………………………………………………………………………….. 510

Методы исследования…………………………………………………………………………………………………………….. 513

Метод USE……………………………………………………………………………………………………………………….. 513

Метод RED……………………………………………………………………………………………………………………….. 515

Мониторинговые инструменты MySQL………………………………………………………………………………… 516

Инцидентно-диагностический и ручной сбор данных…………………………………………………………. 523

Периодический сбор значений переменных состояния системы………………………………… 523

Использование pt-stalk для сбора метрик MySQL и операционной системы…………….. 525

Расширенный ручной сбор данных……………………………………………………………………………….. 526

Глава 13. Высокая доступность……………………………………………………………. 529

Асинхронная репликация……………………………………………………………………………………………………….. 529

Базовые параметры, устанавливаемые на источнике и реплике………………………………… 532

Создание реплики с помощью Percona XtraBackup……………………………………………………… 533

Создание реплики с помощью плагина клонирования………………………………………………… 535

Создание реплики с помощью mysqldump…………………………………………………………………….. 537

Создание реплики с помощью mydumper и myloader……………………………………………………. 539

Настройка утилит mydumper и myloader………………………………………………………………. 539

Извлечение данных из источника………………………………………………………………………….. 539

Реконструирование данных на сервере-реплике…………………………………………………. 540

Установление репликации……………………………………………………………………………………… 540

Групповая репликация……………………………………………………………………………………………………. 541

Инсталлирование групповой репликации……………………………………………………………. 541

Настройка групповой репликации в MySQL……………………………………………………….. 544

Синхронная репликация…………………………………………………………………………………………………………. 547

Кластер Galera/PXC………………………………………………………………………………………………………… 548

Глава 14. MySQL в облаке……………………………………………………………………. 553

База данных как служба (DBaaS)………………………………………………………………………………………….. 553

Amazon RDS для MySQL/MariaDB………………………………………………………………………………… 554

Google Cloud SQL для MySQL………………………………………………………………………………………… 558

Azure SQL…………………………………………………………………………………………………………………………. 561

Amazon Aurora…………………………………………………………………………………………………………………………. 563

Облачные экземпляры MySQL……………………………………………………………………………………………….. 564

MySQL в Kubernetes…………………………………………………………………………………………………………………. 564

Развертывание кластера Percona XtraDB в Kubernetes………………………………………………… 565

Глава 15. Балансировка нагрузки в MySQL…………………………………………. 571

Балансировка нагрузки с помощью драйверов приложений………………………………………………. 571

Балансировщик нагрузки ProxySQL………………………………………………………………………………………. 572

Инсталлирование и конфигурирование ProxySQL……………………………………………………….. 574

Балансировщик нагрузки HAProxy………………………………………………………………………………………… 578

Инсталлирование и конфигурирование HAProxy………………………………………………………… 579

Маршрутизатор MySQL…………………………………………………………………………………………………………. 584

Глава 16. Прочие темы…………………………………………………………………………. 591

Оболочка MySQL…………………………………………………………………………………………………………………….. 591

Установка оболочки MySQL………………………………………………………………………………………….. 591

Установка оболочки MySQL в Ubuntu 20.04 Focal Fossa…………………………………………….. 591

Установка оболочки MySQL на CentOS 8…………………………………………………………………….. 592

Развертывание симулированного кластера InnoDB с помощью оболочки MySQL…. 593

Утилиты оболочки MySQL…………………………………………………………………………………………….. 597

util.dumpInstance()…………………………………………………………………………………………………… 597

util.dumpSchemas()…………………………………………………………………………………………………… 600

util.dumpTables()……………………………………………………………………………………………………… 600

util.loadDump(url[, опции])…………………………………………………………………………………….. 600

Графики пламени…………………………………………………………………………………………………………………….. 601

Сборка MySQL из исходного кода…………………………………………………………………………………………. 604

Сборка MySQL для Ubuntu Focus Fossa и процессоров ARM…………………………………….. 604

Анализ аварий MySQL……………………………………………………………………………………………………………. 608

Предметный указатель…………………………………………………………………………. 615

Гриппа-Винисиус

Винисиус Гриппа — старший инженер службы поддержки компаний Percona и ACE Oracle. Помог клиентам Percona разобраться в сотнях раз-личных случаев использо-вания MySQL.

 

 

Кузьмичев-Сергей

Сергей Кузьмичев — в настоящее время старший инженер технической поддержки в компании Percona, до этого почти десять лет работал администратором баз данных и инженером DevOps.

Опубликовано

Новинка: “Настройка производительности MySQL”

Настройка производительности MySQL

Описание

Книга посвящена практическим аспектам работы с MySQL. Рассмотрены приёмы сегментирования  баз данных, репликации, шардирования. Уделено внимание упорядочиванию транзакций, резервному копированию и бесшовному взаимодействию между предприятием и облаком, что способствует сохранению данных и их эксплуатационной надёжности. Также исследованы  разнообразные аналитические и мониторинговые инструменты и предложены проверенные  методы, актуальные при развитии и долгосрочной поддержке MySQL и других РСУБД.

Для администраторов баз данных и специалистов по серверной разработке

Примеры из книги можно скачать по ссылке https://github.com/efficient-mysql-performance

Птица на обложке данной книги — хохлатый барбет (Trachyphonus vaillantii), получивший прозвище «фруктовый салат» за свое красочное оперение и фруктовую диету. В основном обитающие на юге Африки, они обычно встречаются в лесных массивах, пригородных садах и огородах, а также вдоль русел рек и не мигрируют.

Секреты и приёмы

СУБД MySQL в последние годы настолько усложнилась, что книги о ней попадаются то элементарные, то донельзя продвинутые. Но именно производительность MySQL – аспект наиболее важный на практике, часто обходят вниманием, поскольку очень сложно его раскрыть, не вдаваясь в детали внутреннего устройства MySQL. Перед вами книга, в которой эта проблема, наконец, решена. Анализируя скорость выполнения запросов, индексирование самых распространённых инструкций, блокировку рядов и паттерны доступа, эта книга служит путеводителем по важнейшим метрикам MySQL и позволяет выжать максимум из стационарных и облачных систем.

В этой книге:

  • Начинать работу с реляционной СУБД MySQL и управлять данными
  • Подробный разбор запросов MySQL и скорости их выполнения
  • Агрегация и анализ метрик, формирование отчётов по ним
  • Изучение транзакций и блокировок
  • Масштабирование, шардирование, репликация MySQL
  • Переход в облако

Дэниэл проделал отличную работу – эта книга поможет вам максимально быстро достичь цели, не петляя и не гадая. Особенно хорошо и доходчиво рассмотрена блокировка строк в InnoDB.
Вадим Ткаченко, совтор книги «MySQL по максимуму»

Книгу “Настройка производительности MySQL” можно купить со скидкой в интернет-магазине издательства “БХВ“.

Предисловие…………………………………………………………………………………………… 11

Условные обозначения, используемые в этой книге………………………………………………………………. 12

Благодарности…………………………………………………………………………………………………………………………… 12

Глава 1. Время отклика на запрос………………………………………………………….. 13

Правдивая история ложной производительности…………………………………………………………………… 14

Краеугольный камень……………………………………………………………………………………………………………….. 14

Отчет о запросе………………………………………………………………………………………………………………………….. 15

Источники……………………………………………………………………………………………………………………….. 16

Агрегация………………………………………………………………………………………………………………………… 18

Отчетность………………………………………………………………………………………………………………………. 20

Профиль запроса……………………………………………………………………………………………………. 21

Отчет о запросе………………………………………………………………………………………………………. 23

Анализ запросов………………………………………………………………………………………………………………………… 23

Метрики запросов…………………………………………………………………………………………………………… 24

Время запроса………………………………………………………………………………………………………… 24

Время блокировки………………………………………………………………………………………………….. 26

Проверенные строки………………………………………………………………………………………………. 30

Отправленные строки…………………………………………………………………………………………….. 31

Затронутые строки…………………………………………………………………………………………………. 32

Полное сканирование таблицы…………………………………………………………………………….. 33

Полное сканирование присоединенной таблицы……………………………………………….. 33

Число временных таблиц на диске……………………………………………………………………….. 35

Количество запросов……………………………………………………………………………………………… 36

Метаданные и приложение……………………………………………………………………………………………. 36

Относительные значения……………………………………………………………………………………………….. 37

Среднее значение, процентиль и максимум…………………………………………………………………. 37

Улучшение времени отклика на запрос…………………………………………………………………………………… 40

Прямая оптимизация запросов………………………………………………………………………………………. 40

Косвенная оптимизация запросов…………………………………………………………………………………. 41

Когда оптимизировать запросы……………………………………………………………………………………………….. 42

Когда производительность влияет на клиентов…………………………………………………………… 42

До и после изменений кода……………………………………………………………………………………………. 42

Раз в месяц……………………………………………………………………………………………………………………….. 43

MySQL: быстрее………………………………………………………………………………………………………………………… 43

Итоги…………………………………………………………………………………………………………………………………………… 45

Практика: определение медленных запросов…………………………………………………………………………. 46

Глава 2. Индексы и индексация…………………………………………………………….. 49

Отвлекающие маневры в теме производительности………………………………………………………………. 51

Более быстрое и мощное оборудование!……………………………………………………………………… 51

Тонкая настройка (тюнинг) MySQL……………………………………………………………………………… 52

Индексы MySQL: наглядное введение……………………………………………………………………………………… 54

Таблицы InnoDB являются индексами…………………………………………………………………………. 55

Методы доступа к таблице……………………………………………………………………………………………. 59

Поиск по индексу……………………………………………………………………………………………………. 59

Сканирование индекса…………………………………………………………………………………………… 60

Сканирование таблицы…………………………………………………………………………………………. 61

Требование крайнего левого префикса………………………………………………………………………… 63

EXPLAIN: план выполнения запроса…………………………………………………………………………….. 65

WHERE…………………………………………………………………………………………………………………………….. 67

GROUP BY………………………………………………………………………………………………………………………… 73

ORDER BY………………………………………………………………………………………………………………………… 78

Покрывающие индексы………………………………………………………………………………………………….. 83

Соединение таблиц (join tables)…………………………………………………………………………………….. 84

Индексация: думать, как MySQL……………………………………………………………………………………………… 92

Узнайте запрос……………………………………………………………………………………………………………….. 92

Поймите с помощью EXPLAIN……………………………………………………………………………………….. 93

Оптимизируйте запрос…………………………………………………………………………………………………… 94

Развертывание и проверка…………………………………………………………………………………………….. 95

Это был хороший индекс, пока………………………………………………………………………………………………… 96

Изменение запросов……………………………………………………………………………………………………….. 96

Избыточные, повторяющиеся и неиспользуемые………………………………………………………… 97

Экстремальная селективность………………………………………………………………………………………. 98

Это ловушка! (Когда MySQL выбирает другой индекс)…………………………………………….. 99

Алгоритмы соединения таблиц………………………………………………………………………………………………. 100

Итоги…………………………………………………………………………………………………………………………………………. 101

Практика: поиск повторяющихся индексов…………………………………………………………………………… 102

Глава 3. Данные…………………………………………………………………………………… 105

Три секрета………………………………………………………………………………………………………………………………. 106

Индексы могут не помочь…………………………………………………………………………………………….. 106

Индексное сканирование…………………………………………………………………………………….. 107

Обнаружение строк……………………………………………………………………………………………… 107

Соединение таблиц………………………………………………………………………………………………. 108

Размер рабочего набора……………………………………………………………………………………… 109

Чем меньше данных, тем лучше………………………………………………………………………………….. 110

Чем меньше QPS, тем лучше………………………………………………………………………………………… 110

Принцип наименьшего количества данных…………………………………………………………………………… 111

Доступ к данным…………………………………………………………………………………………………………… 111

Возвращайте только необходимые столбцы…………………………………………………….. 112

Уменьшите сложность запросов…………………………………………………………………………. 112

Ограничьте доступ к строкам……………………………………………………………………………… 113

Ограничьте результирующий набор………………………………………………………………….. 116

Избегайте сортировки строк……………………………………………………………………………….. 118

Хранение данных…………………………………………………………………………………………………………. 118

Сохраняются только необходимые строки……………………………………………………….. 119

Используется каждый столбец……………………………………………………………………………. 119

Каждый столбец компактен и практичен…………………………………………………………… 119

Каждое значение компактно и практично…………………………………………………………. 121

Используется каждый вторичный индекс, а не дубликат…………………………………. 126

Хранятся только необходимые строки………………………………………………………………. 128

Удаление или архивирование данных…………………………………………………………………………………… 129

Инструменты…………………………………………………………………………………………………………………. 129

Размер пакета……………………………………………………………………………………………………………….. 129

Конфликт блокировки строк………………………………………………………………………………………… 132

Пространство и время………………………………………………………………………………………………….. 132

Парадокс бинарного лога……………………………………………………………………………………………. 133

Итоги…………………………………………………………………………………………………………………………………………. 134

Практика: аудит доступа к данным запросов………………………………………………………………………. 134

Глава 4. Паттерны доступа…………………………………………………………………… 137

MySQL ничего не делает…………………………………………………………………………………………………………. 138

Производительность дестабилизируется на пределе…………………………………………………………… 139

Toyota и Ferrari…………………………………………………………………………………………………………………………. 144

Паттерны доступа к данным…………………………………………………………………………………………………… 145

Чтение/запись……………………………………………………………………………………………………………….. 147

Пропускная способность……………………………………………………………………………………………… 147

Возраст данных……………………………………………………………………………………………………………. 148

Модель данных…………………………………………………………………………………………………………….. 150

Изоляция транзакций……………………………………………………………………………………………………. 150

Согласованность чтения……………………………………………………………………………………………… 151

Конкурентность……………………………………………………………………………………………………………. 152

Доступ к строкам………………………………………………………………………………………………………….. 153

Результирующий набор……………………………………………………………………………………………….. 153

Изменения в приложении………………………………………………………………………………………………………… 154

Аудит кода…………………………………………………………………………………………………………………….. 154

Разгрузка операций чтения………………………………………………………………………………………….. 156

Реплика MySQL……………………………………………………………………………………………………. 157

Кеш-сервер……………………………………………………………………………………………………………. 158

Очередь для операций записи……………………………………………………………………………………… 159

Секционирование данных……………………………………………………………………………………………. 161

Не используйте MySQL……………………………………………………………………………………………….. 162

Более быстрое и мощное оборудование?……………………………………………………………………………… 162

Итоги…………………………………………………………………………………………………………………………………………. 164

Практика: опишите паттерн доступа…………………………………………………………………………………….. 165

Глава 5. Шардирование……………………………………………………………………….. 167

Почему единая база данных не масштабируется…………………………………………………………………. 168

Рабочая нагрузка приложения……………………………………………………………………………………. 168

Тесты производительности синтетичны…………………………………………………………………….. 170

Операции записи…………………………………………………………………………………………………………… 171

Изменения схемы………………………………………………………………………………………………………….. 173

Операции……………………………………………………………………………………………………………………….. 173

Галька, а не валуны…………………………………………………………………………………………………………………. 174

Шардирование: краткое введение………………………………………………………………………………………….. 175

Ключ шардирования……………………………………………………………………………………………………. 176

Стратегии………………………………………………………………………………………………………………………. 177

Хеш………………………………………………………………………………………………………………………… 178

Диапазон……………………………………………………………………………………………………………….. 179

Поиск……………………………………………………………………………………………………………………… 181

Проблемы………………………………………………………………………………………………………………………. 182

Транзакции……………………………………………………………………………………………………………. 182

Объединения…………………………………………………………………………………………………………. 182

Кросс-шард запросы……………………………………………………………………………………………. 182

Решардирование…………………………………………………………………………………………………… 183

Ребалансировка……………………………………………………………………………………………………. 184

Онлайн-изменения схемы…………………………………………………………………………………….. 185

Альтернативы…………………………………………………………………………………………………………………………… 185

NewSQL………………………………………………………………………………………………………………………….. 185

Промежуточное программное обеспечение………………………………………………………………. 187

Микросервисы………………………………………………………………………………………………………………. 187

Не используйте MySQL……………………………………………………………………………………………….. 188

Итоги…………………………………………………………………………………………………………………………………………. 188

Практика: четырехлетняя пригодность…………………………………………………………………………………. 189

Глава 6. Метрики сервера…………………………………………………………………….. 191

Производительность запросов в сравнении с производительностью сервера…………………… 193

Нормальная и стабильная: лучшая база данных — это скучная база данных………………… 195

Ключевые показатели производительности…………………………………………………………………………. 196

Поле метрик……………………………………………………………………………………………………………………………… 197

Время отклика………………………………………………………………………………………………………………. 198

Скорость (англ. rate)……………………………………………………………………………………………………… 198

Объем использования (англ. utilization)………………………………………………………………………. 199

Ожидание………………………………………………………………………………………………………………………. 200

Ошибки………………………………………………………………………………………………………………………….. 201

Паттерны доступа………………………………………………………………………………………………………… 201

Внутренние метрики…………………………………………………………………………………………………….. 202

Спектры…………………………………………………………………………………………………………………………………….. 202

Время отклика на запрос……………………………………………………………………………………………… 204

Ошибки………………………………………………………………………………………………………………………….. 205

Запросы…………………………………………………………………………………………………………………………. 207

QPS…………………………………………………………………………………………………………………………. 207

TPS…………………………………………………………………………………………………………………………. 208

Чтение/запись……………………………………………………………………………………………………….. 210

Администрирование…………………………………………………………………………………………….. 210

Show………………………………………………………………………………………………………………………. 211

Потоки и соединения……………………………………………………………………………………………………. 211

Временные объекты……………………………………………………………………………………………………… 214

Подготовленные инструкции………………………………………………………………………………………. 215

Плохие SELECT…………………………………………………………………………………………………………….. 216

Пропускная способность сети…………………………………………………………………………………….. 217

Репликация……………………………………………………………………………………………………………………. 217

Объем данных……………………………………………………………………………………………………………….. 218

InnoDB…………………………………………………………………………………………………………………………… 220

Длина списка истории (метрика)………………………………………………………………………… 220

Взаимоблокировка……………………………………………………………………………………………….. 220

Блокировка строк…………………………………………………………………………………………………. 221

Пропускная способность данных……………………………………………………………………….. 222

IOPS……………………………………………………………………………………………………………………….. 223

Эффективность буферного пула…………………………………………………………………………. 225

Сброс страниц………………………………………………………………………………………………………. 227

Лог транзакций…………………………………………………………………………………………………….. 234

Мониторинг и оповещение……………………………………………………………………………………………………… 238

Разрешение……………………………………………………………………………………………………………………. 238

Охота на миражи (пороговые значения)…………………………………………………………………….. 240

Оповещения о пользовательском опыте и объективных ограничениях………………….. 241

Причина и следствие……………………………………………………………………………………………………. 243

Итоги…………………………………………………………………………………………………………………………………………. 245

Практика: анализ ключевых показателей производительности…………………………………………. 246

Практика: проверка оповещений и пороговых значений…………………………………………………….. 247

Глава 7. Запаздывание репликации……………………………………………………… 249

Основа………………………………………………………………………………………………………………………………………. 250

Источник — реплика……………………………………………………………………………………………………. 251

События бинарного лога……………………………………………………………………………………………… 253

Запаздывание репликации…………………………………………………………………………………………… 254

Причины……………………………………………………………………………………………………………………………………. 256

Пропускная способность транзакций…………………………………………………………………………. 256

Восстановление после сбоя…………………………………………………………………………………………. 257

Сетевые проблемы……………………………………………………………………………………………………….. 257

Риск: потеря данных………………………………………………………………………………………………………………… 258

Асинхронная репликация…………………………………………………………………………………………….. 258

Полусинхронная репликация………………………………………………………………………………………. 260

Уменьшение запаздывания: многопоточная репликация…………………………………………………….. 262

Мониторинг……………………………………………………………………………………………………………………………… 266

Время восстановления…………………………………………………………………………………………………………….. 268

Итоги…………………………………………………………………………………………………………………………………………. 270

Практика: мониторинг субсекундного запаздывания………………………………………………………….. 271

Глава 8. Транзакции…………………………………………………………………………….. 275

Блокировка строк…………………………………………………………………………………………………………………….. 276

Блокировки индексной записи и следующего ключа………………………………………………… 278

Блокировка интервала…………………………………………………………………………………………………. 282

Вторичные индексы……………………………………………………………………………………………………… 285

Блокировка намерения вставки…………………………………………………………………………………… 288

MVCC и логи отмены………………………………………………………………………………………………………………. 291

Длина списка истории…………………………………………………………………………………………………………….. 295

Распространенные проблемы…………………………………………………………………………………………………. 297

Большие транзакции (размер транзакции)…………………………………………………………………. 298

Длительные транзакции………………………………………………………………………………………………. 299

Зависшие транзакции…………………………………………………………………………………………………… 300

Заброшенные транзакции……………………………………………………………………………………………. 301

Отчетность……………………………………………………………………………………………………………………………….. 302

Активные транзакции: последние……………………………………………………………………………….. 302

Активные транзакции: итоги……………………………………………………………………………………….. 306

Активная транзакция: история……………………………………………………………………………………. 306

Зафиксированные транзакции: итоги…………………………………………………………………………. 307

Итоги…………………………………………………………………………………………………………………………………………. 309

Практика: оповещение о длине списка истории…………………………………………………………………… 310

Практика: изучение блокировки строк………………………………………………………………………………….. 311

Глава 9. Другие проблемы……………………………………………………………………. 313

Сплит-брейн — величайший риск………………………………………………………………………………………….. 313

Дрейф данных реален, но невидим………………………………………………………………………………………… 314

Не доверяйте ORM…………………………………………………………………………………………………………………… 315

Схемы постоянно меняются……………………………………………………………………………………………………. 316

MySQL расширяет стандартный SQL……………………………………………………………………………………. 316

«Шумные соседи»…………………………………………………………………………………………………………………….. 317

Приложения не завершаются корректно……………………………………………………………………………….. 317

Высокопроизводительная MySQL — это сложно………………………………………………………………… 318

Практика: определение барьеров для сплит-брейна……………………………………………………………. 319

Практика: проверка на дрейф данных…………………………………………………………………………………… 321

Практика: хаос…………………………………………………………………………………………………………………………. 321

Глава 10. MySQL в облаке……………………………………………………………………. 323

Совместимость…………………………………………………………………………………………………………………………. 324

Управление (администрирование базы данных)………………………………………………………………….. 325

Сеть и хранилище… и… задержка…………………………………………………………………………………………… 328

Производительность — это деньги………………………………………………………………………………………… 329

Итоги…………………………………………………………………………………………………………………………………………. 331

Практика: попробуйте MySQL в облаке……………………………………………………………………………….. 332

Предметный указатель…………………………………………………………………………. 333

Об авторе……………………………………………………………………………………………… 336

Об обложке…………………………………………………………………………………………… 336

Daniel Nichter

Дэниэл Нихтер – архитекор баз данных, более 15 лет работает с MySQL. Увлёкся оптимизацией производительности MySQL ещё в 2004 году, работая в дата-центре. Из его заметок сложился блог HackMySQL.com, в котором он делился подробностями устройства MySQL и её инструментария. Затем 8 лет работал в компании Percona, где продолжал разрабатывать инструменты для оптимизации баз данных. Сегодня его инструменты де-факто служат эталоном для компаний во всём мире. Обладатель премии MySQL Community Award, выступает на конференциях, активно участвует в движении Open Source.