SlideShare a Scribd company logo
© 2017 Percona
1
Света Смирнова, ведущий инженер технической поддержки (Percona)
Анастасия Распопина, специалист по маркетингу (Percona)
MySQL:
чек-лист для новичка в highload
Кейсы, списки настроек, must have, полезные ссылки
Профессиональный фестиваль «Российские интернет-технологии» (РИТ++),
конференция HighLoad Junior
5 июня 2017 г.
© 2017 Percona
2
Кто мы и откуда?
Кратко о нас и нашей компании
▪Света Смирнова
• Ведущий инженер службы технической поддержки
• 10+ лет работы в поддержке MySQL, автор книги “MySQL Troubleshooting” и
UDF-функций для MySQL (дизайн-прототип встроенных JSON-функций).
© 2017 Percona
3
Кто мы и откуда?
Кратко о нас и нашей компании
▪Света Смирнова
▪Анастасия Распопина
• Специалист по маркетингу
• Работала в GameDev, организовывала HL++, РИТ++, сейчас в Percona Events
Team.
© 2017 Percona
4
Кто мы и откуда?
Кратко о нас и нашей компании
▪Света Смирнова, ведущий инженер службы технической
поддержки
▪Анастасия Распопина, специалист по маркетингу
▪Компания Percona
• Поставщик 100% Open Source ПО для MySQL и MongoDB, а также услуг
поддержки, консалтинга и удалённого администрирования для этих
СУБД
© 2017 Percona
5
Что такое highload сейчас?
Даём определение высокой нагрузке на 2017 г.
▪Не цифры: предельные нагрузки
• Сколько записей в секунду выдержит диск?
• Запросов на чтение?
• Пользовательских соединений?
© 2017 Percona
6
Что такое highload сейчас?
Даём определение высокой нагрузке на 2017 г.
▪Не цифры: предельные нагрузки
▪Железо имеет значение
• t2.micro или “Машины Баз Данных” (WS, 6 июня, 16.00)
• Много читаем: память
• Много пишем: быстрый диск
• Много активных соединений: CPU
• Неоптимизированные запросы: CPU
© 2017 Percona
7
Что такое highload сейчас?
Даём определение высокой нагрузке на 2017 г.
▪Не цифры: предельные нагрузки
▪Железо имеет значение
▪Цифры
• Стандартные бенчмарки всегда синтетические
• Реальность обычно разнообразнее
© 2017 Percona
8
Что такое highload сейчас?
Цифры: рост производительности MySQL
https://www.slideshare.net/geirhoydalsvik/whats-new-in-mysql-57
© 2017 Percona
9
Что такое highload сейчас?
Цифры: рост интернета
© 2017 Percona
10
Что такое highload сейчас?
Даём определение высокой нагрузке на 2017 г.
▪Highload
• Та нагрузка, с которой СУБД не справляется
• Нельзя раз и навсегда оптимизироваться «под highload», это
непрерывный процесс
© 2017 Percona
11
Обзор форков MySQL
Oracle MySQL, Percona Server для MySQL, MariaDB,
форки внутри компаний
© 2017 Percona
12
Современные варианты MySQL
Какие форки MySQL выжили и активно развиваются?
▪MySQL от Oracle
• Оригинальный MySQL, над которым работают инженеры Oracle
• “Сотни человек” (https://www.percona.com/blog/2014/02/18/oracles-morgan-tocker-opens-up-about-mysql-development-mysql-5-7/)
© 2017 Percona
13
Современные варианты MySQL
Какие форки MySQL выжили и активно развиваются?
▪MySQL от Oracle
▪Percona Server для MySQL
• Полностью совместимая расширенная версия
• Около 30 человек (Engineering Team)
© 2017 Percona
14
Современные варианты MySQL
Какие форки MySQL выжили и активно развиваются?
▪MySQL от Oracle
▪Percona Server для MySQL
▪MariaDB
• Частично совместимая расширенная версия
• Свои: оптимизатор запросов, GTID, движки, ...
© 2017 Percona
15
Современные варианты MySQL
Какие форки выжили и активно развиваются?
▪MySQL от Oracle
▪Percona Server для MySQL
▪MariaDB
▪Форки компаний – открытые и закрытые
• Facebook: MyRocks, DocStore, статистика, производительность
• Alibaba: Sequence, Backup, SQL, статистика, производительность
• Amazon (Amazon Aurora): физическая репликация, производительность,
масштабирование, закрытая
© 2017 Percona
16
Где что загрузить: ссылки
▪MySQL от Oracle
• Документация: https://dev.mysql.com/doc/refman/5.7/en/
• Полный список фич для 5.7: http://www.thecompletelistoffeatures.com/
© 2017 Percona
17
Где что загрузить: ссылки
▪MySQL от Oracle
▪Percona Server для MySQL
• Документация: https://www.percona.com/doc/percona-server/LATEST/index.html
• Percona Database Performance Blog: http://percona.com/blog/
© 2017 Percona
18
Где что загрузить: ссылки
▪MySQL от Oracle
▪Percona Server для MySQL
▪MariaDB
• Документация: https://mariadb.com/kb/en/
• Foundation: http://mariadb.org/
© 2017 Percona
19
Где что загрузить: ссылки
▪MySQL от Oracle
▪Percona Server для MySQL
▪MariaDB
▪Открытые разработки Facebook
• Документация: https://github.com/facebook/mysql-5.6/wiki
• 8.0: https://github.com/facebook/mysql-8.0
© 2017 Percona
20
Где что загрузить: ссылки
▪MySQL от Oracle
▪Percona Server для MySQL
▪MariaDB
▪Открытые разработки Facebook
▪AliSQL
• https://github.com/alibaba/AliSQL
© 2017 Percona
21
Что стоит хранить в памяти,
а что – на диске?
© 2017 Percona
22
MySQL: что мы храним в памяти
▪Три вида буферов в памяти
• Глобальные
▪ InnoDB Buffer Pool: активный набор данных
▪ Query Cache (http://mysqlserverteam.com/mysql-8-0-retiring-support-for-the-query-cache/)
• Сессионные
▪ Sort buffer: маленькие!
▪ Всего не более, чем (Свободная память - глобальные) / max_connections
• Под операцию
▪ Временные таблицы: может быть создано много!
© 2017 Percona
23
MySQL: что мы храним на диске
▪MySQL лучше всего работает с данными в памяти
▪Для лучшей скорости
• Быстрые диски: SSD, Fusion IO
• innodb_io_capacity - рекомендуемое, реальное количество IOPS
• innodb_flush_method - O_DIRECT, тестируйте!
▪Скорость или надёжность?
• Операция fsync - дорогая
• Реже fsync - лучше производительность и ниже надёжность
© 2017 Percona
24
Почитать про память и диск
▪Оптимизация IO для InnoDB
• https://dev.mysql.com/doc/refman/5.7/en/innodb-disk-management.html
• https://www.percona.com/blog/2008/11/21/how-to-calculate-a-good-innodb-log-file-size/
▪Оптимальный размер InnoDB Buffer Pool
• https://www.percona.com/blog/2007/11/03/choosing-innodb_buffer_pool_size/
© 2017 Percona
25
Как правильно кэшировать?
© 2017 Percona
26
Кэширование в МySQL
▪Полезное кэширование: сервер
• binlog_[stmt_]cache_size
• table_definition_cache
• table_open_cache
• table_open_cache_instances - много не всегда хорошо
• thread_cache_size
© 2017 Percona
27
Кэширование в МySQL
▪Полезное кэширование: сервер
▪Полезное кэширование: InnoDB
• Buffer Pool: innodb_buffer_pool_size
• Log buffer: innodb_log_buffer_size
© 2017 Percona
28
Кэширование в МySQL
▪Полезное кэширование: сервер
▪Полезное кэширование: InnoDB
▪Чем плоха Query Cache
• Один mutex
• Знаменитые баги
▪ Bug #21074: Large query_cache freezes mysql server sporadically under heavy load
▪ Bug #47529: query cache performance is bad on multi-core servers
▪ Bug #37844: Fix SMP performance for the query cache
▪ Bug #60696: invalidating query cache entries (table) hangs replication
© 2017 Percona
29
Почитать про кэширование
https://dom.as/tech/query-cache-tuner/
© 2017 Percona
30
Кластеризация, шардинг, репликация –
когда и как?
© 2017 Percona
31
Репликация в МySQL
▪Встроенная
▪Простая в использовании
▪Требует настройки
▪Гибкая
© 2017 Percona
32
Рекомендуемая репликация
© 2017 Percona
33
Репликация: highload
▪Мастер
• Синхронизация
▪ sync_binlog
• 0 - самый быстрый
• 1 - самый надёжный
• >1 - компромисс между надёжностью и скоростью
▪Слейв
• Меньше потоков, чем на мастере
• Один relay log на channel
© 2017 Percona
34
Круговая
© 2017 Percona
35
Круговая репликация: highload
▪Те же проблемы, что и на “рекомендуемой”
▪Умножайте на 2 для каждого сервера
© 2017 Percona
36
Креативная
© 2017 Percona
37
Креативная: highload
© 2017 Percona
38
Кластеризация в МySQL
▪NDB Cluster
• Старейшее кластерное решение
• Рабочий набор данных в памяти
• Как минимум две копии данных
• Специфические требования к приложению
• Популярен среди европейских телекомов
© 2017 Percona
39
Кластеризация в МySQL
▪NDB Cluster
▪Percona XtraDB Cluster, Galera Cluster
• Синхронная репликация
• Собственный лог изменений
▪ innodb_flush_log_at_trx_commit=2 - безопасно и рекомендуется!
• Чтение: масштабируемое
• Запись: чем больше серверов в кластере, тем медленнее
© 2017 Percona
40
Percona XtraDB Cluster
© 2017 Percona
41
Кластеризация в МySQL
▪NDB Cluster
▪Percona XtraDB Cluster, Galera
▪InnoDB Cluster
• Архитектурно то же самое, что и Percona XtraDB Cluster/Galera
• Синхронная репликация
• Использует бинарный лог
• Чтение: масштабируемое
• Запись: чем больше серверов в кластере, тем медленнее
• Новый продукт
© 2017 Percona
42
Шардинг в МySQL
▪Встроенного не существует
© 2017 Percona
43
Шардинг в МySQL
▪Встроенного не существует
▪Shard Query
• Независимый продукт на PHP и Gearman
• https://github.com/greenlion/swanhart-tools/wiki/Shard-Query-Manual
© 2017 Percona
44
Шардинг в МySQL
▪Встроенного не существует
▪Shard Query
▪MySQL Fabric
• Продукт от Oracle
• Новый и, похоже, неподдерживаемый
• https://dev.mysql.com/doc/mysql-utilities/1.5/en/fabric.htm
© 2017 Percona
45
Шардинг в МySQL
▪Встроенного не существует
▪Shard Query
▪MySQL Fabric
▪ProxySQL
• Больше, чем шардинг
• Proxy, query rewrite, кэширование
• Стремительно набирает популярность
• https://www.percona.com/blog/2016/08/30/mysql-sharding-with-proxysql/
© 2017 Percona
46
Полезные ссылки
▪To Shard or Not to Shard (Peter Zaitsev, CEO, Percona) - in English
• https://www.youtube.com/watch?v=2MyyH-bH8Bw
▪Презентация о сценариях использования ProxySQL от его
разработчиков (на английском языке):
• http:/bit.ly/2qHmR4A
© 2017 Percona
47
Какие индексы нужны MySQL?
© 2017 Percona
48
Индексы MySQL и highload
На что влияют неуникальные ключи
▪SELECT
• Правильные улучшают скорость выполнения
• Если слишком много подходящих
▪ Оптимизатор может дольше “думать” над планом
© 2017 Percona
49
Индексы MySQL и highload
На что влияют неуникальные ключи
▪SELECT
▪INSERT
• Замедляют запись
• Требуется обновление не только данных, но и индекса
© 2017 Percona
50
Индексы MySQL и highload
На что влияют неуникальные ключи
▪SELECT
▪INSERT
▪UPDATE/DELETE
• Замедляют запись
• Правильные ускоряют поиск строк, удовлетворяющих WHERE
© 2017 Percona
51
Индексы MySQL и highload
На что влияют неуникальные ключи
▪SELECT
▪INSERT
▪UPDATE/DELETE
▪Внешние ключи
• При доступе к одной таблице строка в дочерней/родительской будет
заблокирована
© 2017 Percona
52
Индексы MySQL и highload
На что влияют неуникальные ключи
▪SELECT
▪INSERT
▪UPDATE/DELETE
▪Внешние ключи
▪Полнотекстовые индексы
• Поддерживаются с первых версий, InnoDB - 5.6+
• Для простых сценариев
• У специализированного ПО больше возможностей
© 2017 Percona
53
Что посмотреть про индексы
▪Мастер-класс "Работа с индексами: лучшие практики MySQL"
(Пётр Зайцев, CEO, Percona)
• https://www.youtube.com/watch?v=39e1vAGD3hg
▪MySQL 5.6 Full Text Search Throwdown
• https://www.percona.com/resources/mysql-webinars/mysql-56-full-text-search-throwdown
© 2017 Percona
54
Как работать с медленными запросами
MySQL?
Байка: нельзя оптимизировать запросы раз и навсегда
© 2017 Percona
55
Анализируем медленные запросы
▪Где найти
• Slow query log
▪ pt-query-digest
© 2017 Percona
56
Анализируем медленные запросы
▪Где найти
• Slow query log
• Performance Schema events_statements_*
▪ CREATED TMP DISK TABLES
▪ CREATED TMP TABLES
▪ SELECT FULL JOIN
▪ SELECT RANGE CHECK
▪ SELECT SCAN
▪ SORT MERGE PASSES
▪ SORT SCAN
© 2017 Percona
57
Анализируем медленные запросы
▪Где найти
• Slow query log
• Performance Schema events_statements_*
• sys schema
▪ statement analysis
▪ statements with full table scans
▪ statements with runtimes in 95th percentile
▪ statements with sorting
▪ statements with temp tables
▪ statements with errors or warnings
© 2017 Percona
58
Анализируем медленные запросы
▪Где найти
• Slow query log
• Performance Schema events_statements_*
• sys schema
• PMM и другие графические инструменты
© 2017 Percona
59
Query Analytics в PMM
© 2017 Percona
60
Анализируем медленные запросы
▪Где найти
▪Как чинить
• EXPLAIN
• EXPLAIN FORMAT=JSON
• INFORMATION_SCHEMA.OPTIMIZER_TRACE
• Анализ использования индексов
• Статистика
▪ SHOW STATUS LIKE ‘Handler_%’
© 2017 Percona
61
Что и где почитать
▪EXPLAIN: http://dev.mysql.com/doc/refman/5.7/en/explain.html
▪EXPLAIN FORMAT=JSON is Cool!
• https://www.percona.com/blog/2016/04/06/explain-format-json-wrap-up/
▪Optimizer Hints
• http://dev.mysql.com/doc/refman/5.7/en/optimizer-hints.html
▪PMM: https://pmmdemo.percona.com/
▪pt-query-digest
• https://www.percona.com/doc/percona-toolkit/LATEST/pt-query-digest.html
© 2017 Percona
62
Как настроить MySQL под нагрузку?
Байка: про какие опции всегда забывают
© 2017 Percona
63
Настраиваем MySQL для highload
▪table_open_cache, table_definition_cache
• Opened_tables, Opened_table_definitions не растёт
▪table_open_cache_instances
• Большое не нужно, обычно 2-4 достаточно
▪sort_buffer_size, сессионные буферы
• Маленький, можно увеличить для конкретной сессии
▪max_connections, max_allowed_packet
• Разумное
© 2017 Percona
64
Настраиваем InnoDB для highload
▪innodb_buffer_pool_size
• Чтобы вмещал рабочий набор данных
▪innodb_log_file_size
• Как минимум: изменения за час
▪innodb_io_capacity
• Реальное количество IOPS
▪innodb_thread_concurrency
• Количество процессоров
▪innodb_flush_method
© 2017 Percona
65
Что почитать про настройку
▪Опции MySQL
• http://dev.mysql.com/doc/refman/5.7/en/mysqld-option-tables.html
▪Опции Percona Server
• https://www.percona.com/doc/percona-server/5.7/ps-variables.html
▪Опции Galera Cluster
• https://mariadb.com/kb/en/mariadb/galera-cluster-system-variables/
▪Блог Дмитрия Кравчука
• http://dimitrik.free.fr/blog/
© 2017 Percona
66
Как понять, что «тупит» не MySQL?
Байка: не ругай «плохой» MySQL – посмотри, что у тебя за машины
© 2017 Percona
67
Что ещё может «тормозить»?
▪Другие приложения
• Выделенный сервер под базу
© 2017 Percona
68
Что ещё может «тормозить»?
▪Другие приложения
▪Диск
• Network storage
▪ NFS: никогда
▪ SAN: с осторожностью
• Не гарантирует точного ответа, записались ли данные
• Тестируйте innodb_flush_method
• Переносите работу в память
• Жертвуйте надёжностью
• Покупайте лучшие
© 2017 Percona
69
Что ещё может «тормозить»?
▪Другие приложения
▪Диск
▪CPU
• Агрессивные опции, отвечающие за параллельное выполнение
• Лимиты операционной системы
© 2017 Percona
70
Что ещё может «тормозить»?
▪Другие приложения
▪Диск
▪CPU
▪И всегда проверяйте, даёт ли нагрузку приложение!
© 2017 Percona
71
Что и где почитать по теме?
▪Linux Performance by Brendan Gregg
• http://brendangregg.com/linuxperf.html
© 2017 Percona
72
Вопросы?
Отвечает Света Смирнова
© 2017 Percona
73
P.S. Все материалы Percona о MySQL на
русском языке в открытом доступе
Собрала Анастасия Распопина
© 2017 Percona
74
Что ещё посмотреть по MySQL?
▪Анализ производительности и оптимизация MySQL, Пётр Зайцев
(Percona) - HighLoad++ 2013
▪Архитектура приложений с использованием MySQL, Пётр Зайцев
(Percona) - HighLoad++ 2014
▪SSD для вашей базы данных, Пётр Зайцев (Percona) - HighLoad++
2014
© 2017 Percona
75
Что ещё посмотреть по MySQL?
▪Troubleshooting MySQL Performance, Света Смирнова (Percona) -
LinuxPiter 2015
▪Ужимай и властвуй: алгоритмы компрессии в базах данных, Пётр
Зайцев (Percona) - HighLoad++ 2015
▪Практическая оптимизация MySQL: измерять, чтобы ускорять,
Пётр Зайцев (Percona) - HighLoad++ 2015
▪Обзор программных решений компании Percona, Пётр Зайцев
(Percona) - Технозавтрак 1С-Битрикс 2016
© 2017 Percona
76
Что ещё посмотреть по MySQL?
▪Методы и инструменты повышения производительности
5.6 и 5.7 - Николай Ихалайнен (Percona) - Стачка 2016
▪ MySQL 5.7 - NoSQL - JSON, Protocol X, Document Store, Пётр Зайцев
(Percona) - HighLoad++ 2016
▪MySQL® и MongoDB® - когда что лучше использовать? Пётр Зайцев
(Percona) - HighLoad++ 2016
▪Open Source SQL-базы данных вступили в эру млн. запросов в сек. /
Ф.Сигаев, С.Смирнова, А.Распопина - HighLoad++ 2016
© 2017 Percona
77
Что ещё посмотреть по MySQL?
▪Pquery - открытый бесплатный инструмент тестирования
Percona, Алексей Бычко (Percona) - HighLoad++ 2016
▪Эффективная отладка репликации MySQL, Света Смирнова
(Percona) - HighLoad++ 2016
▪СПАСИБО!
DATABASE PERFORMANCE
MATTERS
Database Performance Matters
Database Performance Matters
Database Performance Matters
Database Performance Matters
Database Performance Matters

More Related Content

PPTX
Как сделать сложное простым. История создания Проект1917 / Сергей Спорышев (I...
PDF
MySQL: чек-лист для новичка в highload (Cвета Cмирнова, Aнастасия Распопина ...
PDF
Что нового в MySQL 8.0? / Дмитрий Ленев (Oracle)
PPTX
Hosting for forbes.ru_
PDF
Мониторинг и отладка MySQL: максимум информации при минимальных потерях
PPTX
Чеклист по клиентской оптимизации - Лавлинский Николай, РИТ++ 2017
PDF
Сергей Аверин "Распространенные ошибки применения баз данных"
PPTX
Ошибки проектирования высоконагруженных проектов / Максим Ехлаков (OneTwoRent)
Как сделать сложное простым. История создания Проект1917 / Сергей Спорышев (I...
MySQL: чек-лист для новичка в highload (Cвета Cмирнова, Aнастасия Распопина ...
Что нового в MySQL 8.0? / Дмитрий Ленев (Oracle)
Hosting for forbes.ru_
Мониторинг и отладка MySQL: максимум информации при минимальных потерях
Чеклист по клиентской оптимизации - Лавлинский Николай, РИТ++ 2017
Сергей Аверин "Распространенные ошибки применения баз данных"
Ошибки проектирования высоконагруженных проектов / Максим Ехлаков (OneTwoRent)

What's hot (19)

PPTX
Погружение в виртуальную память и большие страницы / Константин Новаковский (...
PDF
Вадим Мадисон "Опыт разработки через микросервисы"
PDF
Сегментируем 600 млн. пользователей в режиме реального времени каждый день. H...
PDF
Что нужно знать о трёх топовых фичах MySQL
PDF
MySQL InnoDB Cluster
PPTX
MySQL® и MongoDB® - когда что лучше использовать? / Петр Зайцев (Percona)
PPTX
Как SRE следит за стабильностью и скоростью HeadHunter / Антон Иванов (HeadHu...
PDF
Архитектура HAWQ / Алексей Грищенко (Pivotal)
PPT
Drupalconf moscow-2012-arkharov
PPTX
Приключения проекта от компьютера разработчика до серьезных нагрузок / Андрей...
PPSX
Архитектура поиска в Booking.com / Иван Круглов (Booking.com)
PDF
SECON'2016. Панин Сергей, Лебедев Андрей, Храмушин Дмитрий, IT-инфраструктура...
PDF
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
PDF
Rspamd — высокопроизводительная система фильтрации спама / Стахов Всеволод (U...
PPTX
NAS, Predictions, Preloading, Presudo-Isomorphism / Охрименко Алексей (Acronis)
PPTX
Опыт построения СХД на базе Windows Server для использования в публичном обла...
PPTX
Настройка и оптимизация высоконагруженных J2EE веб-приложений / Шамим Ахмед (...
PDF
Брокер сообщений Kafka в условиях повышенной нагрузки / Артём Выборнов (Rambl...
PDF
Семантическое ядро рунета - высоконагруженная сontent-based рекомендательная ...
Погружение в виртуальную память и большие страницы / Константин Новаковский (...
Вадим Мадисон "Опыт разработки через микросервисы"
Сегментируем 600 млн. пользователей в режиме реального времени каждый день. H...
Что нужно знать о трёх топовых фичах MySQL
MySQL InnoDB Cluster
MySQL® и MongoDB® - когда что лучше использовать? / Петр Зайцев (Percona)
Как SRE следит за стабильностью и скоростью HeadHunter / Антон Иванов (HeadHu...
Архитектура HAWQ / Алексей Грищенко (Pivotal)
Drupalconf moscow-2012-arkharov
Приключения проекта от компьютера разработчика до серьезных нагрузок / Андрей...
Архитектура поиска в Booking.com / Иван Круглов (Booking.com)
SECON'2016. Панин Сергей, Лебедев Андрей, Храмушин Дмитрий, IT-инфраструктура...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Rspamd — высокопроизводительная система фильтрации спама / Стахов Всеволод (U...
NAS, Predictions, Preloading, Presudo-Isomorphism / Охрименко Алексей (Acronis)
Опыт построения СХД на базе Windows Server для использования в публичном обла...
Настройка и оптимизация высоконагруженных J2EE веб-приложений / Шамим Ахмед (...
Брокер сообщений Kafka в условиях повышенной нагрузки / Артём Выборнов (Rambl...
Семантическое ядро рунета - высоконагруженная сontent-based рекомендательная ...
Ad

Similar to Checklistfinal perconaconf (20)

PDF
MySQL - checklist для новичка в Highload
PDF
MySQL: чек-лист для новичка в highload / Анастасия Распопина, Света Смирнова ...
PPTX
Daemons In Web on #devrus
PPTX
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
PDF
MySQL NDB Cluster
PDF
Обзор перспективных баз данных для highload / Юрий Насретдинов
PDF
ekbpy'2012 - Данила Штань - Распределенное хранилище
PDF
Isilapp — Extreme Cloud Storage on FreeBSD
PPTX
Как мы храним и анализируем большой социальный граф, Максим Бартенев (Норси-т...
PDF
Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...
PDF
AVITO. Решардинг Redis без даунтайма. DevConf 2012
PDF
Optimization of a big PostgreSQL database
PDF
NVMf: 5 млн IOPS по сети своими руками / Андрей Николаенко (IBS)
PDF
Андрей Николаенко, IBS. NVMf: 5 млн IOPS по сети своими руками
 
PDF
Говорим о СУБД языком HR
PDF
Tech Talks @NSU: Что такое Highload? Секреты высокой нагрузки.
PDF
Что такое Highload? Секреты высокой нагрузки
PPTX
Tarantool, .net, newsql
PDF
High load2007 scaling-web-applications-rus
PDF
Сергей Житинский, Александр Чистяков (Git in Sky)
MySQL - checklist для новичка в Highload
MySQL: чек-лист для новичка в highload / Анастасия Распопина, Света Смирнова ...
Daemons In Web on #devrus
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
MySQL NDB Cluster
Обзор перспективных баз данных для highload / Юрий Насретдинов
ekbpy'2012 - Данила Штань - Распределенное хранилище
Isilapp — Extreme Cloud Storage on FreeBSD
Как мы храним и анализируем большой социальный граф, Максим Бартенев (Норси-т...
Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...
AVITO. Решардинг Redis без даунтайма. DevConf 2012
Optimization of a big PostgreSQL database
NVMf: 5 млн IOPS по сети своими руками / Андрей Николаенко (IBS)
Андрей Николаенко, IBS. NVMf: 5 млн IOPS по сети своими руками
 
Говорим о СУБД языком HR
Tech Talks @NSU: Что такое Highload? Секреты высокой нагрузки.
Что такое Highload? Секреты высокой нагрузки
Tarantool, .net, newsql
High load2007 scaling-web-applications-rus
Сергей Житинский, Александр Чистяков (Git in Sky)
Ad

Checklistfinal perconaconf

  • 1. © 2017 Percona 1 Света Смирнова, ведущий инженер технической поддержки (Percona) Анастасия Распопина, специалист по маркетингу (Percona) MySQL: чек-лист для новичка в highload Кейсы, списки настроек, must have, полезные ссылки Профессиональный фестиваль «Российские интернет-технологии» (РИТ++), конференция HighLoad Junior 5 июня 2017 г.
  • 2. © 2017 Percona 2 Кто мы и откуда? Кратко о нас и нашей компании ▪Света Смирнова • Ведущий инженер службы технической поддержки • 10+ лет работы в поддержке MySQL, автор книги “MySQL Troubleshooting” и UDF-функций для MySQL (дизайн-прототип встроенных JSON-функций).
  • 3. © 2017 Percona 3 Кто мы и откуда? Кратко о нас и нашей компании ▪Света Смирнова ▪Анастасия Распопина • Специалист по маркетингу • Работала в GameDev, организовывала HL++, РИТ++, сейчас в Percona Events Team.
  • 4. © 2017 Percona 4 Кто мы и откуда? Кратко о нас и нашей компании ▪Света Смирнова, ведущий инженер службы технической поддержки ▪Анастасия Распопина, специалист по маркетингу ▪Компания Percona • Поставщик 100% Open Source ПО для MySQL и MongoDB, а также услуг поддержки, консалтинга и удалённого администрирования для этих СУБД
  • 5. © 2017 Percona 5 Что такое highload сейчас? Даём определение высокой нагрузке на 2017 г. ▪Не цифры: предельные нагрузки • Сколько записей в секунду выдержит диск? • Запросов на чтение? • Пользовательских соединений?
  • 6. © 2017 Percona 6 Что такое highload сейчас? Даём определение высокой нагрузке на 2017 г. ▪Не цифры: предельные нагрузки ▪Железо имеет значение • t2.micro или “Машины Баз Данных” (WS, 6 июня, 16.00) • Много читаем: память • Много пишем: быстрый диск • Много активных соединений: CPU • Неоптимизированные запросы: CPU
  • 7. © 2017 Percona 7 Что такое highload сейчас? Даём определение высокой нагрузке на 2017 г. ▪Не цифры: предельные нагрузки ▪Железо имеет значение ▪Цифры • Стандартные бенчмарки всегда синтетические • Реальность обычно разнообразнее
  • 8. © 2017 Percona 8 Что такое highload сейчас? Цифры: рост производительности MySQL https://www.slideshare.net/geirhoydalsvik/whats-new-in-mysql-57
  • 9. © 2017 Percona 9 Что такое highload сейчас? Цифры: рост интернета
  • 10. © 2017 Percona 10 Что такое highload сейчас? Даём определение высокой нагрузке на 2017 г. ▪Highload • Та нагрузка, с которой СУБД не справляется • Нельзя раз и навсегда оптимизироваться «под highload», это непрерывный процесс
  • 11. © 2017 Percona 11 Обзор форков MySQL Oracle MySQL, Percona Server для MySQL, MariaDB, форки внутри компаний
  • 12. © 2017 Percona 12 Современные варианты MySQL Какие форки MySQL выжили и активно развиваются? ▪MySQL от Oracle • Оригинальный MySQL, над которым работают инженеры Oracle • “Сотни человек” (https://www.percona.com/blog/2014/02/18/oracles-morgan-tocker-opens-up-about-mysql-development-mysql-5-7/)
  • 13. © 2017 Percona 13 Современные варианты MySQL Какие форки MySQL выжили и активно развиваются? ▪MySQL от Oracle ▪Percona Server для MySQL • Полностью совместимая расширенная версия • Около 30 человек (Engineering Team)
  • 14. © 2017 Percona 14 Современные варианты MySQL Какие форки MySQL выжили и активно развиваются? ▪MySQL от Oracle ▪Percona Server для MySQL ▪MariaDB • Частично совместимая расширенная версия • Свои: оптимизатор запросов, GTID, движки, ...
  • 15. © 2017 Percona 15 Современные варианты MySQL Какие форки выжили и активно развиваются? ▪MySQL от Oracle ▪Percona Server для MySQL ▪MariaDB ▪Форки компаний – открытые и закрытые • Facebook: MyRocks, DocStore, статистика, производительность • Alibaba: Sequence, Backup, SQL, статистика, производительность • Amazon (Amazon Aurora): физическая репликация, производительность, масштабирование, закрытая
  • 16. © 2017 Percona 16 Где что загрузить: ссылки ▪MySQL от Oracle • Документация: https://dev.mysql.com/doc/refman/5.7/en/ • Полный список фич для 5.7: http://www.thecompletelistoffeatures.com/
  • 17. © 2017 Percona 17 Где что загрузить: ссылки ▪MySQL от Oracle ▪Percona Server для MySQL • Документация: https://www.percona.com/doc/percona-server/LATEST/index.html • Percona Database Performance Blog: http://percona.com/blog/
  • 18. © 2017 Percona 18 Где что загрузить: ссылки ▪MySQL от Oracle ▪Percona Server для MySQL ▪MariaDB • Документация: https://mariadb.com/kb/en/ • Foundation: http://mariadb.org/
  • 19. © 2017 Percona 19 Где что загрузить: ссылки ▪MySQL от Oracle ▪Percona Server для MySQL ▪MariaDB ▪Открытые разработки Facebook • Документация: https://github.com/facebook/mysql-5.6/wiki • 8.0: https://github.com/facebook/mysql-8.0
  • 20. © 2017 Percona 20 Где что загрузить: ссылки ▪MySQL от Oracle ▪Percona Server для MySQL ▪MariaDB ▪Открытые разработки Facebook ▪AliSQL • https://github.com/alibaba/AliSQL
  • 21. © 2017 Percona 21 Что стоит хранить в памяти, а что – на диске?
  • 22. © 2017 Percona 22 MySQL: что мы храним в памяти ▪Три вида буферов в памяти • Глобальные ▪ InnoDB Buffer Pool: активный набор данных ▪ Query Cache (http://mysqlserverteam.com/mysql-8-0-retiring-support-for-the-query-cache/) • Сессионные ▪ Sort buffer: маленькие! ▪ Всего не более, чем (Свободная память - глобальные) / max_connections • Под операцию ▪ Временные таблицы: может быть создано много!
  • 23. © 2017 Percona 23 MySQL: что мы храним на диске ▪MySQL лучше всего работает с данными в памяти ▪Для лучшей скорости • Быстрые диски: SSD, Fusion IO • innodb_io_capacity - рекомендуемое, реальное количество IOPS • innodb_flush_method - O_DIRECT, тестируйте! ▪Скорость или надёжность? • Операция fsync - дорогая • Реже fsync - лучше производительность и ниже надёжность
  • 24. © 2017 Percona 24 Почитать про память и диск ▪Оптимизация IO для InnoDB • https://dev.mysql.com/doc/refman/5.7/en/innodb-disk-management.html • https://www.percona.com/blog/2008/11/21/how-to-calculate-a-good-innodb-log-file-size/ ▪Оптимальный размер InnoDB Buffer Pool • https://www.percona.com/blog/2007/11/03/choosing-innodb_buffer_pool_size/
  • 25. © 2017 Percona 25 Как правильно кэшировать?
  • 26. © 2017 Percona 26 Кэширование в МySQL ▪Полезное кэширование: сервер • binlog_[stmt_]cache_size • table_definition_cache • table_open_cache • table_open_cache_instances - много не всегда хорошо • thread_cache_size
  • 27. © 2017 Percona 27 Кэширование в МySQL ▪Полезное кэширование: сервер ▪Полезное кэширование: InnoDB • Buffer Pool: innodb_buffer_pool_size • Log buffer: innodb_log_buffer_size
  • 28. © 2017 Percona 28 Кэширование в МySQL ▪Полезное кэширование: сервер ▪Полезное кэширование: InnoDB ▪Чем плоха Query Cache • Один mutex • Знаменитые баги ▪ Bug #21074: Large query_cache freezes mysql server sporadically under heavy load ▪ Bug #47529: query cache performance is bad on multi-core servers ▪ Bug #37844: Fix SMP performance for the query cache ▪ Bug #60696: invalidating query cache entries (table) hangs replication
  • 29. © 2017 Percona 29 Почитать про кэширование https://dom.as/tech/query-cache-tuner/
  • 30. © 2017 Percona 30 Кластеризация, шардинг, репликация – когда и как?
  • 31. © 2017 Percona 31 Репликация в МySQL ▪Встроенная ▪Простая в использовании ▪Требует настройки ▪Гибкая
  • 33. © 2017 Percona 33 Репликация: highload ▪Мастер • Синхронизация ▪ sync_binlog • 0 - самый быстрый • 1 - самый надёжный • >1 - компромисс между надёжностью и скоростью ▪Слейв • Меньше потоков, чем на мастере • Один relay log на channel
  • 35. © 2017 Percona 35 Круговая репликация: highload ▪Те же проблемы, что и на “рекомендуемой” ▪Умножайте на 2 для каждого сервера
  • 38. © 2017 Percona 38 Кластеризация в МySQL ▪NDB Cluster • Старейшее кластерное решение • Рабочий набор данных в памяти • Как минимум две копии данных • Специфические требования к приложению • Популярен среди европейских телекомов
  • 39. © 2017 Percona 39 Кластеризация в МySQL ▪NDB Cluster ▪Percona XtraDB Cluster, Galera Cluster • Синхронная репликация • Собственный лог изменений ▪ innodb_flush_log_at_trx_commit=2 - безопасно и рекомендуется! • Чтение: масштабируемое • Запись: чем больше серверов в кластере, тем медленнее
  • 40. © 2017 Percona 40 Percona XtraDB Cluster
  • 41. © 2017 Percona 41 Кластеризация в МySQL ▪NDB Cluster ▪Percona XtraDB Cluster, Galera ▪InnoDB Cluster • Архитектурно то же самое, что и Percona XtraDB Cluster/Galera • Синхронная репликация • Использует бинарный лог • Чтение: масштабируемое • Запись: чем больше серверов в кластере, тем медленнее • Новый продукт
  • 42. © 2017 Percona 42 Шардинг в МySQL ▪Встроенного не существует
  • 43. © 2017 Percona 43 Шардинг в МySQL ▪Встроенного не существует ▪Shard Query • Независимый продукт на PHP и Gearman • https://github.com/greenlion/swanhart-tools/wiki/Shard-Query-Manual
  • 44. © 2017 Percona 44 Шардинг в МySQL ▪Встроенного не существует ▪Shard Query ▪MySQL Fabric • Продукт от Oracle • Новый и, похоже, неподдерживаемый • https://dev.mysql.com/doc/mysql-utilities/1.5/en/fabric.htm
  • 45. © 2017 Percona 45 Шардинг в МySQL ▪Встроенного не существует ▪Shard Query ▪MySQL Fabric ▪ProxySQL • Больше, чем шардинг • Proxy, query rewrite, кэширование • Стремительно набирает популярность • https://www.percona.com/blog/2016/08/30/mysql-sharding-with-proxysql/
  • 46. © 2017 Percona 46 Полезные ссылки ▪To Shard or Not to Shard (Peter Zaitsev, CEO, Percona) - in English • https://www.youtube.com/watch?v=2MyyH-bH8Bw ▪Презентация о сценариях использования ProxySQL от его разработчиков (на английском языке): • http:/bit.ly/2qHmR4A
  • 47. © 2017 Percona 47 Какие индексы нужны MySQL?
  • 48. © 2017 Percona 48 Индексы MySQL и highload На что влияют неуникальные ключи ▪SELECT • Правильные улучшают скорость выполнения • Если слишком много подходящих ▪ Оптимизатор может дольше “думать” над планом
  • 49. © 2017 Percona 49 Индексы MySQL и highload На что влияют неуникальные ключи ▪SELECT ▪INSERT • Замедляют запись • Требуется обновление не только данных, но и индекса
  • 50. © 2017 Percona 50 Индексы MySQL и highload На что влияют неуникальные ключи ▪SELECT ▪INSERT ▪UPDATE/DELETE • Замедляют запись • Правильные ускоряют поиск строк, удовлетворяющих WHERE
  • 51. © 2017 Percona 51 Индексы MySQL и highload На что влияют неуникальные ключи ▪SELECT ▪INSERT ▪UPDATE/DELETE ▪Внешние ключи • При доступе к одной таблице строка в дочерней/родительской будет заблокирована
  • 52. © 2017 Percona 52 Индексы MySQL и highload На что влияют неуникальные ключи ▪SELECT ▪INSERT ▪UPDATE/DELETE ▪Внешние ключи ▪Полнотекстовые индексы • Поддерживаются с первых версий, InnoDB - 5.6+ • Для простых сценариев • У специализированного ПО больше возможностей
  • 53. © 2017 Percona 53 Что посмотреть про индексы ▪Мастер-класс "Работа с индексами: лучшие практики MySQL" (Пётр Зайцев, CEO, Percona) • https://www.youtube.com/watch?v=39e1vAGD3hg ▪MySQL 5.6 Full Text Search Throwdown • https://www.percona.com/resources/mysql-webinars/mysql-56-full-text-search-throwdown
  • 54. © 2017 Percona 54 Как работать с медленными запросами MySQL? Байка: нельзя оптимизировать запросы раз и навсегда
  • 55. © 2017 Percona 55 Анализируем медленные запросы ▪Где найти • Slow query log ▪ pt-query-digest
  • 56. © 2017 Percona 56 Анализируем медленные запросы ▪Где найти • Slow query log • Performance Schema events_statements_* ▪ CREATED TMP DISK TABLES ▪ CREATED TMP TABLES ▪ SELECT FULL JOIN ▪ SELECT RANGE CHECK ▪ SELECT SCAN ▪ SORT MERGE PASSES ▪ SORT SCAN
  • 57. © 2017 Percona 57 Анализируем медленные запросы ▪Где найти • Slow query log • Performance Schema events_statements_* • sys schema ▪ statement analysis ▪ statements with full table scans ▪ statements with runtimes in 95th percentile ▪ statements with sorting ▪ statements with temp tables ▪ statements with errors or warnings
  • 58. © 2017 Percona 58 Анализируем медленные запросы ▪Где найти • Slow query log • Performance Schema events_statements_* • sys schema • PMM и другие графические инструменты
  • 59. © 2017 Percona 59 Query Analytics в PMM
  • 60. © 2017 Percona 60 Анализируем медленные запросы ▪Где найти ▪Как чинить • EXPLAIN • EXPLAIN FORMAT=JSON • INFORMATION_SCHEMA.OPTIMIZER_TRACE • Анализ использования индексов • Статистика ▪ SHOW STATUS LIKE ‘Handler_%’
  • 61. © 2017 Percona 61 Что и где почитать ▪EXPLAIN: http://dev.mysql.com/doc/refman/5.7/en/explain.html ▪EXPLAIN FORMAT=JSON is Cool! • https://www.percona.com/blog/2016/04/06/explain-format-json-wrap-up/ ▪Optimizer Hints • http://dev.mysql.com/doc/refman/5.7/en/optimizer-hints.html ▪PMM: https://pmmdemo.percona.com/ ▪pt-query-digest • https://www.percona.com/doc/percona-toolkit/LATEST/pt-query-digest.html
  • 62. © 2017 Percona 62 Как настроить MySQL под нагрузку? Байка: про какие опции всегда забывают
  • 63. © 2017 Percona 63 Настраиваем MySQL для highload ▪table_open_cache, table_definition_cache • Opened_tables, Opened_table_definitions не растёт ▪table_open_cache_instances • Большое не нужно, обычно 2-4 достаточно ▪sort_buffer_size, сессионные буферы • Маленький, можно увеличить для конкретной сессии ▪max_connections, max_allowed_packet • Разумное
  • 64. © 2017 Percona 64 Настраиваем InnoDB для highload ▪innodb_buffer_pool_size • Чтобы вмещал рабочий набор данных ▪innodb_log_file_size • Как минимум: изменения за час ▪innodb_io_capacity • Реальное количество IOPS ▪innodb_thread_concurrency • Количество процессоров ▪innodb_flush_method
  • 65. © 2017 Percona 65 Что почитать про настройку ▪Опции MySQL • http://dev.mysql.com/doc/refman/5.7/en/mysqld-option-tables.html ▪Опции Percona Server • https://www.percona.com/doc/percona-server/5.7/ps-variables.html ▪Опции Galera Cluster • https://mariadb.com/kb/en/mariadb/galera-cluster-system-variables/ ▪Блог Дмитрия Кравчука • http://dimitrik.free.fr/blog/
  • 66. © 2017 Percona 66 Как понять, что «тупит» не MySQL? Байка: не ругай «плохой» MySQL – посмотри, что у тебя за машины
  • 67. © 2017 Percona 67 Что ещё может «тормозить»? ▪Другие приложения • Выделенный сервер под базу
  • 68. © 2017 Percona 68 Что ещё может «тормозить»? ▪Другие приложения ▪Диск • Network storage ▪ NFS: никогда ▪ SAN: с осторожностью • Не гарантирует точного ответа, записались ли данные • Тестируйте innodb_flush_method • Переносите работу в память • Жертвуйте надёжностью • Покупайте лучшие
  • 69. © 2017 Percona 69 Что ещё может «тормозить»? ▪Другие приложения ▪Диск ▪CPU • Агрессивные опции, отвечающие за параллельное выполнение • Лимиты операционной системы
  • 70. © 2017 Percona 70 Что ещё может «тормозить»? ▪Другие приложения ▪Диск ▪CPU ▪И всегда проверяйте, даёт ли нагрузку приложение!
  • 71. © 2017 Percona 71 Что и где почитать по теме? ▪Linux Performance by Brendan Gregg • http://brendangregg.com/linuxperf.html
  • 73. © 2017 Percona 73 P.S. Все материалы Percona о MySQL на русском языке в открытом доступе Собрала Анастасия Распопина
  • 74. © 2017 Percona 74 Что ещё посмотреть по MySQL? ▪Анализ производительности и оптимизация MySQL, Пётр Зайцев (Percona) - HighLoad++ 2013 ▪Архитектура приложений с использованием MySQL, Пётр Зайцев (Percona) - HighLoad++ 2014 ▪SSD для вашей базы данных, Пётр Зайцев (Percona) - HighLoad++ 2014
  • 75. © 2017 Percona 75 Что ещё посмотреть по MySQL? ▪Troubleshooting MySQL Performance, Света Смирнова (Percona) - LinuxPiter 2015 ▪Ужимай и властвуй: алгоритмы компрессии в базах данных, Пётр Зайцев (Percona) - HighLoad++ 2015 ▪Практическая оптимизация MySQL: измерять, чтобы ускорять, Пётр Зайцев (Percona) - HighLoad++ 2015 ▪Обзор программных решений компании Percona, Пётр Зайцев (Percona) - Технозавтрак 1С-Битрикс 2016
  • 76. © 2017 Percona 76 Что ещё посмотреть по MySQL? ▪Методы и инструменты повышения производительности 5.6 и 5.7 - Николай Ихалайнен (Percona) - Стачка 2016 ▪ MySQL 5.7 - NoSQL - JSON, Protocol X, Document Store, Пётр Зайцев (Percona) - HighLoad++ 2016 ▪MySQL® и MongoDB® - когда что лучше использовать? Пётр Зайцев (Percona) - HighLoad++ 2016 ▪Open Source SQL-базы данных вступили в эру млн. запросов в сек. / Ф.Сигаев, С.Смирнова, А.Распопина - HighLoad++ 2016
  • 77. © 2017 Percona 77 Что ещё посмотреть по MySQL? ▪Pquery - открытый бесплатный инструмент тестирования Percona, Алексей Бычко (Percona) - HighLoad++ 2016 ▪Эффективная отладка репликации MySQL, Света Смирнова (Percona) - HighLoad++ 2016 ▪СПАСИБО!
  • 78. DATABASE PERFORMANCE MATTERS Database Performance Matters Database Performance Matters Database Performance Matters Database Performance Matters Database Performance Matters