Upload
sqalab
View
516
Download
8
Embed Size (px)
DESCRIPTION
Доклад Александра Чистякова на конференции Application Developer Days-4. г.Минск 13 декабря 2013
Citation preview
Git in Sky, 2013
Кто я?
● Инженер● Главный инженер, компания Git in Sky● 15 лет в индустрии● Занимаюсь эксплуатацией веб-сайтов● Оптимизирую производительность
Git in Sky, 2013
Кто вы?
● Работаете в сервисной компании?● Работаете в продуктовой компании?● Разрабатываете веб-сайты?● PHP, Ruby, Java, Perl, Node.JS?● Оптимизируете производительность?
Git in Sky, 2013
Постановка задачи
● Любое приложение на любом языке работает неоптимально● Иногда с этим можно мириться● Иногда с этим нужно бороться● Возможные результаты борьбы:● Приложение работает быстрее● Приложение использует меньше ресурсов
Git in Sky, 2013
Как это работало в идеальном мире?
● В идеальном мире проблемы всегда с БД● Средства профилирования БД:● Лог долгих запросов● Команда EXPLAIN● Книга Дэна Тоу
Git in Sky, 2013
Пример №1
● Сайт на Ruby on Rails● С базой данных все более-менее нормально● Слишком много процессора расходуется серверами приложений● ^ Что, вообще-то, не является большой проблемой, пока серверов приложений меньше, чем N, где N определяется жадностью клиента и другими параметрами
Git in Sky, 2013
Как быть?
● Заплатить NewRelic за Pro версию● Использовать http://poormansprofiler.org/● Расставить собственные метрики в коде и собирать их в StatsD/Graphite● Использовать DTrace!
Git in Sky, 2013
DTrace? Нет, не слышал!
● Была такая компания Sun Microsystems...● Была такая операционная система OpenSolaris...● DTrace — динамический фреймворк профайлинга приложений, созданный под OpenSolaris
Git in Sky, 2013
В наше время
● Компании Sun больше нет, но● DTrace есть во всех Illumos-based дистрибутивах● ^ мы используем SmartOS● DTrace есть в Mac OS X● DTrace есть во FreeBSD
Git in Sky, 2013
Динамический...
● «Probes» - датчики● Инструментировано все подряд, начиная от ядра системы● Профайлинг можно включать на продакшн-системе● Это не должно сильно расходовать ресурсы*
Git in Sky, 2013
Что сделали
● Развернули сайт на SmartOS● Написали DTrace скрипты● Записали тестовый сценарий в Tsung● Запустили его, создали нагрузку● Собрали статистику● Проанализировали● Собрали статистику● Проанализировали● Собрали статистику...
Git in Sky, 2013
Что нашли
● Медленно работает рендеринг некоторых страниц (partials)● Впрочем, эта проблема разработчикам Ruby была известна (диалог как в «Ghost Dog»):● - Чувак, паршэлы тормозят!● - Походу, чувак, паршэлы тормозят!
Git in Sky, 2013
С чем столкнулись
● Стандартный PostgreSQL собран без Hstore● Разработчики не хотят ничего оптимизировать● ^ Большой проект не такой большой!
Git in Sky, 2013
Зачем все это было?
● Не расходитесь, кроме больших веб-проектов в жизни есть и другие дела● Кроме того, платить за NewRelic и не знать, как собрать его самому из подручных бесплатных средств — это не инженерный подход, а какая-то ситуация из 90-х
Git in Sky, 2013
В углах ринга
● MySQL 5.6 из репозитория pkgsrc для SmartOS, собранный не нами● MariaDB 10.0.6 Beta, собранная нами● ^ Нечестно, нужно было взять более новый MySQL!● ^^ Хехе, дождитесь результатов!
Git in Sky, 2013
Правила соревнования
● Идентичные настройки в конфиге● Идентичная sakiladb с официального сайта● (почти) Простейший запрос из официальной документации же● Клиент делает его по сети в один поток с другой машины просто из шелл-программы в бесконечном цикле
Git in Sky, 2013
DTrace скрипт, часть 1
#!/usr/sbin/dtrace -s#pragma D option quiet dtrace:::BEGIN{ secs = 600;} profile:::profile-4001/pid == mysql_pid/{ @stacks[pid, tid, execname, ustack(5)] = count();} profile:::tick-1sec{ secs--;}
Git in Sky, 2013
DTrace скрипт, часть 2
profile:::tick-1sec/secs == 0/{ exit(0);} END{ trunc(@stacks, 40); printa(@stacks);}
Git in Sky, 2013
Что нашли
● Секретный технический текст: http://goo.gl/HFsFKv
● Если вкратце:● Парсер SQL отлично виден на радаре● MySQL — 430 из 16359 фреймов связаны с парсингом
● MariaDB — 698 из 12002 фреймов связаны с парсингом
● Похоже, у нас есть победитель! (MariaDB парсит дольше)
Git in Sky, 2013
С чем столкнулись
● MariaDB под Solaris давно никто не собирал● Чтобы использовать DTrace с MariaDB, нужно выкинуть DTrace инструментирование из MariaDB!● Почему 4001hz профайлер собирает так мало сэмплов?● ^ Я не знаю!
Git in Sky, 2013
Выводы
● Работа для инженера найдется всегда● Существуют отличные средства для анализа производительности● Они бесплатны, их можно использовать● Используйте их!
Git in Sky, 2013
Вопросы?
● Спасибо! С вами был● Александр Чистяков, главный инженер● [email protected]● Компания Git in Sky● Кстати, нас можно нанять!● [email protected]