Антинаучные практики использования БД mysql ·...

46
MySQL DevOps: эксплуатация MySQL под высокой нагрузкой Владимир Федорков (ProxySQL), Анастасия Распопина (ProxySQL) DevOps Pro, 20 ноября 2019, Москва

Upload: others

Post on 01-Aug-2020

14 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Антинаучные практики использования БД MySQL · •Специализация - MySQL –Также –ProxySQL и полнотекстовый поиск

MySQL DevOps: эксплуатация MySQL под высокой нагрузкой

Владимир Федорков (ProxySQL),Анастасия Распопина (ProxySQL)

DevOps Pro,

20 ноября 2019,

Москва

Page 2: Антинаучные практики использования БД MySQL · •Специализация - MySQL –Также –ProxySQL и полнотекстовый поиск

• Скучать, сидя в аудитории из вежливости

• Мешать другим

• Пить чай и кофе

• Снисходительно посматривать на докладчиков

• Заходить, выходить

• Задавать вопросы в любое время

Правила поведения

DevOpsPro 2019, Москва Proxysql.com

Page 3: Антинаучные практики использования БД MySQL · •Специализация - MySQL –Также –ProxySQL и полнотекстовый поиск

О докладчиках

DevOpsPro 2019, Москва Proxysql.com

• Владимир Федорков• 19+ лет опыта с MySQL.• Вытягиваю проекты из

сложных жизненных ситуаций– в высоконагруженных

проектах простых не бывает

• Специализация - MySQL– Также – ProxySQL и

полнотекстовый поиск

• Анастасия Распопина

• Коммуникации в СУБД-индустрии.

• Придумываю интересные доклады (DevRel)• ориентирую экспертов в их

морях смыслов

• Специализация –мероприятия• В РФ и за рубежом

Page 4: Антинаучные практики использования БД MySQL · •Специализация - MySQL –Также –ProxySQL и полнотекстовый поиск

MySQL в контексте DevOps

• Один из самых неудобных элементов

• Требователен к железу

• Плохо переносит виртуализацию

• Отвратительно масштабируется

–По сравнению с любыми фронтами

–Откуда-то куда-то постоянно реплицируется

DevOpsPro 2019, Москва Proxysql.com

Page 5: Антинаучные практики использования БД MySQL · •Специализация - MySQL –Также –ProxySQL и полнотекстовый поиск

Почему всё так сложно?!

• MySQL — это stateful-система

• Содержит много «тяжелых» операций

• Жестоко заоптимизирован

• Всё это требуется для бережного хранения данных

DevOpsPro 2019, Москва Proxysql.com

Page 6: Антинаучные практики использования БД MySQL · •Специализация - MySQL –Также –ProxySQL и полнотекстовый поиск

Бережное хранение: ACID

• A – AtomicityВсё или ничего. Даже если отключат свет.

• C – ConsistencyДанные логически непротиворечивы. Всегда.

• I – IsolationИзменения не видны, пока не закончены.

• D – DurabilityЗаписанное можно гарантированно прочитать.

DevOpsPro 2019, Москва Proxysql.com

Page 7: Антинаучные практики использования БД MySQL · •Специализация - MySQL –Также –ProxySQL и полнотекстовый поиск

Дополнительные затраты

• Сохранение корректного состояния в любой момент времени. Его обеспечивают

– блокировки;

– мультиверсионность.

• Восстановление состояния после отказов

– сети;

– дисков;

– питания.

DevOpsPro 2019, Москва Proxysql.com

Page 8: Антинаучные практики использования БД MySQL · •Специализация - MySQL –Также –ProxySQL и полнотекстовый поиск

Кому, зачем и где нужен такой тюнинг?

DevOpsPro 2019, Москва Proxysql.com

Page 9: Антинаучные практики использования БД MySQL · •Специализация - MySQL –Также –ProxySQL и полнотекстовый поиск

Там, где данные критичны

• Финансовые приложения

• Торговля (магазины и склады)

• Учебные заведения

• Хранилища документов

• … назовите сами)

DevOpsPro 2019, Москва Proxysql.com

Page 10: Антинаучные практики использования БД MySQL · •Специализация - MySQL –Также –ProxySQL и полнотекстовый поиск

«Что?» Определяем задачи

• Эксплуатация:– Железо

– Настройки OS

– Настройки MySQL

• Разработка:– Выбор подсистемы хранения (storage engine)

– InnoDB, MyRocks, MyISAM, Etc

• Всем вместе:– Запросы

DevOpsPro 2019, Москва Proxysql.com

Page 11: Антинаучные практики использования БД MySQL · •Специализация - MySQL –Также –ProxySQL и полнотекстовый поиск

«Как?» Работаем с данными

• Какие настройки использовать?

• Какие индексы делать?

• Как проектировать базу?

• Как потом её менять?

DevOpsPro 2019, Москва Proxysql.com

Page 12: Антинаучные практики использования БД MySQL · •Специализация - MySQL –Также –ProxySQL и полнотекстовый поиск

«Где» Вопросы размещения

• Глобальный вопрос всего проекта

– Масштабирование

– Расходы

– Перспектива роста

• Регион

• Платформа

– «Чистое» железо

– Виртуализация

– Облако

DevOpsPro 2019, Москва Proxysql.com

Page 13: Антинаучные практики использования БД MySQL · •Специализация - MySQL –Также –ProxySQL и полнотекстовый поиск

Нужна ли база данных вообще?

• Зависит от того:– Как данные читаются

– Как данные записываются

– Какие выборки используются

– Как данные масштабируются

– Насколько данные ценны

– Какая нужна скорость доступа

– Насколько важна отказоустойчивость

– Насколько значима безопасность

– Есть ли географическая распределённость

DevOpsPro 2019, Москва Proxysql.com

Page 14: Антинаучные практики использования БД MySQL · •Специализация - MySQL –Также –ProxySQL и полнотекстовый поиск

Конфигурация MySQL

• Конфигурация MySQL

– 5% настроек обеспечивают 95% производительности

• Что тюнить

– Буферы / Память

– Тонкие настройки подсистемы хранения (storage engine)

– Кэши

– Сеть

– Репликацию

DevOpsPro 2019, Москва Proxysql.com

Page 15: Антинаучные практики использования БД MySQL · •Специализация - MySQL –Также –ProxySQL и полнотекстовый поиск

Репликация: важно

• Бинлоги

– log_bin

– log_slave_updates

• Настройки реплики

– read_only

– skip_slave_start

DevOpsPro 2019, Москва Proxysql.com

Page 16: Антинаучные практики использования БД MySQL · •Специализация - MySQL –Также –ProxySQL и полнотекстовый поиск

Ура, сконфигурили!

• Правильные настройки

– не мешают работе MySQL

– oбеспечивают отказоустойчивость

• только на уровне операционной системы!

– не обеспечивают производительности.

• Допустим, всё работает…

DevOpsPro 2019, Москва Proxysql.com

Page 17: Антинаучные практики использования БД MySQL · •Специализация - MySQL –Также –ProxySQL и полнотекстовый поиск

Запросы

• Обеспечивают 99,99% тормозов

– и головную боль админов

• Лучший MySQL-запрос – тот, который до MySQL не дошёл!

– MySQL не сможет выполнить некоторые запросы быстро!

– Просто потому что эта СУБД так спроектирована.

DevConf 2017, Москва ASTELLAR.COM

Page 18: Антинаучные практики использования БД MySQL · •Специализация - MySQL –Также –ProxySQL и полнотекстовый поиск

А что с ним не так, турецкий?

• Ограничение дизайна MySQL– ACID медленный!

– Запрос обрабатывается одним ядром.

– B-Tree работает только для особых случаев.

– Есть полнотекстовые индексы, но они медленные.

– Про репликацию можно говорить часами.

• Что и делаем на собеседованиях!

– Если вышеперечисленное для вас большая проблема, вы используете неправильный инструмент. Вам нужен не MySQL!

• Если вы не Facebook!

DevOpsPro 2019, Москва Proxysql.com

Page 19: Антинаучные практики использования БД MySQL · •Специализация - MySQL –Также –ProxySQL и полнотекстовый поиск

Как написать тормозной запрос?

SELECT * FROM table …

• WHERE DAY(FROM_UNIXTIME(`ts`)) = 205

• WHERE deleted != 1

• WHERE id NOT IN (1,2,3,…,10)

• WHERE url LIKE ‘%чтототам%’

– Не путать с LIKE ‘чтототам%’ !

• ORDER BY RAND()

DevOpsPro 2019, Москва Proxysql.com

Page 20: Антинаучные практики использования БД MySQL · •Специализация - MySQL –Также –ProxySQL и полнотекстовый поиск

Чем плох full table scan?

• Индексы не помогают!– Значение функции считается для всех строк

– B-Tree не эффективен

• Читать всю таблицу долго!

• Пока читаем, вымываем память базы ненужными данными.

• Как бороться?– Пересматривать логику запросов.

– Использовать предварительно аггрегированные данные вместо расчёта функций «на лету»

– Использовать deleted = 0 вместо deleted != 1

DevOpsPro 2019, Москва Proxysql.com

Page 21: Антинаучные практики использования БД MySQL · •Специализация - MySQL –Также –ProxySQL и полнотекстовый поиск

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

• SELECT * / COUNT(*) FROM users WHERE active=1

– Здравствуй, вся таблица!

• Как бороться?– Читаем только то, что показываем

• Используем LIMIT

– Делаем агрегацию для счётчиков

– Кэшируем всё, что можем

• Не в MySQL query cache!

– Используем внешние инструменты (Mongo, Redis, Sphinx, etc.)

DevOpsPro 2019, Москва Proxysql.com

Page 22: Антинаучные практики использования БД MySQL · •Специализация - MySQL –Также –ProxySQL и полнотекстовый поиск

Временные таблицы

• Плохо

– Если попадает на диск – очень плохо!

• Если есть поля TEXT или BLOB, на диск таблица попадёт.

• Когда создаются

– GROUP BY

– Подзапросы

– DISTINCT + ORDER BY

DevOpsPro 2019, Москва Proxysql.com

Page 23: Антинаучные практики использования БД MySQL · •Специализация - MySQL –Также –ProxySQL и полнотекстовый поиск

Что делать?

• Тюнить буферы временных таблиц

– tmp_table_size

– max_heap_table_size

• Запускать «тяжёлые» запросы на отдельной реплике

– Например, для генерации отчетов

DevOpsPro 2019, Москва Proxysql.com

Page 24: Антинаучные практики использования БД MySQL · •Специализация - MySQL –Также –ProxySQL и полнотекстовый поиск

Если нагрузка большая

• Query cache

• Thread cache

• Table cache

• Slow query log

• wait_timeout

• connection pooling

• Репликация и шардинг

DevOpsPro 2019, Москва Proxysql.com

Page 25: Антинаучные практики использования БД MySQL · •Специализация - MySQL –Также –ProxySQL и полнотекстовый поиск

Важно отслеживать состояние

• Смотреть на состояние CPU, IO & RAM

• Регулярно собирать все запросы

– Не только медленные!

– В идеале все 24 часа

• Выполнять SQL review для любой новой функциональности

– Один запрос может «положить» базу

DevOpsPro 2019, Москва Proxysql.com

Page 26: Антинаучные практики использования БД MySQL · •Специализация - MySQL –Также –ProxySQL и полнотекстовый поиск

Как понять, что происходит?

• PMM для ежедневной работы

– Grafana + Анемометр

• https://github.com/vlad-github/mysql-health-check

– Для снятия моментального профиля нагрузки и текущей конфигурации

• Регулярный сбор всех запросов

– Блоками по несколько минут, чтобы поймать все кроны

• Ходить на мастер-классы, задавать вопросы :)

DevOpsPro 2019, Москва Proxysql.com

Page 27: Антинаучные практики использования БД MySQL · •Специализация - MySQL –Также –ProxySQL и полнотекстовый поиск

Между Dev и Ops

• Коммуникация – это ключ к успеху!• Разработка

– должна понимать как работают запросы, а также– тестировать функционал на фактическом объеме данных и– предупреждать о новой функциональности.

• Эксплуатация – должна понимать, что меняют,– какой будет нагрузка завтра,– что можно отключить в случае перегруза.

• В идеале – вплоть до парного программирования.

DevOpsPro 2019, Москва Proxysql.com

Page 28: Антинаучные практики использования БД MySQL · •Специализация - MySQL –Также –ProxySQL и полнотекстовый поиск

От сервера кластеру

• Один сервер мало, два – плохо.– Репликация медленная

• Работает в один поток (исправили в версии 5.6).

– Репликация хрупкая (не исправили до сих пор)• Но можно использовать GTID

– Доверия репликации – нет• Консистентность данных требует проверок

– Даже если видимых сбоев не было

– pt-table-checksum + pt-table-sync

• Есть варианты– Galera, Group Replication, PXC, etc.

DevOpsPro 2019, Москва Proxysql.com

Page 29: Антинаучные практики использования БД MySQL · •Специализация - MySQL –Также –ProxySQL и полнотекстовый поиск

Прелести кластера

• Если у тебя упал единственный сервер, это трагедия…

– А если один из десяти?

• Можно использовать реплики для бэкапа.

• Можно балансировать нагрузку.

DevOpsPro 2019, Москва Proxysql.com

Page 30: Антинаучные практики использования БД MySQL · •Специализация - MySQL –Также –ProxySQL и полнотекстовый поиск

Как балансировать нагрузку?

• Использовать мастер только для записи

– и чтения абсолютно критичных к времени данных.

• Распределять запросы по репликам.

• Сделать отдельную реплику для «тяжёлых» запросов.

• Использовать балансировщики трафика:

– ProxySQL, HA Proxy, MySQL Proxy и т.п.

DevOpsPro 2019, Москва Proxysql.com

Page 31: Антинаучные практики использования БД MySQL · •Специализация - MySQL –Также –ProxySQL и полнотекстовый поиск

Красивая

диагр

ам

ма

О то

м, к

ак в

сё м

огл

о б

ы б

ыть

Page 32: Антинаучные практики использования БД MySQL · •Специализация - MySQL –Также –ProxySQL и полнотекстовый поиск

Что ещё умеет кластер

• Встать колом полностью от вовремя запущенногоALTER TABLE

• Эффектно среплицировать командуDROP DATABASE

• С разной скоростью выполнять одинаковые запросы на разных нодах

DevOpsPro 2019, Москва Proxysql.com

Page 33: Антинаучные практики использования БД MySQL · •Специализация - MySQL –Также –ProxySQL и полнотекстовый поиск

Ежедневная рутина

• Отказы железа

• Баги софта

• Надежные бэкапы и восстановление

• Мониторинг

• Апгрейды и настройка репликации

• Настройка сети и безопасности

DevOpsPro 2019, Москва Proxysql.com

Page 34: Антинаучные практики использования БД MySQL · •Специализация - MySQL –Также –ProxySQL и полнотекстовый поиск

Облака: без админов обойдемся!

• На примере Amazon RDS– Relational database service

• MySQL, Oracle & MSSQL– MySQL (InnoDB) и Aurora

• Что позволяет?– Создавать/удалять ноды и реплики

– Выделять реплики из кластера

– Автоматизировать развёртывание БД и фронтов• Вплодь до полного скриптования

DevOpsPro 2019, Москва Proxysql.com

Page 35: Антинаучные практики использования БД MySQL · •Специализация - MySQL –Также –ProxySQL и полнотекстовый поиск

Что это значит для нас?

• Полностью автоматизированное развёртывание приложения с использованием RDS и EC2

• Гибкий контроль производительности и стоимости с помощью добавления и удаления машин

– В зависимости от времени дня

– В зависимости от текущей нагрузки

• Изменение параметров кластера «на лету»

DevOpsPro 2019, Москва Proxysql.com

Page 36: Антинаучные практики использования БД MySQL · •Специализация - MySQL –Также –ProxySQL и полнотекстовый поиск

Что мы можем контролировать?

• Выбирать регион для инстанса

• Конфигурировать MySQL

• Выбирать тип инстанса

• Открывать/закрывать доступ по сети

• Выбирать параметры дисковой подсистемы

DevOpsPro 2019, Москва Proxysql.com

Page 37: Антинаучные практики использования БД MySQL · •Специализация - MySQL –Также –ProxySQL и полнотекстовый поиск

Availability zone

• В каждом регионе несколько AZ

• Можно сделать AZ мастер

– Поможет в случае сбоя основного мастера

• Репликация может быть сломана

DevOpsPro 2019, Москва Proxysql.com

Page 38: Антинаучные практики использования БД MySQL · •Специализация - MySQL –Также –ProxySQL и полнотекстовый поиск

Storage

• SSD & Magnetic диски

– Полностью разные архитектурно и физически

• Вы в облаке

DevOpsPro 2019, Москва Proxysql.com

Page 39: Антинаучные практики использования БД MySQL · •Специализация - MySQL –Также –ProxySQL и полнотекстовый поиск

Настройка MySQL: Parameter groups

• Содержит все возможные настройки MySQL

• Настройки по умолчанию не оптимальны

– Нужно создать свою группу и поменять как надо

– Число PG не бесконечно

• Некоторые настройки поменять нельзя

• Статические и динамические настройкипочти как в «родном» MySQL

DevOpsPro 2019, Москва Proxysql.com

Page 40: Антинаучные практики использования БД MySQL · •Специализация - MySQL –Также –ProxySQL и полнотекстовый поиск

Добро пожаловать в облако!

• Железо можеть быть разное

– Даже на каждом запуске бенчмарков

• IO зависит от сети

• Стоят ограничители CPU & IO

• Ты не знаешь своих соседей

DevOpsPro 2019, Москва Proxysql.com

Page 41: Антинаучные практики использования БД MySQL · •Специализация - MySQL –Также –ProxySQL и полнотекстовый поиск

Как жить?

• Всегда ориентируемся на худший случай.

• Максимально уменьшаем нагрузку на IO.

• Агрессивный шардинг – наш друг и верный друг и товарищ!

• Внимательно следим за

– нагрузкой на CPU/IO и

– использованием памяти.

– Стараемся вовремя обнаруживать битые реплики.

DevOpsPro 2019, Москва Proxysql.com

Page 42: Антинаучные практики использования БД MySQL · •Специализация - MySQL –Также –ProxySQL и полнотекстовый поиск

Когда использовать облако?

• Когда не очень много данных

– или когда вы можете их зашардить…

• Когда сложно предугадывать нагрузку.

• Когда быстро нужно много ресурсов

– или когда ресурсы нужны ненадолго.

• RDS, когда не хватает рук для администрирования.

DevOpsPro 2019, Москва Proxysql.com

Page 43: Антинаучные практики использования БД MySQL · •Специализация - MySQL –Также –ProxySQL и полнотекстовый поиск

Как со всем этим живут гиганты?

• Строят свои датацентры и каналы.

• Содержат команды инженеров и программистов.

• Переделывают MySQL под свои нужды.

• Меняются патчами и публикуют их.

– Можно их найти и использовать!

• Но если вы не Твиттер, не Фейсбук и не Google, переживать вам пока рано!

DevOpsPro 2019, Москва Proxysql.com

Page 44: Антинаучные практики использования БД MySQL · •Специализация - MySQL –Также –ProxySQL и полнотекстовый поиск

Что дальше?

• Анонсы митапов: канал @ru_mysql в Телеграме

• Анонсы мастер-классов по MySQL: FB.com/vfedorkov

• Посмотреть другие доклады на astellar.com

• Прочитать книги:

–«MySQL по максимуму» (Бэрон Шварц, Пётр Зайцев, Вадим Ткаченко);

–«Отладка производительности MySQL»

(Света Смирнова).

DevOpsPro 2019, Москва Proxysql.com

Page 45: Антинаучные практики использования БД MySQL · •Специализация - MySQL –Также –ProxySQL и полнотекстовый поиск

ВОПРОСЫ!

DevOpsPro 2019, Москва Proxysql.com

Page 46: Антинаучные практики использования БД MySQL · •Специализация - MySQL –Также –ProxySQL и полнотекстовый поиск

СПАСИБО!

DevOpsPro 2019, Москва Proxysql.com