Download - Пётр Зайцев, Percona

Transcript
Page 1: Пётр Зайцев, Percona

Анализ производительности и

оптимизация приложений на MySQL

Петр Зайцев

CEO Percona

29 октября 2013г

Page 2: Пётр Зайцев, Percona

О презентации

•Краткий обзор • Более детально - на VIP-дне.

•Большая часть сказанного относится к большинству баз данных • SQL и NoSQL.

Page 3: Пётр Зайцев, Percona

Моя цель

•Чтобы вы знали, когда надо оптимизировать базы данных.

•Чтобы вы знали, когда оптимизировать базы данных.

•Чтобы вы в принципе знали, что в них можно оптимизировать.

Page 4: Пётр Зайцев, Percona

Производительность базы данных не важна для пользователя! •Важна производительность приложения.

Page 5: Пётр Зайцев, Percona

О чем мечтает пользователь?

•О том, чтобы приложение быстро откликалось на попытки пользователя взаимодействовать с ним.

•Любого взаимодействия.

•Всегда.

Page 6: Пётр Зайцев, Percona

Что значит «быстро»?

•Все зависит от приложения и операции.

•Определяется Бизнесом.

•Ожидания по скорости ответа есть всегда.

Page 7: Пётр Зайцев, Percona

Не производительностью единой… •Высокая доступность

•Безопасность

•Легкость и скорость разработки

•Качество

•….

Page 8: Пётр Зайцев, Percona

«Виновата» ли база данных ?

•«Почему вы считаете, что тормозит именно база данных?» • «Потому что предыдущие 3 раза тормозила

именно база данных». • Из почти анекдота

Page 9: Пётр Зайцев, Percona

А как же знать точно?

•Инструментарий • Самописный • NewRelic, AppDynamics и т.д. • Важно знать, из чего именно формируется время

ответа.

•Мониторинг и анализ корреляций • когда инструментарий не доступен.

Page 10: Пётр Зайцев, Percona

Масштаб

•На пустой базе данных для одного пользователя любые запросы «летают».

•Проблемы возникают с масштабом. • Число пользователей и их активность • Объем данных • Сложность запросов

Page 11: Пётр Зайцев, Percona

Что делать, если база данных не справляется ? •Не все проблемы базы данных решаются непосредственно на уровне базы данных.

Page 12: Пётр Зайцев, Percona

Где решаются проблемы производительности? •Архитектура приложения

•Правильный выбор технологий

•«Железо»

•Операционная система и ее конфигурация

•Схема базы данных и запросы

•Конфигурация базы данных

Page 13: Пётр Зайцев, Percona

Архитектура приложения

•Наиболее важно!

•Обычно эволюционирует со временем. • Меняется масштаб. • Меняются технологии.

Page 14: Пётр Зайцев, Percona

Основные шаблоны архитектуры •Репликация

•Разделение данных на множество узлов

•Кэширование

•Избыточное хранение

•Пре-генерация данных

•Буферизация

Page 15: Пётр Зайцев, Percona

Параллельность

•Для любой системы есть оптимальная параллельность.

•При превышении снижается эффективность.

Page 16: Пётр Зайцев, Percona

Ограничение для стабильности

•Часто хорошо ограничить «параллельность» за счет использования очереди.

Page 17: Пётр Зайцев, Percona

Выбор технологий

•MySQL - всего лишь один из выборов. •Можно использовать несколько технологий одновременно.

•Примеры: • Memcache, Redis, Tarantool • Sphinx, Solr, ElasticSearch • MongoDB,Cassandra,Couchbase • Hadoop

Page 18: Пётр Зайцев, Percona

«Железо» может многое

• MySQL показывает более 200 тыс. простых запросов/сек на современном «железе».

• Может «перелопатить» более 10 млн. строк/cек.

• Обновить или вставить более 200 тыс. строк.

• Можем получить 64+ потоков на сервере.

• Более 1 TБ оперативной памяти.

• Flash-диски дают 100тыс+ записей/сек.

Page 19: Пётр Зайцев, Percona

Основное по выбору «железа» •Процессоры для MySQL

• Обычно быстрота ядер важнее их числа.

•Быстрая сеть – очень важно время отклика и стабильность.

•Диски • Flash/SSD – отлично • RAID с кэшем и батарейкой - хорошо

Page 20: Пётр Зайцев, Percona

Память

• Больше памяти – меньше нагрузки на диски.

• Часто используемые данные должны «влезать» в память.

Page 21: Пётр Зайцев, Percona

Операционная система

•Linux – наиболее типичный выбор •Серверный дистрибутив •Разумно новая версия для нового железа •Масштабируемая файловая система

• XFS или EXT4 на Linux

•Более поднобно в Webinar • http://bit.ly/1imDk3f

Page 22: Пётр Зайцев, Percona

Версии MySQL

•Каждая новая версия масштабируется все лучше • Правда, часто за счет производительности при

одном пользователе

Page 23: Пётр Зайцев, Percona

Следите за стабильностью

•Важно для реальных систем

•Редко увидите в маркетинговых материалах

Page 24: Пётр Зайцев, Percona

Конфигурация базы данных

• Конфигурировать MySQL Нужно • Умолчания не предназначены для больших серверов • Наиболее важно – использование памяти • innodb_buffer_pool_size • innodb_log_file_size=256M • innodb_fush_method=O_DIRECT • innodb_flush_log_at_trx_commit • innodb_file_per_table=1

• Подробно • http://bit.ly/1fuP0SZ

Page 25: Пётр Зайцев, Percona

Запросы и структура баз данных • Думайте о проблемах, а не просто о запросе

• На них нужно смотреть вместе

• Важно понимать, как база данных исполняет запрос

• Ваш друг в MySQL – EXPLAIN • http://dev.mysql.com/doc/refman/5.6/en/using-

explain.html

• Не все сводится к индексам, но с них полезно начинать

• http://bit.ly/NvQUpO

Page 26: Пётр Зайцев, Percona

Вместо заключения

•Знайте, какая производительность вам нужна.

•Понимайте, во что «упирается» система.

•Знайте о вариантах оптимизации.

•Оптимизируйте то, что разумно, и когда это разумно.

Page 27: Пётр Зайцев, Percona

Спасибо!

Зайцев Петр [email protected]

@PeterZaitsev http://www.linkedin.com/in/peterzaitsev

http://www.percona.com