SlideShare une entreprise Scribd logo
1  sur  39
Télécharger pour lire hors ligne
Оптимизация
производительности большой
унаследованной PostgreSQL
базы
Электропрохладительный
кислотный тест
Александр Чистяков,
главный инженер Git in Sky,
2014
Кто я?
§ Меня зовут Саша
§ Я инженер, главный инженер
§ В компании Git in Sky
§ Я люблю оптимизировать производительность
§ Потому что это как волшебная сказка!
Оптимизация производительности большой унаследованной PostgreSQL базы. 2014
Где я? Кто вы?
§ Любите волшебные сказки?
§ Пришли послушать про базу данных?
§ Пришли послушать про оптимизацию производительности?
§ Разрабатываете проекты для веб?
§ Поддерживаете проекты в веб?
§ У вас уже есть PostgreSQL?
Оптимизация производительности большой унаследованной PostgreSQL базы. 2014
О чем речь?
§ Доклад в жанре “field report”
§ Если угодно - “trip report” (см. подназвание доклада)
§ Предыстория: http://www.slideshare.net/profyclub_ru/08-6
§ Однажды ко мне в дверь постучал
добрый волшебник
§ И все заверте...
Оптимизация производительности большой унаследованной PostgreSQL базы. 2014
Краткое содержание предыдущих серий
§ Заказчик — конструктор сайтов http://setup.ru
§ Пользовательский статический контент (файлы) хранится в
базе данных (PostgreSQL)
§ Для больших файлов используются large objects
§ Приложение на Perl, работает под Apache + mod_perl
§ Переходим из 2012-го года в 2014-й, и...
Оптимизация производительности большой унаследованной PostgreSQL базы. 2014
Наше время
§ Было 6 миллионов файлов в базе — стало 207 миллионов (с
версиями)/85 миллионов (без версий)
§ Времена, когда индексы были 2Gb, давно прошли
§ Синхронизация тоже не 100 файлов в секунду, а в лучшем
случае 80, обычно — от 20 до 50
§ База данных занимает на дисках ~6Tb
§ И объем будет только расти
Оптимизация производительности большой унаследованной PostgreSQL базы. 2014
Почему не ...?
§ Россия — страна советов! (Каждый суслик — агроном!)
§ “Работает — не трогай” (на самом деле, нет, но)
§ У решений могут быть бизнес-причины
§ TIMTOWTDI! (Кстати, Perl же!)
§ Один из путей — “долго и дорого”
(“никогда и дорого”?)
§ Вывод очевиден?
Оптимизация производительности большой унаследованной PostgreSQL базы. 2014
Все же, почему не ...?
§ OpenStack Swif
§ Elliptics
§ Ceph, MogileFS, MooseFS, whatever
§ Слово “кислотный” из подзаголовка (Atomicity, Consistency, etc)
§ Либо делать групповую транзакцию в бизнес-логике
(переписать всё приложение)
§ Либо транзакции берет на себя хранилище
^ Много ли мы знаем таких хранилищ?
Оптимизация производительности большой унаследованной PostgreSQL базы. 2014
Объекты предметной области и базы
§ Таблица domains — содержит имена доменов, пример —
setup.ru
§ Таблица content — содержит метаинформацию о файле (время
последнего изменения, на основании которого принимается
решение об актуальности бинарных данных)
§ Таблица stat — содержит собственно сами бинарные данные и
их sha1-хэш (дедупликация!)
§ Таблица deleted — содержит признак того, что файл был удален
§ Итого, у нас есть четыре связанных между собой таблицы
Оптимизация производительности большой унаследованной PostgreSQL базы. 2014
Пользовательские сценарии
§ Публикация и синхронизация файлов:
§ Публикуем изменения всегда на одну и ту же ноду
§ Иначе пользователь будет видеть старый контент
§ Кастомный синхронизатор не очень быстро
распространяет изменения на все узлы
§ Отдача статического контента:
§ Нужно отдавать а) последнюю, б) неудаленную версию
Оптимизация производительности большой унаследованной PostgreSQL базы. 2014
Что не очень хорошо?
§ Отдача работает не очень быстро
§ Публикация и синхронизация работают не очень быстро
§ Существующее железо справляется не очень хорошо
§ Пара слов о железе:
Оптимизация производительности большой унаследованной PostgreSQL базы. 2014
Полный Хетцнер!
§ Исходно — RAID0 на 2*3Tb SATA диска, 16G RAM, RAID1 на 2
SSD для pg_temp и временных файлов nginx — сортировка
и объединение таблиц в PostgreSQL и буферизация в nginx
работают быстро
§ Переезд на RAID10 4*4Tb SATA диска (стало не хватать места),
48G RAM
§ Несмотря на наличие технической возможности, поставить
SSD под кэш или временные файлы больше нельзя —
добро пожаловать в Хетцнер!
§ ^ Надо как-то жить с этим
Оптимизация производительности большой унаследованной PostgreSQL базы. 2014
Есть ли у вас план, мистер Фикс?
§ Как это делается обычно:
§ slow queries log
§ pgFouine или pgBadger
§ Раз в сутки (или даже чаще) — красивый рейтинг «плохих»
запросов статистика с победителями
§ Смотрим план (опять это слово!) запроса
§ Кто знает, что такое “план запроса”?
§ Кто не знает — тот тоже оптимизатор
(но поисковый)
Оптимизация производительности большой унаследованной PostgreSQL базы. 2014
За спичками
§ Дело не выглядит сложным, кстати:
§ “Найти неудаленный файл” при отдаче - это запрос к
view
§ “Найти данные для синхронизации” - это тоже запрос к
view
§ Это самые распространенные запросы
§ Их планы и надо смотреть и оптимизировать
Оптимизация производительности большой унаследованной PostgreSQL базы. 2014
And the Oscar goes to...
§ А вот и план, о котором мы так долго говорили:
§
§
§
§
§
§ Что-то он какой-то большой
Оптимизация производительности большой унаследованной PostgreSQL базы. 2014
Чрезвычайные и срочные меры
§ Материализовать нематериализованный view!
§ PostgreSQL 9.2 — нет “родной” поддержки materialized view
§ ^ не беда
§ В книге “Enterprise Rails” отлично описано, как эмулировать
materialized view при помощи триггеров
§ BTW WTF is “Enterprise Rails”?
§ У нас опять есть план — чего же мы ждем?
Оптимизация производительности большой унаследованной PostgreSQL базы. 2014
Кстати, как это работает?
§ Буквально в двух словах (explain to me like I'm five years old):
§ “Поверх” нематериализованного view делается таблица
с такими же полями
§ Она работает как кэш — записи в ней создаются по
запросу
§ Сначала идем в эту таблицу, потом во view, если там не
нашлось
§ Записи инвалидируется при помощи триггеров на всех
таблицах-участниках исходного view
Оптимизация производительности большой унаследованной PostgreSQL базы. 2014
Все сделал как в книге!
§ Надо как-то проверить, что все удалось?
§ Честно скажу, pgBadger и pgFouine я не трогал вообще
§ Потому что slow log нерепрезентативен и не отражает динамику
§ Расширение pg_stat_statements
§ ^ должно быть включено у всех без исключения
на планете Земля
§ Позволяет смотреть статистику в реальном времени
Оптимизация производительности большой унаследованной PostgreSQL базы. 2014
pg_stat_statements
§ SELECT
(total_time / 1000 / 60) as total_minutes,
(total_time/calls) as average_time,
calls, query
FROM pg_stat_statements
ORDER BY total_minutes/average_time desc;
Оптимизация производительности большой унаследованной PostgreSQL базы. 2014
pg_stat_statements
Оптимизация производительности большой унаследованной PostgreSQL базы. 2014
Вскрытие показало
§ Кэширующая таблица действительно работает
§ Примерно 30-40% запросов не попадает в кэш
§ ^ Хорошо, надо подождать
§ На второй день ожидания ситуация не изменилась
Оптимизация производительности большой унаследованной PostgreSQL базы. 2014
Знай и люби бизнес-логику!
§ Алгоритм:
§ Посмотреть в таблице
§ Посмотреть в исходном view (долго)
§ А что, если такого файла вообще нет?
§ 30-40 процентов запросов — к файлам, которых вообще
нет
§ Зачем ходить во view за ними?
Оптимизация производительности большой унаследованной PostgreSQL базы. 2014
Наступило утро, проснулся комиссар
§ Ночью — 15 миллисекунд в среднем
§ Днем — 40-50 миллисекунд в среднем
§ Вносить изменения лучше ночью
§ Но результат будет известен только в середине дня!
Оптимизация производительности большой унаследованной PostgreSQL базы. 2014
Наступило утро, проснулся комиссар
§ Ночью — 15 миллисекунд в среднем
§ Днем — 40-50 миллисекунд в среднем
§ Вносить изменения лучше ночью
§ Но результат будет известен только в середине дня!
Оптимизация производительности большой унаследованной PostgreSQL базы. 2014
Возвращение целесообразности
§ Наша главная метрика — время отдачи контента
пользователю!
§ При чем тут pg_stat_statements?
§ Zabbix
§ Graphite/StatsD
§ https://github.com/alexclear/ansible-graphite-playbook
Оптимизация производительности большой унаследованной PostgreSQL базы. 2014
Мониторинг/графики
Мониторинг нормального человека Мониторинг курильщика
Zabbix Cacti, Munin+NAGIOS
StatsD/Graphite Riemann+Collectd
NAGIOS passive checks
Мониторинг алкоголика Мониторинг наркомана
Оптимизация производительности большой унаследованной PostgreSQL базы. 2014
Мониторинг/графики
Мониторинг нормального человека Мониторинг курильщика
Zabbix Cacti, Munin+NAGIOS
StatsD/Graphite Riemann+Collectd
NAGIOS passive checks
Мониторинг алкоголика Мониторинг наркомана
Оптимизация производительности большой унаследованной PostgreSQL базы. 2014
Еще пара слов про Zabbix
§ Ворон
Каркнул:
НИКОГДА!
Оптимизация производительности большой унаследованной PostgreSQL базы. 2014
Ogres have layers
§ Graphite/StatsD stack:
§ Dashboard (тысячи их, я просто взял стандартный, он
плох)
§ Веб-интерфейс отдачи графиков (на Django)
§ Collector w/RRD-like storage (Carbon)
§ Aggregator/preprocessor w/UDP interface (StatsD)
Оптимизация производительности большой унаследованной PostgreSQL базы. 2014
StatsD implementation
§ На Go, Node.JS, Python, Perl, C, ... (тысячи их)
§ Сначала я взял Python:
§ ^ Автобус не придет
§ Старый добрый Perl!
Оптимизация производительности большой унаследованной PostgreSQL базы. 2014
Покой нам только снится
§ Снится не покой, а те самые 40-50 миллисекунд, которые не
хотят уменьшаться
§ Что делать?
§ Как обычно, построить более подходящие индексы
Оптимизация производительности большой унаследованной PostgreSQL базы. 2014
Момент истины
§ Для самого частого запроса построен хороший индекс на три
столбца (до того был — на два столбца, а исходно был на
один столбец)
§ В этот момент все стало еще хуже :)
§ Размер индекса — 18 гигабайт
§ Все предыдущие докладчики, наверняка, говорили, что
маленький индекс лучше, чем большой
Оптимизация производительности большой унаследованной PostgreSQL базы. 2014
One size does not fit all
§ Один из столбцов, по которому построен индекс — varchar
§ Превращаем varchar в int:
§ http://stackoverflow.com/a/9812029/601572
§ create function h_int(text) returns int as $$
select ('x'||substr(md5($1),1,8))::bit(32)::int;
$$ language sql;
§ Забыл сказать — я не боюсь хранимых процедур и триггеров
Оптимизация производительности большой унаследованной PostgreSQL базы. 2014
После шлифовки отполировать
§ SET enable_bitmapscan=false; <= старые добрые nested loops
SELECT something
FROM stat s JOIN domains d ON d.id = s.domain JOIN content c ON c.id = s.content
LEFT JOIN deleted e ON e.id = s.id
WHERE d.name = domname
AND h_int(s.name) = h_int(filename <= работает новый маленький индекс
AND s.name = filename
AND date_part('epoch'::text, s.ptime) = filerev
Оптимизация производительности большой унаследованной PostgreSQL базы. 2014
Начинаем спать по ночам
§ Индекс занимал 18 гигабайт, стал занимать 8 гигабайт
§ Среднее время выполнения запроса днем в моменты
пиковой нагрузки было 40-50 миллисекунд, стало 20-25
миллисекунд
§ 90% запросов обслуживаются за 100 миллисекунд (время от
момента начала обработки запроса Perl-приложением до
момента конца обработки, включает все SQL-запросы)
§ В среднем запрос обслуживается приложением за 50 мс
Оптимизация производительности большой унаследованной PostgreSQL базы. 2014
Мы строили-строили, и, наконец...
§ ...и, наконец:
Оптимизация производительности большой унаследованной PostgreSQL базы. 2014
Zabbix strikes back
§ ...и, наконец:
Оптимизация производительности большой унаследованной PostgreSQL базы. 2014
Выводы:
§ «Теория малых дел», внезапно, работает
^ несмотря на свой почтенный возраст
§ Ломать — не строить!
§ Знание — сила!
§ Учение Маркса всесильно, потому что оно
верно!
§ Кажется, я не туда пишу...
§ В планах — шардинг, да
Оптимизация производительности большой унаследованной PostgreSQL базы. 2014
С вами был Александр Чистяков,
главный инженер Git in Sky
alex@gitinsky.com
http://gitinsky.com
http://meetup.com/DevOps-40
Пожалуйста, ваши вопросы.
Спасибо за понимание!

Contenu connexe

Tendances

Пряморукий DNS: делаем правильно / Лев Николаев (Макснет)
Пряморукий DNS: делаем правильно / Лев Николаев (Макснет)Пряморукий DNS: делаем правильно / Лев Николаев (Макснет)
Пряморукий DNS: делаем правильно / Лев Николаев (Макснет)Ontico
 
Мой маленький уютный PaaS / Илья Беда (bro.agency)
Мой маленький уютный PaaS / Илья Беда (bro.agency)Мой маленький уютный PaaS / Илья Беда (bro.agency)
Мой маленький уютный PaaS / Илья Беда (bro.agency)Ontico
 
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...Ontico
 
Chef, Puppet, Salt, Ansible on SECON 2014
Chef, Puppet, Salt, Ansible on SECON 2014Chef, Puppet, Salt, Ansible on SECON 2014
Chef, Puppet, Salt, Ansible on SECON 2014Alex Chistyakov
 
Организация надежного резервного копирования веб-проекта. Практика и подводны...
Организация надежного резервного копирования веб-проекта. Практика и подводны...Организация надежного резервного копирования веб-проекта. Практика и подводны...
Организация надежного резервного копирования веб-проекта. Практика и подводны...Anton Baranov
 
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Ontico
 
Переосмысливая подход к инфраструктурному коду / Евгений Пивень (IPONWEB)
Переосмысливая подход к инфраструктурному коду / Евгений Пивень (IPONWEB)Переосмысливая подход к инфраструктурному коду / Евгений Пивень (IPONWEB)
Переосмысливая подход к инфраструктурному коду / Евгений Пивень (IPONWEB)Ontico
 
Docker в работе: взгляд на его использование в Badoo через год / Турецкий Ант...
Docker в работе: взгляд на его использование в Badoo через год / Турецкий Ант...Docker в работе: взгляд на его использование в Badoo через год / Турецкий Ант...
Docker в работе: взгляд на его использование в Badoo через год / Турецкий Ант...Ontico
 
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...Ontico
 
Alexandr Serbul "The Rust language for a high-load network service - a quick ...
Alexandr Serbul "The Rust language for a high-load network service - a quick ...Alexandr Serbul "The Rust language for a high-load network service - a quick ...
Alexandr Serbul "The Rust language for a high-load network service - a quick ...Fwdays
 
2020.10.13 HA Redis is simple. FWDays Highload
2020.10.13 HA Redis is simple. FWDays Highload2020.10.13 HA Redis is simple. FWDays Highload
2020.10.13 HA Redis is simple. FWDays HighloadYehor Herasymchuk
 
SaltStack vs Chef, HappyDev 2013
SaltStack vs Chef, HappyDev 2013SaltStack vs Chef, HappyDev 2013
SaltStack vs Chef, HappyDev 2013Alex Chistyakov
 
Кит на службе у человека microPaaS Deis / Алексей Медведчиков (2ГИС)
Кит на службе у человека microPaaS Deis / Алексей Медведчиков (2ГИС)Кит на службе у человека microPaaS Deis / Алексей Медведчиков (2ГИС)
Кит на службе у человека microPaaS Deis / Алексей Медведчиков (2ГИС)Ontico
 
Эволюция процесса деплоя в проекте / Денис Яковлев (2ГИС)
Эволюция процесса деплоя в проекте / Денис Яковлев (2ГИС)Эволюция процесса деплоя в проекте / Денис Яковлев (2ГИС)
Эволюция процесса деплоя в проекте / Денис Яковлев (2ГИС)Ontico
 
Архитектура растущего проекта на примере ВКонтакте / Алексей Акулович (ВКонт...
 Архитектура растущего проекта на примере ВКонтакте / Алексей Акулович (ВКонт... Архитектура растущего проекта на примере ВКонтакте / Алексей Акулович (ВКонт...
Архитектура растущего проекта на примере ВКонтакте / Алексей Акулович (ВКонт...Ontico
 
RTB DSP на языке Go укрощение buzzwords / Даниил Подольский (Qmobi.Com)
RTB DSP на языке Go укрощение buzzwords /  Даниил Подольский (Qmobi.Com)RTB DSP на языке Go укрощение buzzwords /  Даниил Подольский (Qmobi.Com)
RTB DSP на языке Go укрощение buzzwords / Даниил Подольский (Qmobi.Com)Ontico
 
My talk on LeoFS, Highload++ 2014
My talk on LeoFS, Highload++ 2014My talk on LeoFS, Highload++ 2014
My talk on LeoFS, Highload++ 2014Alex Chistyakov
 
Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...
Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...
Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...Ontico
 

Tendances (20)

Пряморукий DNS: делаем правильно / Лев Николаев (Макснет)
Пряморукий DNS: делаем правильно / Лев Николаев (Макснет)Пряморукий DNS: делаем правильно / Лев Николаев (Макснет)
Пряморукий DNS: делаем правильно / Лев Николаев (Макснет)
 
Мой маленький уютный PaaS / Илья Беда (bro.agency)
Мой маленький уютный PaaS / Илья Беда (bro.agency)Мой маленький уютный PaaS / Илья Беда (bro.agency)
Мой маленький уютный PaaS / Илья Беда (bro.agency)
 
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
 
Chef, Puppet, Salt, Ansible on SECON 2014
Chef, Puppet, Salt, Ansible on SECON 2014Chef, Puppet, Salt, Ansible on SECON 2014
Chef, Puppet, Salt, Ansible on SECON 2014
 
Организация надежного резервного копирования веб-проекта. Практика и подводны...
Организация надежного резервного копирования веб-проекта. Практика и подводны...Организация надежного резервного копирования веб-проекта. Практика и подводны...
Организация надежного резервного копирования веб-проекта. Практика и подводны...
 
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
 
Переосмысливая подход к инфраструктурному коду / Евгений Пивень (IPONWEB)
Переосмысливая подход к инфраструктурному коду / Евгений Пивень (IPONWEB)Переосмысливая подход к инфраструктурному коду / Евгений Пивень (IPONWEB)
Переосмысливая подход к инфраструктурному коду / Евгений Пивень (IPONWEB)
 
Docker в работе: взгляд на его использование в Badoo через год / Турецкий Ант...
Docker в работе: взгляд на его использование в Badoo через год / Турецкий Ант...Docker в работе: взгляд на его использование в Badoo через год / Турецкий Ант...
Docker в работе: взгляд на его использование в Badoo через год / Турецкий Ант...
 
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
 
Alexandr Serbul "The Rust language for a high-load network service - a quick ...
Alexandr Serbul "The Rust language for a high-load network service - a quick ...Alexandr Serbul "The Rust language for a high-load network service - a quick ...
Alexandr Serbul "The Rust language for a high-load network service - a quick ...
 
Continuousdelivery
ContinuousdeliveryContinuousdelivery
Continuousdelivery
 
2020.10.13 HA Redis is simple. FWDays Highload
2020.10.13 HA Redis is simple. FWDays Highload2020.10.13 HA Redis is simple. FWDays Highload
2020.10.13 HA Redis is simple. FWDays Highload
 
SaltStack vs Chef, HappyDev 2013
SaltStack vs Chef, HappyDev 2013SaltStack vs Chef, HappyDev 2013
SaltStack vs Chef, HappyDev 2013
 
Кит на службе у человека microPaaS Deis / Алексей Медведчиков (2ГИС)
Кит на службе у человека microPaaS Deis / Алексей Медведчиков (2ГИС)Кит на службе у человека microPaaS Deis / Алексей Медведчиков (2ГИС)
Кит на службе у человека microPaaS Deis / Алексей Медведчиков (2ГИС)
 
Эволюция процесса деплоя в проекте / Денис Яковлев (2ГИС)
Эволюция процесса деплоя в проекте / Денис Яковлев (2ГИС)Эволюция процесса деплоя в проекте / Денис Яковлев (2ГИС)
Эволюция процесса деплоя в проекте / Денис Яковлев (2ГИС)
 
Архитектура растущего проекта на примере ВКонтакте / Алексей Акулович (ВКонт...
 Архитектура растущего проекта на примере ВКонтакте / Алексей Акулович (ВКонт... Архитектура растущего проекта на примере ВКонтакте / Алексей Акулович (ВКонт...
Архитектура растущего проекта на примере ВКонтакте / Алексей Акулович (ВКонт...
 
RTB DSP на языке Go укрощение buzzwords / Даниил Подольский (Qmobi.Com)
RTB DSP на языке Go укрощение buzzwords /  Даниил Подольский (Qmobi.Com)RTB DSP на языке Go укрощение buzzwords /  Даниил Подольский (Qmobi.Com)
RTB DSP на языке Go укрощение buzzwords / Даниил Подольский (Qmobi.Com)
 
My talk on LeoFS, Highload++ 2014
My talk on LeoFS, Highload++ 2014My talk on LeoFS, Highload++ 2014
My talk on LeoFS, Highload++ 2014
 
Sivko
SivkoSivko
Sivko
 
Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...
Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...
Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...
 

En vedette

Максим Барышников, Что такое типовые проблемы нагруженных проектов и как их р...
Максим Барышников, Что такое типовые проблемы нагруженных проектов и как их р...Максим Барышников, Что такое типовые проблемы нагруженных проектов и как их р...
Максим Барышников, Что такое типовые проблемы нагруженных проектов и как их р...Tanya Denisyuk
 
Выступление в DataArt на тему "Кто такие DevOps?"
Выступление в DataArt на тему "Кто такие DevOps?"Выступление в DataArt на тему "Кто такие DevOps?"
Выступление в DataArt на тему "Кто такие DevOps?"Alex Chistyakov
 
Презентация про DTrace на ADDconf в Минске
Презентация про DTrace на ADDconf в МинскеПрезентация про DTrace на ADDconf в Минске
Презентация про DTrace на ADDconf в МинскеAlex Chistyakov
 
Мой modern Perl (весенняя встреча Piter United)
Мой modern Perl (весенняя встреча Piter United)Мой modern Perl (весенняя встреча Piter United)
Мой modern Perl (весенняя встреча Piter United)Alex Chistyakov
 
Диалог с воображаемым слушателем, а также поток сознания, вне контекста НЕ ИН...
Диалог с воображаемым слушателем, а также поток сознания, вне контекста НЕ ИН...Диалог с воображаемым слушателем, а также поток сознания, вне контекста НЕ ИН...
Диалог с воображаемым слушателем, а также поток сознания, вне контекста НЕ ИН...Alex Chistyakov
 
My talk on LeoFS, HappyDev 2014
My talk on LeoFS, HappyDev 2014My talk on LeoFS, HappyDev 2014
My talk on LeoFS, HappyDev 2014Alex Chistyakov
 
DevOps-40 meetup #7, Project FiFo
DevOps-40 meetup #7, Project FiFoDevOps-40 meetup #7, Project FiFo
DevOps-40 meetup #7, Project FiFoAlex Chistyakov
 
My talk on programming languages at SPbLUG Mar 2017
My talk on programming languages at SPbLUG Mar 2017My talk on programming languages at SPbLUG Mar 2017
My talk on programming languages at SPbLUG Mar 2017Alex Chistyakov
 
My talk at CEE-SECR 2016
My talk at CEE-SECR 2016My talk at CEE-SECR 2016
My talk at CEE-SECR 2016Alex Chistyakov
 
Harry Potter and the Daemons of Berkeley
Harry Potter and the Daemons of BerkeleyHarry Potter and the Daemons of Berkeley
Harry Potter and the Daemons of BerkeleyAlex Chistyakov
 
My talk at YouCon Saratov 2016
My talk at YouCon Saratov 2016My talk at YouCon Saratov 2016
My talk at YouCon Saratov 2016Alex Chistyakov
 
My talk on HBase ops engineering at TBD Jun 2016
My talk on HBase ops engineering at TBD Jun 2016My talk on HBase ops engineering at TBD Jun 2016
My talk on HBase ops engineering at TBD Jun 2016Alex Chistyakov
 
My talk at Highload++ 2015
My talk at Highload++ 2015My talk at Highload++ 2015
My talk at Highload++ 2015Alex Chistyakov
 
My talk on Salt and Ansible from DevConf 2014
My talk on Salt and Ansible from DevConf 2014My talk on Salt and Ansible from DevConf 2014
My talk on Salt and Ansible from DevConf 2014Alex Chistyakov
 
My talk on Piter Py 2016
My talk on Piter Py 2016My talk on Piter Py 2016
My talk on Piter Py 2016Alex Chistyakov
 
My talk from PgConf.Russia 2016
My talk from PgConf.Russia 2016My talk from PgConf.Russia 2016
My talk from PgConf.Russia 2016Alex Chistyakov
 

En vedette (20)

Максим Барышников, Что такое типовые проблемы нагруженных проектов и как их р...
Максим Барышников, Что такое типовые проблемы нагруженных проектов и как их р...Максим Барышников, Что такое типовые проблемы нагруженных проектов и как их р...
Максим Барышников, Что такое типовые проблемы нагруженных проектов и как их р...
 
Выступление в DataArt на тему "Кто такие DevOps?"
Выступление в DataArt на тему "Кто такие DevOps?"Выступление в DataArt на тему "Кто такие DevOps?"
Выступление в DataArt на тему "Кто такие DevOps?"
 
Презентация про DTrace на ADDconf в Минске
Презентация про DTrace на ADDconf в МинскеПрезентация про DTrace на ADDconf в Минске
Презентация про DTrace на ADDconf в Минске
 
Мой modern Perl (весенняя встреча Piter United)
Мой modern Perl (весенняя встреча Piter United)Мой modern Perl (весенняя встреча Piter United)
Мой modern Perl (весенняя встреча Piter United)
 
Диалог с воображаемым слушателем, а также поток сознания, вне контекста НЕ ИН...
Диалог с воображаемым слушателем, а также поток сознания, вне контекста НЕ ИН...Диалог с воображаемым слушателем, а также поток сознания, вне контекста НЕ ИН...
Диалог с воображаемым слушателем, а также поток сознания, вне контекста НЕ ИН...
 
My talk on LeoFS, HappyDev 2014
My talk on LeoFS, HappyDev 2014My talk on LeoFS, HappyDev 2014
My talk on LeoFS, HappyDev 2014
 
DevOps-40 meetup #7, Project FiFo
DevOps-40 meetup #7, Project FiFoDevOps-40 meetup #7, Project FiFo
DevOps-40 meetup #7, Project FiFo
 
My talk on programming languages at SPbLUG Mar 2017
My talk on programming languages at SPbLUG Mar 2017My talk on programming languages at SPbLUG Mar 2017
My talk on programming languages at SPbLUG Mar 2017
 
HBase on HappyDev 2013
HBase on HappyDev 2013HBase on HappyDev 2013
HBase on HappyDev 2013
 
My talk at CEE-SECR 2016
My talk at CEE-SECR 2016My talk at CEE-SECR 2016
My talk at CEE-SECR 2016
 
Harry Potter and the Daemons of Berkeley
Harry Potter and the Daemons of BerkeleyHarry Potter and the Daemons of Berkeley
Harry Potter and the Daemons of Berkeley
 
My talk at LVEE 2016
My talk at LVEE 2016My talk at LVEE 2016
My talk at LVEE 2016
 
My talk at YouCon Saratov 2016
My talk at YouCon Saratov 2016My talk at YouCon Saratov 2016
My talk at YouCon Saratov 2016
 
My talk on HBase ops engineering at TBD Jun 2016
My talk on HBase ops engineering at TBD Jun 2016My talk on HBase ops engineering at TBD Jun 2016
My talk on HBase ops engineering at TBD Jun 2016
 
HBase on Dev{Highload}
HBase on Dev{Highload}HBase on Dev{Highload}
HBase on Dev{Highload}
 
My talk at Highload++ 2015
My talk at Highload++ 2015My talk at Highload++ 2015
My talk at Highload++ 2015
 
My talk on Salt and Ansible from DevConf 2014
My talk on Salt and Ansible from DevConf 2014My talk on Salt and Ansible from DevConf 2014
My talk on Salt and Ansible from DevConf 2014
 
My talk on Piter Py 2016
My talk on Piter Py 2016My talk on Piter Py 2016
My talk on Piter Py 2016
 
My talk from PgConf.Russia 2016
My talk from PgConf.Russia 2016My talk from PgConf.Russia 2016
My talk from PgConf.Russia 2016
 
On Docker
On DockerOn Docker
On Docker
 

Similaire à Optimization of a big PostgreSQL database

"Мы два месяца долбались, а потом построили индекс" (c) Аксенов
"Мы два месяца долбались, а потом построили индекс" (c) Аксенов"Мы два месяца долбались, а потом построили индекс" (c) Аксенов
"Мы два месяца долбались, а потом построили индекс" (c) АксеновAlex Chistyakov
 
PG Day'14 Russia, Нетрадиционный PostgreSQL: хранение бинарных данных в БД, А...
PG Day'14 Russia, Нетрадиционный PostgreSQL: хранение бинарных данных в БД, А...PG Day'14 Russia, Нетрадиционный PostgreSQL: хранение бинарных данных в БД, А...
PG Day'14 Russia, Нетрадиционный PostgreSQL: хранение бинарных данных в БД, А...pgdayrussia
 
#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6
#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6
#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6Nikolay Samokhvalov
 
Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...
Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...
Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...Ontico
 
PostgreSQL в высоконагруженных проектах
PostgreSQL в высоконагруженных проектахPostgreSQL в высоконагруженных проектах
PostgreSQL в высоконагруженных проектахAlexey Vasiliev
 
20111002 information retrieval raskovalov_lecture3
20111002 information retrieval raskovalov_lecture320111002 information retrieval raskovalov_lecture3
20111002 information retrieval raskovalov_lecture3Computer Science Club
 
ekbpy'2012 - Данила Штань - Распределенное хранилище
ekbpy'2012 - Данила Штань - Распределенное хранилищеekbpy'2012 - Данила Штань - Распределенное хранилище
ekbpy'2012 - Данила Штань - Распределенное хранилищеit-people
 
Checklistfinal perconaconf
Checklistfinal perconaconfChecklistfinal perconaconf
Checklistfinal perconaconfDeveloperua
 
Как считать и анализировать сотни гигабит трафика в секунду, Станислав Николо...
Как считать и анализировать сотни гигабит трафика в секунду, Станислав Николо...Как считать и анализировать сотни гигабит трафика в секунду, Станислав Николо...
Как считать и анализировать сотни гигабит трафика в секунду, Станислав Николо...Ontico
 
HappyDev'15 Keynote: Когда все данные станут большими...
HappyDev'15 Keynote: Когда все данные станут большими...HappyDev'15 Keynote: Когда все данные станут большими...
HappyDev'15 Keynote: Когда все данные станут большими...Alexey Zinoviev
 
2015-12-05 Алексей Зиновьев - Когда все данные станут большими...
2015-12-05 Алексей Зиновьев - Когда все данные станут большими...2015-12-05 Алексей Зиновьев - Когда все данные станут большими...
2015-12-05 Алексей Зиновьев - Когда все данные станут большими...HappyDev
 
MySQL: чек-лист для новичка в highload / Анастасия Распопина, Света Смирнова ...
MySQL: чек-лист для новичка в highload / Анастасия Распопина, Света Смирнова ...MySQL: чек-лист для новичка в highload / Анастасия Распопина, Света Смирнова ...
MySQL: чек-лист для новичка в highload / Анастасия Распопина, Света Смирнова ...Ontico
 
MySQL: чек-лист для новичка в highload (Cвета Cмирнова, Aнастасия Распопина ...
MySQL:  чек-лист для новичка в highload (Cвета Cмирнова, Aнастасия Распопина ...MySQL:  чек-лист для новичка в highload (Cвета Cмирнова, Aнастасия Распопина ...
MySQL: чек-лист для новичка в highload (Cвета Cмирнова, Aнастасия Распопина ...Anastasia Rostova
 
MySQL - checklist для новичка в Highload
MySQL - checklist для новичка в HighloadMySQL - checklist для новичка в Highload
MySQL - checklist для новичка в HighloadSveta Smirnova
 
20160303 Hacking PostgreSQL Тема 02 Сообщество PostgreSQL и инструменты разра...
20160303 Hacking PostgreSQL Тема 02 Сообщество PostgreSQL и инструменты разра...20160303 Hacking PostgreSQL Тема 02 Сообщество PostgreSQL и инструменты разра...
20160303 Hacking PostgreSQL Тема 02 Сообщество PostgreSQL и инструменты разра...Rais Charipov
 
Последние новости постгреса с PGCon / О.Бартунов, А.Коротков, Ф.Сигаев (Postg...
Последние новости постгреса с PGCon / О.Бартунов, А.Коротков, Ф.Сигаев (Postg...Последние новости постгреса с PGCon / О.Бартунов, А.Коротков, Ф.Сигаев (Postg...
Последние новости постгреса с PGCon / О.Бартунов, А.Коротков, Ф.Сигаев (Postg...Ontico
 
Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва...
 Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва... Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва...
Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва...Nikolay Samokhvalov
 
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...Ontico
 
OpenSource SQL Databases Enter Millions Queries per Second Era
OpenSource SQL Databases Enter Millions Queries per Second EraOpenSource SQL Databases Enter Millions Queries per Second Era
OpenSource SQL Databases Enter Millions Queries per Second EraSveta Smirnova
 

Similaire à Optimization of a big PostgreSQL database (20)

"Мы два месяца долбались, а потом построили индекс" (c) Аксенов
"Мы два месяца долбались, а потом построили индекс" (c) Аксенов"Мы два месяца долбались, а потом построили индекс" (c) Аксенов
"Мы два месяца долбались, а потом построили индекс" (c) Аксенов
 
PG Day'14 Russia, Нетрадиционный PostgreSQL: хранение бинарных данных в БД, А...
PG Day'14 Russia, Нетрадиционный PostgreSQL: хранение бинарных данных в БД, А...PG Day'14 Russia, Нетрадиционный PostgreSQL: хранение бинарных данных в БД, А...
PG Day'14 Russia, Нетрадиционный PostgreSQL: хранение бинарных данных в БД, А...
 
#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6
#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6
#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6
 
Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...
Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...
Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...
 
PostgreSQL в высоконагруженных проектах
PostgreSQL в высоконагруженных проектахPostgreSQL в высоконагруженных проектах
PostgreSQL в высоконагруженных проектах
 
20111002 information retrieval raskovalov_lecture3
20111002 information retrieval raskovalov_lecture320111002 information retrieval raskovalov_lecture3
20111002 information retrieval raskovalov_lecture3
 
ekbpy'2012 - Данила Штань - Распределенное хранилище
ekbpy'2012 - Данила Штань - Распределенное хранилищеekbpy'2012 - Данила Штань - Распределенное хранилище
ekbpy'2012 - Данила Штань - Распределенное хранилище
 
Checklistfinal perconaconf
Checklistfinal perconaconfChecklistfinal perconaconf
Checklistfinal perconaconf
 
Как считать и анализировать сотни гигабит трафика в секунду, Станислав Николо...
Как считать и анализировать сотни гигабит трафика в секунду, Станислав Николо...Как считать и анализировать сотни гигабит трафика в секунду, Станислав Николо...
Как считать и анализировать сотни гигабит трафика в секунду, Станислав Николо...
 
HappyDev'15 Keynote: Когда все данные станут большими...
HappyDev'15 Keynote: Когда все данные станут большими...HappyDev'15 Keynote: Когда все данные станут большими...
HappyDev'15 Keynote: Когда все данные станут большими...
 
2015-12-05 Алексей Зиновьев - Когда все данные станут большими...
2015-12-05 Алексей Зиновьев - Когда все данные станут большими...2015-12-05 Алексей Зиновьев - Когда все данные станут большими...
2015-12-05 Алексей Зиновьев - Когда все данные станут большими...
 
MySQL: чек-лист для новичка в highload / Анастасия Распопина, Света Смирнова ...
MySQL: чек-лист для новичка в highload / Анастасия Распопина, Света Смирнова ...MySQL: чек-лист для новичка в highload / Анастасия Распопина, Света Смирнова ...
MySQL: чек-лист для новичка в highload / Анастасия Распопина, Света Смирнова ...
 
MySQL: чек-лист для новичка в highload (Cвета Cмирнова, Aнастасия Распопина ...
MySQL:  чек-лист для новичка в highload (Cвета Cмирнова, Aнастасия Распопина ...MySQL:  чек-лист для новичка в highload (Cвета Cмирнова, Aнастасия Распопина ...
MySQL: чек-лист для новичка в highload (Cвета Cмирнова, Aнастасия Распопина ...
 
MySQL - checklist для новичка в Highload
MySQL - checklist для новичка в HighloadMySQL - checklist для новичка в Highload
MySQL - checklist для новичка в Highload
 
20160303 Hacking PostgreSQL Тема 02 Сообщество PostgreSQL и инструменты разра...
20160303 Hacking PostgreSQL Тема 02 Сообщество PostgreSQL и инструменты разра...20160303 Hacking PostgreSQL Тема 02 Сообщество PostgreSQL и инструменты разра...
20160303 Hacking PostgreSQL Тема 02 Сообщество PostgreSQL и инструменты разра...
 
PostgreSQL on sas/ssd/nvme/nvdimm
PostgreSQL on sas/ssd/nvme/nvdimmPostgreSQL on sas/ssd/nvme/nvdimm
PostgreSQL on sas/ssd/nvme/nvdimm
 
Последние новости постгреса с PGCon / О.Бартунов, А.Коротков, Ф.Сигаев (Postg...
Последние новости постгреса с PGCon / О.Бартунов, А.Коротков, Ф.Сигаев (Postg...Последние новости постгреса с PGCon / О.Бартунов, А.Коротков, Ф.Сигаев (Postg...
Последние новости постгреса с PGCon / О.Бартунов, А.Коротков, Ф.Сигаев (Postg...
 
Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва...
 Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва... Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва...
Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва...
 
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
 
OpenSource SQL Databases Enter Millions Queries per Second Era
OpenSource SQL Databases Enter Millions Queries per Second EraOpenSource SQL Databases Enter Millions Queries per Second Era
OpenSource SQL Databases Enter Millions Queries per Second Era
 

Plus de Alex Chistyakov

My slides from DevOpsDays 2019
My slides from DevOpsDays 2019My slides from DevOpsDays 2019
My slides from DevOpsDays 2019Alex Chistyakov
 
My slides from BMM №3 May 2019
My slides from BMM №3 May 2019My slides from BMM №3 May 2019
My slides from BMM №3 May 2019Alex Chistyakov
 
My slides from DevOps-40 meetup Jun 2019
My slides from DevOps-40 meetup Jun 2019 My slides from DevOps-40 meetup Jun 2019
My slides from DevOps-40 meetup Jun 2019 Alex Chistyakov
 
My slides from SECR'2018
My slides from SECR'2018My slides from SECR'2018
My slides from SECR'2018Alex Chistyakov
 
My slides from the first SPb SRE community meetup at DataArt
My slides from the first SPb SRE community meetup at DataArtMy slides from the first SPb SRE community meetup at DataArt
My slides from the first SPb SRE community meetup at DataArtAlex Chistyakov
 
My slides from BMM №4 Nov 2019
My slides from BMM №4 Nov 2019My slides from BMM №4 Nov 2019
My slides from BMM №4 Nov 2019Alex Chistyakov
 
My slides from DevOps-40 meetup Oct 2019
My slides from DevOps-40 meetup Oct 2019My slides from DevOps-40 meetup Oct 2019
My slides from DevOps-40 meetup Oct 2019Alex Chistyakov
 
My slides from DevOps-40 meetup Dec 2019
My slides from DevOps-40 meetup Dec 2019My slides from DevOps-40 meetup Dec 2019
My slides from DevOps-40 meetup Dec 2019Alex Chistyakov
 
Configuration management and Kubernetes
Configuration management and KubernetesConfiguration management and Kubernetes
Configuration management and KubernetesAlex Chistyakov
 
Python performance engineering in 2017
Python performance engineering in 2017Python performance engineering in 2017
Python performance engineering in 2017Alex Chistyakov
 
My talk at SPb SQA sub-meetup of ITGM
My talk at SPb SQA sub-meetup of ITGMMy talk at SPb SQA sub-meetup of ITGM
My talk at SPb SQA sub-meetup of ITGMAlex Chistyakov
 
My talk on DevOps engineer's adventures in the Windows world at UWDC 2017
My talk on DevOps engineer's adventures in the Windows world at UWDC 2017My talk on DevOps engineer's adventures in the Windows world at UWDC 2017
My talk on DevOps engineer's adventures in the Windows world at UWDC 2017Alex Chistyakov
 
My talk on GitHub open data at ITGM #10
 My talk on GitHub open data at ITGM #10 My talk on GitHub open data at ITGM #10
My talk on GitHub open data at ITGM #10Alex Chistyakov
 
My talk on DevOps :) at Stachka 2017
My talk on DevOps :) at Stachka 2017My talk on DevOps :) at Stachka 2017
My talk on DevOps :) at Stachka 2017Alex Chistyakov
 

Plus de Alex Chistyakov (20)

My slides from DevOpsDays 2019
My slides from DevOpsDays 2019My slides from DevOpsDays 2019
My slides from DevOpsDays 2019
 
My slides from BMM №3 May 2019
My slides from BMM №3 May 2019My slides from BMM №3 May 2019
My slides from BMM №3 May 2019
 
My slides from DevOps-40 meetup Jun 2019
My slides from DevOps-40 meetup Jun 2019 My slides from DevOps-40 meetup Jun 2019
My slides from DevOps-40 meetup Jun 2019
 
My slides from SECR'2018
My slides from SECR'2018My slides from SECR'2018
My slides from SECR'2018
 
My slides from the first SPb SRE community meetup at DataArt
My slides from the first SPb SRE community meetup at DataArtMy slides from the first SPb SRE community meetup at DataArt
My slides from the first SPb SRE community meetup at DataArt
 
My slides from CC'2019
My slides from CC'2019My slides from CC'2019
My slides from CC'2019
 
My slides from BMM №4 Nov 2019
My slides from BMM №4 Nov 2019My slides from BMM №4 Nov 2019
My slides from BMM №4 Nov 2019
 
My slides from DevOps-40 meetup Oct 2019
My slides from DevOps-40 meetup Oct 2019My slides from DevOps-40 meetup Oct 2019
My slides from DevOps-40 meetup Oct 2019
 
My slides from DevOps-40 meetup Dec 2019
My slides from DevOps-40 meetup Dec 2019My slides from DevOps-40 meetup Dec 2019
My slides from DevOps-40 meetup Dec 2019
 
Configuration management and Kubernetes
Configuration management and KubernetesConfiguration management and Kubernetes
Configuration management and Kubernetes
 
Ansible and other stuff
Ansible and other stuffAnsible and other stuff
Ansible and other stuff
 
Python performance engineering in 2017
Python performance engineering in 2017Python performance engineering in 2017
Python performance engineering in 2017
 
My talk at SPb SQA sub-meetup of ITGM
My talk at SPb SQA sub-meetup of ITGMMy talk at SPb SQA sub-meetup of ITGM
My talk at SPb SQA sub-meetup of ITGM
 
My talk at SECR 2017
My talk at SECR 2017My talk at SECR 2017
My talk at SECR 2017
 
On scaling teams
On scaling teamsOn scaling teams
On scaling teams
 
MariaDB workshop
MariaDB workshopMariaDB workshop
MariaDB workshop
 
Docker for JS people
Docker for JS peopleDocker for JS people
Docker for JS people
 
My talk on DevOps engineer's adventures in the Windows world at UWDC 2017
My talk on DevOps engineer's adventures in the Windows world at UWDC 2017My talk on DevOps engineer's adventures in the Windows world at UWDC 2017
My talk on DevOps engineer's adventures in the Windows world at UWDC 2017
 
My talk on GitHub open data at ITGM #10
 My talk on GitHub open data at ITGM #10 My talk on GitHub open data at ITGM #10
My talk on GitHub open data at ITGM #10
 
My talk on DevOps :) at Stachka 2017
My talk on DevOps :) at Stachka 2017My talk on DevOps :) at Stachka 2017
My talk on DevOps :) at Stachka 2017
 

Optimization of a big PostgreSQL database

  • 2. Кто я? § Меня зовут Саша § Я инженер, главный инженер § В компании Git in Sky § Я люблю оптимизировать производительность § Потому что это как волшебная сказка! Оптимизация производительности большой унаследованной PostgreSQL базы. 2014
  • 3. Где я? Кто вы? § Любите волшебные сказки? § Пришли послушать про базу данных? § Пришли послушать про оптимизацию производительности? § Разрабатываете проекты для веб? § Поддерживаете проекты в веб? § У вас уже есть PostgreSQL? Оптимизация производительности большой унаследованной PostgreSQL базы. 2014
  • 4. О чем речь? § Доклад в жанре “field report” § Если угодно - “trip report” (см. подназвание доклада) § Предыстория: http://www.slideshare.net/profyclub_ru/08-6 § Однажды ко мне в дверь постучал добрый волшебник § И все заверте... Оптимизация производительности большой унаследованной PostgreSQL базы. 2014
  • 5. Краткое содержание предыдущих серий § Заказчик — конструктор сайтов http://setup.ru § Пользовательский статический контент (файлы) хранится в базе данных (PostgreSQL) § Для больших файлов используются large objects § Приложение на Perl, работает под Apache + mod_perl § Переходим из 2012-го года в 2014-й, и... Оптимизация производительности большой унаследованной PostgreSQL базы. 2014
  • 6. Наше время § Было 6 миллионов файлов в базе — стало 207 миллионов (с версиями)/85 миллионов (без версий) § Времена, когда индексы были 2Gb, давно прошли § Синхронизация тоже не 100 файлов в секунду, а в лучшем случае 80, обычно — от 20 до 50 § База данных занимает на дисках ~6Tb § И объем будет только расти Оптимизация производительности большой унаследованной PostgreSQL базы. 2014
  • 7. Почему не ...? § Россия — страна советов! (Каждый суслик — агроном!) § “Работает — не трогай” (на самом деле, нет, но) § У решений могут быть бизнес-причины § TIMTOWTDI! (Кстати, Perl же!) § Один из путей — “долго и дорого” (“никогда и дорого”?) § Вывод очевиден? Оптимизация производительности большой унаследованной PostgreSQL базы. 2014
  • 8. Все же, почему не ...? § OpenStack Swif § Elliptics § Ceph, MogileFS, MooseFS, whatever § Слово “кислотный” из подзаголовка (Atomicity, Consistency, etc) § Либо делать групповую транзакцию в бизнес-логике (переписать всё приложение) § Либо транзакции берет на себя хранилище ^ Много ли мы знаем таких хранилищ? Оптимизация производительности большой унаследованной PostgreSQL базы. 2014
  • 9. Объекты предметной области и базы § Таблица domains — содержит имена доменов, пример — setup.ru § Таблица content — содержит метаинформацию о файле (время последнего изменения, на основании которого принимается решение об актуальности бинарных данных) § Таблица stat — содержит собственно сами бинарные данные и их sha1-хэш (дедупликация!) § Таблица deleted — содержит признак того, что файл был удален § Итого, у нас есть четыре связанных между собой таблицы Оптимизация производительности большой унаследованной PostgreSQL базы. 2014
  • 10. Пользовательские сценарии § Публикация и синхронизация файлов: § Публикуем изменения всегда на одну и ту же ноду § Иначе пользователь будет видеть старый контент § Кастомный синхронизатор не очень быстро распространяет изменения на все узлы § Отдача статического контента: § Нужно отдавать а) последнюю, б) неудаленную версию Оптимизация производительности большой унаследованной PostgreSQL базы. 2014
  • 11. Что не очень хорошо? § Отдача работает не очень быстро § Публикация и синхронизация работают не очень быстро § Существующее железо справляется не очень хорошо § Пара слов о железе: Оптимизация производительности большой унаследованной PostgreSQL базы. 2014
  • 12. Полный Хетцнер! § Исходно — RAID0 на 2*3Tb SATA диска, 16G RAM, RAID1 на 2 SSD для pg_temp и временных файлов nginx — сортировка и объединение таблиц в PostgreSQL и буферизация в nginx работают быстро § Переезд на RAID10 4*4Tb SATA диска (стало не хватать места), 48G RAM § Несмотря на наличие технической возможности, поставить SSD под кэш или временные файлы больше нельзя — добро пожаловать в Хетцнер! § ^ Надо как-то жить с этим Оптимизация производительности большой унаследованной PostgreSQL базы. 2014
  • 13. Есть ли у вас план, мистер Фикс? § Как это делается обычно: § slow queries log § pgFouine или pgBadger § Раз в сутки (или даже чаще) — красивый рейтинг «плохих» запросов статистика с победителями § Смотрим план (опять это слово!) запроса § Кто знает, что такое “план запроса”? § Кто не знает — тот тоже оптимизатор (но поисковый) Оптимизация производительности большой унаследованной PostgreSQL базы. 2014
  • 14. За спичками § Дело не выглядит сложным, кстати: § “Найти неудаленный файл” при отдаче - это запрос к view § “Найти данные для синхронизации” - это тоже запрос к view § Это самые распространенные запросы § Их планы и надо смотреть и оптимизировать Оптимизация производительности большой унаследованной PostgreSQL базы. 2014
  • 15. And the Oscar goes to... § А вот и план, о котором мы так долго говорили: § § § § § § Что-то он какой-то большой Оптимизация производительности большой унаследованной PostgreSQL базы. 2014
  • 16. Чрезвычайные и срочные меры § Материализовать нематериализованный view! § PostgreSQL 9.2 — нет “родной” поддержки materialized view § ^ не беда § В книге “Enterprise Rails” отлично описано, как эмулировать materialized view при помощи триггеров § BTW WTF is “Enterprise Rails”? § У нас опять есть план — чего же мы ждем? Оптимизация производительности большой унаследованной PostgreSQL базы. 2014
  • 17. Кстати, как это работает? § Буквально в двух словах (explain to me like I'm five years old): § “Поверх” нематериализованного view делается таблица с такими же полями § Она работает как кэш — записи в ней создаются по запросу § Сначала идем в эту таблицу, потом во view, если там не нашлось § Записи инвалидируется при помощи триггеров на всех таблицах-участниках исходного view Оптимизация производительности большой унаследованной PostgreSQL базы. 2014
  • 18. Все сделал как в книге! § Надо как-то проверить, что все удалось? § Честно скажу, pgBadger и pgFouine я не трогал вообще § Потому что slow log нерепрезентативен и не отражает динамику § Расширение pg_stat_statements § ^ должно быть включено у всех без исключения на планете Земля § Позволяет смотреть статистику в реальном времени Оптимизация производительности большой унаследованной PostgreSQL базы. 2014
  • 19. pg_stat_statements § SELECT (total_time / 1000 / 60) as total_minutes, (total_time/calls) as average_time, calls, query FROM pg_stat_statements ORDER BY total_minutes/average_time desc; Оптимизация производительности большой унаследованной PostgreSQL базы. 2014
  • 21. Вскрытие показало § Кэширующая таблица действительно работает § Примерно 30-40% запросов не попадает в кэш § ^ Хорошо, надо подождать § На второй день ожидания ситуация не изменилась Оптимизация производительности большой унаследованной PostgreSQL базы. 2014
  • 22. Знай и люби бизнес-логику! § Алгоритм: § Посмотреть в таблице § Посмотреть в исходном view (долго) § А что, если такого файла вообще нет? § 30-40 процентов запросов — к файлам, которых вообще нет § Зачем ходить во view за ними? Оптимизация производительности большой унаследованной PostgreSQL базы. 2014
  • 23. Наступило утро, проснулся комиссар § Ночью — 15 миллисекунд в среднем § Днем — 40-50 миллисекунд в среднем § Вносить изменения лучше ночью § Но результат будет известен только в середине дня! Оптимизация производительности большой унаследованной PostgreSQL базы. 2014
  • 24. Наступило утро, проснулся комиссар § Ночью — 15 миллисекунд в среднем § Днем — 40-50 миллисекунд в среднем § Вносить изменения лучше ночью § Но результат будет известен только в середине дня! Оптимизация производительности большой унаследованной PostgreSQL базы. 2014
  • 25. Возвращение целесообразности § Наша главная метрика — время отдачи контента пользователю! § При чем тут pg_stat_statements? § Zabbix § Graphite/StatsD § https://github.com/alexclear/ansible-graphite-playbook Оптимизация производительности большой унаследованной PostgreSQL базы. 2014
  • 26. Мониторинг/графики Мониторинг нормального человека Мониторинг курильщика Zabbix Cacti, Munin+NAGIOS StatsD/Graphite Riemann+Collectd NAGIOS passive checks Мониторинг алкоголика Мониторинг наркомана Оптимизация производительности большой унаследованной PostgreSQL базы. 2014
  • 27. Мониторинг/графики Мониторинг нормального человека Мониторинг курильщика Zabbix Cacti, Munin+NAGIOS StatsD/Graphite Riemann+Collectd NAGIOS passive checks Мониторинг алкоголика Мониторинг наркомана Оптимизация производительности большой унаследованной PostgreSQL базы. 2014
  • 28. Еще пара слов про Zabbix § Ворон Каркнул: НИКОГДА! Оптимизация производительности большой унаследованной PostgreSQL базы. 2014
  • 29. Ogres have layers § Graphite/StatsD stack: § Dashboard (тысячи их, я просто взял стандартный, он плох) § Веб-интерфейс отдачи графиков (на Django) § Collector w/RRD-like storage (Carbon) § Aggregator/preprocessor w/UDP interface (StatsD) Оптимизация производительности большой унаследованной PostgreSQL базы. 2014
  • 30. StatsD implementation § На Go, Node.JS, Python, Perl, C, ... (тысячи их) § Сначала я взял Python: § ^ Автобус не придет § Старый добрый Perl! Оптимизация производительности большой унаследованной PostgreSQL базы. 2014
  • 31. Покой нам только снится § Снится не покой, а те самые 40-50 миллисекунд, которые не хотят уменьшаться § Что делать? § Как обычно, построить более подходящие индексы Оптимизация производительности большой унаследованной PostgreSQL базы. 2014
  • 32. Момент истины § Для самого частого запроса построен хороший индекс на три столбца (до того был — на два столбца, а исходно был на один столбец) § В этот момент все стало еще хуже :) § Размер индекса — 18 гигабайт § Все предыдущие докладчики, наверняка, говорили, что маленький индекс лучше, чем большой Оптимизация производительности большой унаследованной PostgreSQL базы. 2014
  • 33. One size does not fit all § Один из столбцов, по которому построен индекс — varchar § Превращаем varchar в int: § http://stackoverflow.com/a/9812029/601572 § create function h_int(text) returns int as $$ select ('x'||substr(md5($1),1,8))::bit(32)::int; $$ language sql; § Забыл сказать — я не боюсь хранимых процедур и триггеров Оптимизация производительности большой унаследованной PostgreSQL базы. 2014
  • 34. После шлифовки отполировать § SET enable_bitmapscan=false; <= старые добрые nested loops SELECT something FROM stat s JOIN domains d ON d.id = s.domain JOIN content c ON c.id = s.content LEFT JOIN deleted e ON e.id = s.id WHERE d.name = domname AND h_int(s.name) = h_int(filename <= работает новый маленький индекс AND s.name = filename AND date_part('epoch'::text, s.ptime) = filerev Оптимизация производительности большой унаследованной PostgreSQL базы. 2014
  • 35. Начинаем спать по ночам § Индекс занимал 18 гигабайт, стал занимать 8 гигабайт § Среднее время выполнения запроса днем в моменты пиковой нагрузки было 40-50 миллисекунд, стало 20-25 миллисекунд § 90% запросов обслуживаются за 100 миллисекунд (время от момента начала обработки запроса Perl-приложением до момента конца обработки, включает все SQL-запросы) § В среднем запрос обслуживается приложением за 50 мс Оптимизация производительности большой унаследованной PostgreSQL базы. 2014
  • 36. Мы строили-строили, и, наконец... § ...и, наконец: Оптимизация производительности большой унаследованной PostgreSQL базы. 2014
  • 37. Zabbix strikes back § ...и, наконец: Оптимизация производительности большой унаследованной PostgreSQL базы. 2014
  • 38. Выводы: § «Теория малых дел», внезапно, работает ^ несмотря на свой почтенный возраст § Ломать — не строить! § Знание — сила! § Учение Маркса всесильно, потому что оно верно! § Кажется, я не туда пишу... § В планах — шардинг, да Оптимизация производительности большой унаследованной PostgreSQL базы. 2014
  • 39. С вами был Александр Чистяков, главный инженер Git in Sky alex@gitinsky.com http://gitinsky.com http://meetup.com/DevOps-40 Пожалуйста, ваши вопросы. Спасибо за понимание!