MySQL по максимуму

This document was uploaded by one of our users. The uploader already confirmed that they had the permission to publish it. If you are author/publisher or own the copyright of this documents, please report to us by using this DMCA report form.

Simply click on the Download Book button.

Yes, Book downloads on Ebookily are 100% Free.

Sometimes the book is free on Amazon As well, so go ahead and hit "Search on Amazon"

Хотите выжать из MySQL максимум возможностей? Вам поможет уникальная книга, написанная экспертами для экспертов. Познакомьтесь с продвинутыми приемами работы с MySQL: разработкой схем, индексов и запросов для настройки сервера, операционной системы и аппаратной части, способами масштабирования приложений и репликацией, балансировкой нагрузки, обеспечением доступности и восстановлением после отказов. Прочитав эту книгу, вы узнаете, почему MySQL устроена именно так, познакомитесь с разбором практичных кейсов, научитесь мыслить на одном языке с вашей базой данных. Бестселлер Шварца, Зайцева и Ткаченко - книга, необходимая любому профессионалу и способная превратить самую страшную "нештатную ситуацию" в легко преодолимый "рабочий момент".

Author(s): Шварц Б., Зайцев П., Ткаченко В.
Edition: 3-е изд.
Publisher: Питер
Year: 2018

Language: Russian
Pages: 866
City: СПб.

Предисловие......Page 17
Структура книги......Page 18
Версии программного обеспечения и их доступность......Page 21
Условные обозначения......Page 22
О примерах кода......Page 23
Благодарности ко второму изданию......Page 24
Благодарности к первому изданию......Page 27
Логическая архитектура MySQL......Page 29
Оптимизация и выполнение......Page 31
Блокировки чтения/записи......Page 32
Детальность блокировок......Page 33
Транзакции......Page 35
Уровни изолированности......Page 37
Взаимоблокировки......Page 38
Ведение журнала транзакций......Page 39
Транзакции с MySQL......Page 40
Управление конкурентным доступом с помощью многоверсионности......Page 42
Подсистемы хранения в MySQL......Page 43
Подсистема хранения InnoDB......Page 45
Подсистема хранения MylSAM......Page 48
Другие встроенные подсистемы хранения данных MySQL......Page 50
Подсистемы хранения сторонних разработчиков......Page 52
Выбор подходящей подсистемы хранения......Page 55
Преобразования таблиц......Page 59
Хронология MySQL......Page 61
Модель развития MySQL......Page 65
Итоги главы......Page 66
Зачем нужно эталонное тестирование......Page 67
Стратегии эталонного тестирования......Page 69
Тактики эталонного тестирования......Page 73
Проектирование и планирование эталонных тестов......Page 74
Должно ли быть длительным эталонное тестирование?......Page 75
Фиксация производительности и состояния системы......Page 76
Получение точных результатов......Page 78
Прогон эталонного теста и анализ результатов......Page 80
Важность построения графика......Page 82
Полностековые инструменты......Page 84
Инструменты покомпонентного тестирования......Page 85
Примеры эталонного тестирования......Page 87
http_load 87......Page 88
MySQL Benchmark Suite......Page 89
sysbench......Page 90
Инструмент dbt2 TPC-C из комплекта Database Test Suite......Page 95
Инструмент Percona’s TPCC-MySQL......Page 98
Итоги главы......Page 101
Введение в оптимизацию производительности......Page 102
Оптимизация с помощью профилирования......Page 105
Интерпретация профиля......Page 107
Профилирование приложения......Page 109
Профилирование рабочей нагрузки сервера......Page 114
Профилирование отдельных запросов......Page 119
Диагностика редко возникающих проблем......Page 126
Проблемы одиночного запроса или всего сервера?......Page 127
Фиксация данных диагностики......Page 132
Кейс по диагностике......Page 138
Таблицы USER STATISTICS......Page 147
Итоги главы......Page 148
Выбор оптимальных типов данных......Page 151
Целые числа......Page 153
Вещественные числа......Page 154
Строковые типы......Page 155
Типы Date и Time......Page 162
Битовые типы данных......Page 164
Выбор идентификаторов......Page 166
Подводные камни проектирования схемы в MySQL......Page 169
Нормализация и денормализация......Page 171
Достоинства и недостатки денормализованной схемы......Page 172
Сочетание нормализации и денормализации......Page 173
Кэшированные и сводные таблицы......Page 174
Материализованные представления......Page 176
Таблицы счетчиков......Page 177
Ускорение работы команды ALTER TABLE......Page 179
Модификация одного лишь irm-файла......Page 180
Быстрое построение индексов MylSAM......Page 182
Итоги главы......Page 183
Глава 5. Повышение производительности с помощью индексирования......Page 184
Типы индексов......Page 185
Преимущества индексов......Page 196
Изоляция столбца......Page 197
Префиксные индексы и селективность индекса......Page 198
Многостолбцовые индексы......Page 201
Выбор правильного порядка столбцов......Page 203
Кластерные индексы......Page 206
Покрывающие индексы......Page 217
Использование просмотра индекса для сортировки......Page 222
Упакованные (сжатые по префиксу) индексы......Page 224
Избыточные и дублирующиеся индексы......Page 225
Индексы и блокировки......Page 228
Кейсы по индексированию......Page 230
Поддержка нескольких видов фильтрации......Page 231
Устранение дополнительных условий поиска по диапазону......Page 233
Оптимизация сортировки......Page 234
Обслуживание индексов и таблиц......Page 235
Поиск и исправление повреждений таблицы......Page 236
Обновление статистики индекса......Page 237
Уменьшение фрагментации индекса и данных......Page 239
Итоги главы......Page 240
Почему запросы бывают медленными......Page 243
Основная причина замедления: оптимизируйте доступ к данным......Page 244
Не запрашиваете ли вы лишние данные у базы?......Page 245
Не слишком ли много данных анализирует MySQL?......Page 246
Один сложный или несколько простых запросов?......Page 250
Разбиение запроса на части......Page 251
Декомпозиция соединения......Page 252
Основные принципы выполнения запросов......Page 253
Клиент-серверный протокол MySQL......Page 254
Кэш запросов......Page 257
Процесс оптимизации запроса......Page 258
Подсистема выполнения запросов......Page 272
Ограничения оптимизатора MySQL......Page 273
Коррелированные подзапросы......Page 274
Ограничения UNION......Page 278
Хеш-соединения......Page 279
Непоследовательный просмотр индекса......Page 280
Функции MIN() и МАХ()......Page 282
Подсказки оптимизатору запросов......Page 283
Оптимизация запросов с COUNT()......Page 287
Оптимизация подзапросов......Page 290
Оптимизация GROUP BY и DISTINCT......Page 291
Оптимизация GROUP BY WITH ROLLUP......Page 292
Оптимизация LIMIT и OFFSET......Page 293
Оптимизация SQL_CALC_FOUND_ROWS......Page 294
Оптимизация UNION......Page 295
Переменные, определяемые пользователем......Page 296
Построение таблицы очередей в MySQL......Page 303
Вычисление расстояния между двумя точками......Page 306
Применение пользовательских функций......Page 310
Итоги главы......Page 311
Секционированные таблицы......Page 312
Как работает секционирование......Page 313
Типы секционирования......Page 314
Как использовать секционирование......Page 316
Что может пойти не так......Page 317
Оптимизация запросов к секционированным таблицам......Page 320
Объединенные таблицы......Page 321
Представления......Page 324
Представления и производительность......Page 327
Ограничения представлений......Page 329
Ограничения внешнего ключа......Page 330
Хранение кода внутри MySQL......Page 331
Хранимые процедуры и функции......Page 334
Триггеры......Page 335
События......Page 338
Сохранение комментариев в хранимом коде......Page 339
Курсоры......Page 340
Подготовленные операторы......Page 341
Оптимизация подготовленных операторов......Page 342
SQL-интерфейс для подготовленных операторов......Page 343
Ограничения подготовленных операторов......Page 345
Функции, определяемые пользователем......Page 346
Плагины......Page 347
Кодировка и схемы упорядочения......Page 348
Использование кодировок в MySQL......Page 349
Выбор кодировки и схемы упорядочения......Page 352
Как кодировка и схема упорядочения влияют на запросы......Page 353
Полнотекстовый поиск......Page 356
Полнотекстовые запросы на естественном языке......Page 358
Булев полнотекстовый поиск......Page 360
Компромиссы полнотекстового поиска и обходные пути......Page 361
Настройка и оптимизация полнотекстового поиска......Page 364
Распределенные транзакции......Page 365
Внутренние ХА-транзакции......Page 366
Внешние ХА-транзакции......Page 367
Как MySQL проверяет попадание в кэш......Page 368
Как кэш использует память......Page 370
Когда полезен кэш запросов......Page 373
Как настраивать и обслуживать кэш запросов......Page 376
InnoDB и кэш запросов......Page 380
Общие оптимизации кэша запросов......Page 381
Итоги главы......Page 382
Глава 8. Оптимизация параметров сервера......Page 385
Основы конфигурации MySQL......Page 386
Синтаксис, область видимости и динамичность......Page 387
Побочные эффекты установки переменных......Page 389
Приступая к работе......Page 392
Итеративная оптимизация с помощью эталонного тестирования......Page 393
Чего делать не следует......Page 395
Создание конфигурационного файла MySQL......Page 397
Настройка использования памяти......Page 402
Сколько памяти нужно соединению......Page 403
Выделение памяти для кэшей......Page 404
Буферный пул InnoDB......Page 405
Кэш ключей MylSAM......Page 407
Кэш таблиц......Page 410
Словарь данных InnoDB......Page 412
InnoDB......Page 413
MylSAM......Page 428
InnoDB......Page 430
MylSAM......Page 432
Настройка с учетом рабочей нагрузки......Page 433
Оптимизация работы с полями типа BLOB и TEXT......Page 434
Оптимизация файловой сортировки......Page 436
Завершение базовой конфигурации......Page 437
Настройки безопасности и готовности к работе......Page 439
Дополнительные настройки InnoDB......Page 442
Итоги главы......Page 445
Что ограничивает производительность MySQL......Page 446
Что лучше: быстрые процессоры или много процессоров......Page 447
Масштабирование на несколько процессоров и ядер......Page 450
Поиск баланса между памятью и дисками......Page 453
Произвольный и последовательный ввод/вывод......Page 454
Кэширование, чтение и запись......Page 455
Что такое рабочее множество......Page 456
Определение эффективного соотношения «память — диск»......Page 457
Выбор жестких дисков......Page 459
Твердотельные хранилища данных......Page 461
Обзор флеш-памяти......Page 462
Флеш-технологии......Page 463
Эталонное тестирование флеш-памяти......Page 465
Твердотельные диски......Page 466
Устройства хранения РС1е......Page 468
Когда стоит использовать флеш-устройства......Page 469
Использование технологии Flashcache......Page 471
Оптимизация MySQL для твердотельных хранилищ данных......Page 473
Выбор оборудования для подчиненного сервера......Page 477
Оптимизация производительности с помощью RAID......Page 478
Отказ, восстановление и мониторинг RAID......Page 481
Выбор между аппаратной и программной реализациями RAID......Page 482
Конфигурация RAID и кэширование......Page 484
Сети хранения данных и сетевые системы хранения данных......Page 487
Эталонные тесты SAN-сетей......Page 488
Использование SAN-сетей через NFS или SMB......Page 489
Надо ли использовать SAN......Page 490
Использование нескольких дисковых томов......Page 492
Конфигурация сети......Page 494
Выбор операционной системы......Page 497
Выбор файловой системы......Page 498
Многопоточность......Page 501
Подкачка......Page 502
Как интерпретировать выдачу vmstat......Page 505
Как интерпретировать выдачу iostat......Page 506
Другие полезные инструменты......Page 508
Машина с нагруженным процессором......Page 509
Машина с нагруженной подсистемой ввода/вывода......Page 510
Итоги главы......Page 511
Обзор репликации......Page 514
Проблемы, решаемые репликацией......Page 516
Как работает репликация......Page 517
Настройка репликации......Page 518
Создание аккаунтов репликации......Page 519
Конфигурирование главного и подчиненного серверов......Page 520
Запуск подчиненного сервера......Page 521
Инициализация подчиненного сервера на основе существующего......Page 524
Рекомендуемая конфигурация репликации......Page 526
Покомандная репликация......Page 528
Построчная репликация......Page 529
Какая репликация лучше, покомандная или построчная......Page 530
Файлы репликации......Page 532
Отправка событий репликации другим подчиненным серверам......Page 534
Фильтры репликации......Page 535
Топологии репликации......Page 537
Один главный сервер с несколькими подчиненными......Page 538
«Главный сервер — главный сервер» в режиме «активный — активный»......Page 539
«Главный сервер — главный сервер» в режиме «активный — пассивный»......Page 541
«Главный сервер — главный сервер с подчиненными»......Page 542
Кольцевая репликация......Page 543
Главный сервер, главный сервер-распространитель и подчиненные......Page 544
Дерево или пирамида......Page 546
Пользовательские схемы репликации......Page 547
Репликация и планирование производительности......Page 553
Почему репликация не помогает масштабированию записи......Page 554
Когда подчиненные серверы начнут отставать......Page 555
Администрирование и обслуживание репликации......Page 556
Измерение отставания подчиненного сервера......Page 557
Как узнать, согласованы ли подчиненные серверы с главным......Page 559
Восстановление синхронизации подчиненного сервера с главным......Page 560
Смена главного сервера......Page 561
Смена ролей в конфигурации «главный сервер — главный сервер»......Page 566
Ошибки, вызванные повреждением или утратой данных......Page 567
Смешивание транзакционных и нетранзакционных таблиц......Page 571
Использование различных подсистем хранения на главном и подчиненном серверах......Page 572
Неуникальный идентификатор сервера......Page 573
Зависимости от нереплицируемых данных......Page 574
Отсутствующие временные таблицы......Page 575
Репликация не всех обновлений......Page 576
Конкуренция, вызванная блокировками при выполнении SELECT в InnoDB......Page 577
Запись на обоих главных серверах в конфигурации «главный — главный».......Page 579
Слишком большое отставание репликации......Page 581
Чрезмерно большие пакеты от главного сервера......Page 585
Ограничения репликации......Page 586
Насколько быстро работает репликация......Page 587
Расширенные возможности репликации MySQL ~......Page 589
Прочие технологии репликации......Page 592
Итоги главы......Page 594
Что такое масштабируемость......Page 596
Планирование масштабируемости......Page 603
Перед тем как приступать к масштабированию......Page 604
Вертикальное масштабирование......Page 605
Масштабирование по горизонтали......Page 607
Масштабирование с помощью консолидации......Page 626
Масштабирование кластеризацией......Page 627
Обратное масштабирование......Page 631
Балансирование нагрузки......Page 634
Прямое подключение......Page 636
Представляем посредника......Page 641
Балансирование нагрузки при наличии одного главного и нескольких подчиненных серверов......Page 644
Итоги главы......Page 645
Что такое высокая доступность......Page 647
Причины простоев......Page 649
Сокращение среднего времени между отказами......Page 650
Сокращение среднего времени восстановления......Page 652
Устранение отдельных критических точек......Page 653
Разделяемое хранилище данных или реплицированный диск......Page 654
Синхронная репликация MySQL......Page 658
Избыточность на основе репликации......Page 662
Аварийное переключение и восстановление после сбоев......Page 664
Виртуальные IP-адреса и передача IP-адреса......Page 666
Решения на основе посредника......Page 667
Итоги главы......Page 669
Глава 13. MySQL в облаке......Page 672
Достоинства, недостатки и мифы облака......Page 673
Экономика MySQL в облаке......Page 675
Масштабирование MySQL и НА в облаке......Page 677
Четыре основных ресурса......Page 678
Производительность MySQL в облачном хостинге......Page 679
База данных MySQL как услуга......Page 684
Amazon RDS......Page 685
Другие решения DBaaS......Page 686
Итоги главы......Page 687
Типичные проблемы......Page 689
Проблемы веб-сервера......Page 692
Кэширование на уровне ниже приложения......Page 696
Кэширование на уровне приложения......Page 697
Стратегии управления кэшем......Page 699
Кэширование иерархий объектов......Page 701
Предварительная генерация содержимого......Page 702
Кэш как инфраструктурный компонент......Page 703
Расширение MySQL......Page 704
Альтернативы MySQL......Page 705
Итоги главы......Page 706
Глава 15. Резервное копирование и восстановление......Page 707
Зачем нужно резервное копирование......Page 708
Определение требований к восстановлению......Page 709
Проектирование резервного копирования в MySQL......Page 711
Оперативное или автономное резервное копирование......Page 712
Логическое и физическое резервное копирование......Page 714
Что копировать......Page 717
Подсистемы хранения и согласованность......Page 719
Репликация......Page 722
Формат двоичного журнала......Page 723
Безопасное удаление старых двоичных журналов......Page 724
Снятие логической резервной копии......Page 725
Снимки файловой системы......Page 728
Восстановление из резервной копии......Page 736
Восстановление из физических файлов......Page 737
Восстановление из логической копии......Page 739
Восстановление на конкретный момент времени......Page 742
Более сложные методы восстановления......Page 744
Восстановление InnoDB......Page 746
Percona XtraBackup......Page 749
Zmanda Recovery Manager......Page 750
mysqldump......Page 751
Скрипты резервного копирования......Page 752
Итоги главы......Page 755
Средства организации интерфейса......Page 757
Утилиты командной строки......Page 758
Инструменты мониторинга......Page 759
Инструменты мониторинга с открытым исходным кодом......Page 760
Коммерческие системы мониторинга......Page 763
Мониторинг из командной строки с использованием Innotop......Page 765
Итоги главы......Page 769
Percona Server......Page 771
Maria D В......Page 772
Drizzle......Page 773
Итоги......Page 775
Команда SHOW STATUS......Page 777
Команда SHOW INNODB STATUS......Page 784
Команда SHOW PROCESSLIST......Page 799
Команда SHOW ENGINE MUTEX STATUS......Page 800
Состояние репликации......Page 801
База данных INFORMATION_SCHEM А......Page 802
Performance Schema......Page 804
Итоги......Page 805
Копирование файлов......Page 806
Эталонные тесты копирования файлов......Page 809
Вызов команды EXPLAIN......Page 811
Столбцы результата команды EXPLAIN......Page 814
Вывод плана выполнения в виде дерева......Page 825
Улучшения в версии MySQL 5.6......Page 826
Ожидание блокировки на уровне сервера......Page 827
Ожидание блокировки в InnoDB......Page 832
Типичный поиск с помощью Sphinx......Page 837
Зачем использовать Sphinx......Page 841
Обзор архитектуры......Page 849
Специальные возможности......Page 852
Примеры практической реализации......Page 858
Итоги......Page 865