MySQL. Чек-лист для новичка в highload

Сегодня рассмотрим интересное выступление Светы Смирновой из Percona.

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

Тезисы, которые запомнились:

  • Понятие "хайлоад" всегда относительно и применимо только к конкретному приложению/проекту
  • Если основная нагрузка на MySQL чтение - берем сервер с большим объемом памяти, чтобы как можно больше данных помещалось в ОП
  • Если основная нагрузка на MySQL запись - берем сервер с быстрыми дисками (SSD)
  • Если много соединений (connections) - делаем упор на CPU
  • Если очень много неоптимизированных запросов - делаем упор на диск и CPU
  • MySQL версии 5.7 быстрее версии 5.6 в 3 раза, быстрее 5.5 в 6 раз
  • Нельзя один раз оптимизировать проект под хайлоад - это постоянный процесс
  • Сотни человек в Oracle занимаются разработкой и поддержкой MySQL (в Percona 30 разработчиков)
  • MariaDB - отдельный продукт, частично совместимый с MySQL. Имеет свой оптимизатор запросов, свой GTID, Column Store
  • Amazon Aurora - закрытый форк MySQL от Amazon
  • Для хранения информации в памяти в MySQL есть три типа буферов:
    • innodb_buffer_poll - хранит активные данные
    • sort_buffer - сессионные буфера
    • буферы под конкретную операцию (создание временных таблиц и т.д.
  • В MySQL 8.0 выпилили query cache (!)
  • С внешними ключами, при доступе к одной таблице строка в родительской/дочерней - блокируется
  • pt-query-digest - утилита для анализа логов MySQL
  • EXPLAIN format=JSON - выдает больше полезной информации о плане запроса
  • http://www.thecompletelistoffeatures.com/ - полный список новых возможностей MySQL 5.7