SlideShare a Scribd company logo
История небольшого успеха с PostgreSQL – Владимир Бородин
История 
небольшого успеха 
с PostgreSQL 
Владимир Бородин 
Системный администратор
3 
Коротко 
• Про сборщики 
• Масштабирование 
• Отказоустойчивость 
• Мониторинг 
• Проблемы 
• Итоги
Про сборщики
5 Что это?
6 
Как это было? 
• Все метаданные в oracle 
• Шардирование по пользователям на 
стороне другого сервиса 
• Все запросы только в мастер 
• Сборщик работает с чанком из 1000 
заданий 
• Чанки распределяются между сборщиками с 
помощью хранимой логики в базе
7 
Почему сборщики? 
• Легко отчуждаемы 
– Нет взаимосвязей с другими данными в 
oracle 
• Наименее критичный по SLA сервис 
– Имеет право не работать единицы минут 
• Ощутимые объём данных и нагрузка 
– 2+ ТБ данных и ~40k rps
Масштабирование
9 Общая схема
10 
PLProxy 
• Положительный опыт у ребят из Skype 
• Нет необходимости в костылях для 
шардирования в другом сервисе 
• Больший контроль в руках DBA 
• Более простой вариант смены СУБД для 
приложения 
– Шардирование и отказоустойчивость 
– Хранимая логика в базе
11 
PLProxy 
• Шардирование по диапазонам ключей 
• Ключи из sequence'ов, которые на конечных 
базах разные 
• При добавлении нового шарда мастер 
конечной базы: 
– через FDW заносит информацию на 
pgmeta 
– меняет sequence'ы 
• Эта информация доезжает до всех plproxy- 
машин
Отказоустойчивость 
• pgcheck 
• pgswitch 
• pgsync
13 
pgcheck 
• Назначает приоритеты машинам конечных 
баз в зависимости от: 
– Живости машины, 
– Её роли (мастер/реплика), 
– В случае реплик: 
• Удалённости (ЦОД), 
• (А)синхронности, 
• Нагрузки, 
• TODO: отставания. 
• Это меняет поведение функции 
plproxy.get_cluster_partitions
14 Деградация в read-only в случае потери мастера
15 
pgswitch 
• Скрипт для планового переключения 
мастера, запускаемый на реплике 
• Проверяет всё, что можно и нужно, на 
старом и новых мастерах 
• Переключает мастера и все реплики на 
нового мастера 
• В любой непонятной ситуации паникует
16 
pgsync 
• Живёт на конечных базах 
• Меняет репликацию с синхронной на 
асинхронную и обратно 
• Автоматическое переключение мастера без 
потери данных 
• Пока только в тестинге
Мониторинг
18 
Проверки 
pg-active-sessions | Количество активных сессий 
pg-connections | Количество свободных соединений 
pg-log-errors | Количество ошибок в журнале(-ах) за 
последнюю минуту 
pg-mounted-nfs | Смонтированность nfs-каталогов 
pg-ping | SELECT 1 в PostgreSQL 
pg-replication-alive | Количество живых реплик 
pg-replication-lag | Лаг реплики в байтах 
pg-vacuum | Время последнего vacuum/analyze для 
всех таблиц 
pg-xlog-files | Количество незаархивированных xlog'ов 
pgbouncer | TCP chat на порт 6432 на каждой 
машине 
yrpop-errors | Количество ошибок ymod_pq в yrpop.log
19 
Графики 
• Начинали с pg_stats_reporter 
• Сейчас ищем ему замену 
• И почти всё рисуем в graphite
20 Пример дашборда
Проблемы
22 
По первости 
• По привычке отрезали много памяти под 
shared_buffers 
• Много оптимизировали дисковую 
подсистему 
– raid'ы с файловыми системами 
– page cache 
– Checkpoints/autovacuum/bgwriter
23 
RUN ON ALL 
• Шардирование сделали по 
идентификаторам сборщика и чанка 
• Сборщики одного пользователи могут 
попадать в разные шарды 
• Запрос “покажи мне все сборщики 
конкретного пользователя” вынужден 
выполняться с RUN ON ALL 
• Начинали с 32 (!) логических шардов 
• Запрос оказался весьма частым 
• Наедались соединениями
24 
RUN ON ALL 
• Не стоит использовать для частых запросов 
• Сократили количество шардов с 32 до 4 
• Закэшировали результаты этого запроса в 
приложении
25 
Нам не хватает: 
• Интерфейс ожиданий и трассировка сессии 
• Возможность отдать под shared_buffers всю 
память и включить O_DIRECT 
• Нормальное партиционирование 
• Полусинхронная репликация 
• Параллелизм: 
– Восстановление реплики 
– pg_basebackup 
– Другие операции 
• Advisory locks с таймаутами
Итоги
27 
Итоги 
• 2+ ТБ данных (15+ млрд. строк) 
• 40000+ rps 
• ~ -1 oracle 
• ~ 6 месяцев 0,5 человека 
• Хорошее начало светлого пути: 
– Много полезного опыта для DBA 
– Много переиспользуемого кода для 
разработчиков 
– Положительное мнение о PostgreSQL у 
всех :)
Владимир Бородин 
Системный администратор 
d0uble@yandex-team.ru 
+7 495 739-70-00 (доб. 7255) 
119021, Москва, ул. Льва 
Толстого, 18Б 
Спасибо

More Related Content

PDF
PostgreSQL в высоконагруженных проектах
PDF
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
PDF
Владимир Бородин - PostgreSQL
PDF
SphinxSearch Meetup - Tips&tricks
PDF
pgconf.ru 2015 avito postgresql
PDF
Avito Stachka 2012
PDF
AVITO. Решардинг Redis без даунтайма. DevConf 2012
PDF
libfpta — обгоняя SQLite и Tarantool / Леонид Юрьев (Positive Technologies)
PostgreSQL в высоконагруженных проектах
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
Владимир Бородин - PostgreSQL
SphinxSearch Meetup - Tips&tricks
pgconf.ru 2015 avito postgresql
Avito Stachka 2012
AVITO. Решардинг Redis без даунтайма. DevConf 2012
libfpta — обгоняя SQLite и Tarantool / Леонид Юрьев (Positive Technologies)

What's hot (20)

PDF
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
PDF
AVITO. Решаем проблемы по мере их поступления. Стачка 2013
PDF
Загрузка больших объемов данных для бизнес-аналитики
PDF
С чего начать внедрение Hadoop в компании. Доклад Алексея Еремихина (Badoo).
PPTX
Как ускорить MySQL Handler Socket в 9 раз / Александр Яковлев (Мамба)
PDF
Near-realtime аналитика событий в высоконагруженном проекте
PPTX
Масштабирование баз данных. (Database Scalability)
PPTX
Как мы храним и анализируем большой социальный граф, Максим Бартенев (Норси-т...
PDF
pgconf.ru 2015.avito postgresql recovery
PDF
Что нового и полезного в PostgreSQL 9.5 / Илья Космодемьянский (PostgreSQL-Co...
PDF
Нагруженный поиск на Sphinx
PPTX
Разработка real-time приложений с RethinkDB / Илья Вербицкий (Независимый кон...
PDF
Путь от монолита на PHP к микросервисам на Scala / Денис Иванов (2GIS)
PDF
Советы для начинающих разработчиков PostgreSQL
PPTX
Эволюция программно-аппаратного обеспечения хранения фотографий в Badoo / Дми...
PDF
Опыт миграции между дата-центрами / Михаил Тюрин, Сергей Бурладян (Avito)
PDF
Hacking PostgreSQL. Обзор архитектуры.
PPTX
В ногу со временем, или как делать upgrade PostgreSQL / Андрей Сальников (Dat...
PDF
Обзор перспективных баз данных для highload / Юрий Насретдинов
PDF
Практика совместного использования Lua и C в opensource спам-фильтре Rspamd /...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
AVITO. Решаем проблемы по мере их поступления. Стачка 2013
Загрузка больших объемов данных для бизнес-аналитики
С чего начать внедрение Hadoop в компании. Доклад Алексея Еремихина (Badoo).
Как ускорить MySQL Handler Socket в 9 раз / Александр Яковлев (Мамба)
Near-realtime аналитика событий в высоконагруженном проекте
Масштабирование баз данных. (Database Scalability)
Как мы храним и анализируем большой социальный граф, Максим Бартенев (Норси-т...
pgconf.ru 2015.avito postgresql recovery
Что нового и полезного в PostgreSQL 9.5 / Илья Космодемьянский (PostgreSQL-Co...
Нагруженный поиск на Sphinx
Разработка real-time приложений с RethinkDB / Илья Вербицкий (Независимый кон...
Путь от монолита на PHP к микросервисам на Scala / Денис Иванов (2GIS)
Советы для начинающих разработчиков PostgreSQL
Эволюция программно-аппаратного обеспечения хранения фотографий в Badoo / Дми...
Опыт миграции между дата-центрами / Михаил Тюрин, Сергей Бурладян (Avito)
Hacking PostgreSQL. Обзор архитектуры.
В ногу со временем, или как делать upgrade PostgreSQL / Андрей Сальников (Dat...
Обзор перспективных баз данных для highload / Юрий Насретдинов
Практика совместного использования Lua и C в opensource спам-фильтре Rspamd /...
Ad

Similar to История небольшого успеха с PostgreSQL – Владимир Бородин (20)

PDF
История небольшого успеха с PostgreSQL
PPTX
Практический опыт использования некоторых современных решений репликации MySQL
PPTX
Mysql replication DevConf 2012
PDF
Мониторинг и отладка MySQL: максимум информации при минимальных потерях
PPTX
2014.12.23 Александр Андреев, Parallels
PDF
Anton Tsitou "Cycle ORM and Graphs"
PDF
Олег Царев, Кирилл Коринский Сравнительный анализ хранилищ данных
PPTX
Опыт внедрения OpenStack
ODP
Настройка производительности. Планировщик ввода/вывода
PDF
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
PDF
OpenSource SQL Databases Enter Millions Queries per Second Era
PPTX
Опыт эксплуатации большого проекта на Ruby
PDF
Вебинар: Основы распараллеливания С++ программ при помощи OpenMP
PDF
Как считать и анализировать сотни гигабит трафика в секунду, Станислав Николо...
PDF
PostgreSQL performance recipes
PPTX
Hosting for forbes.ru_
PDF
Сергей Еланцев - Troubleshooting
PDF
Zero Downtime PHP Deployment with Envoyer And Forge
PDF
Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacit...
PDF
Дмитрий Куликовский, Алексей Лавренюк - Построение кластеров, нагрузочное тес...
История небольшого успеха с PostgreSQL
Практический опыт использования некоторых современных решений репликации MySQL
Mysql replication DevConf 2012
Мониторинг и отладка MySQL: максимум информации при минимальных потерях
2014.12.23 Александр Андреев, Parallels
Anton Tsitou "Cycle ORM and Graphs"
Олег Царев, Кирилл Коринский Сравнительный анализ хранилищ данных
Опыт внедрения OpenStack
Настройка производительности. Планировщик ввода/вывода
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
OpenSource SQL Databases Enter Millions Queries per Second Era
Опыт эксплуатации большого проекта на Ruby
Вебинар: Основы распараллеливания С++ программ при помощи OpenMP
Как считать и анализировать сотни гигабит трафика в секунду, Станислав Николо...
PostgreSQL performance recipes
Hosting for forbes.ru_
Сергей Еланцев - Troubleshooting
Zero Downtime PHP Deployment with Envoyer And Forge
Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacit...
Дмитрий Куликовский, Алексей Лавренюк - Построение кластеров, нагрузочное тес...
Ad

More from Yandex (20)

PDF
Предсказание оттока игроков из World of Tanks
PDF
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
PDF
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
PDF
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
PDF
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
PDF
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
PDF
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
PDF
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
PDF
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
PDF
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
PDF
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
PDF
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
PDF
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
PDF
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
PDF
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
PDF
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
PDF
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
PDF
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
PDF
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
PDF
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
Предсказание оттока игроков из World of Tanks
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...

История небольшого успеха с PostgreSQL – Владимир Бородин

  • 2. История небольшого успеха с PostgreSQL Владимир Бородин Системный администратор
  • 3. 3 Коротко • Про сборщики • Масштабирование • Отказоустойчивость • Мониторинг • Проблемы • Итоги
  • 6. 6 Как это было? • Все метаданные в oracle • Шардирование по пользователям на стороне другого сервиса • Все запросы только в мастер • Сборщик работает с чанком из 1000 заданий • Чанки распределяются между сборщиками с помощью хранимой логики в базе
  • 7. 7 Почему сборщики? • Легко отчуждаемы – Нет взаимосвязей с другими данными в oracle • Наименее критичный по SLA сервис – Имеет право не работать единицы минут • Ощутимые объём данных и нагрузка – 2+ ТБ данных и ~40k rps
  • 10. 10 PLProxy • Положительный опыт у ребят из Skype • Нет необходимости в костылях для шардирования в другом сервисе • Больший контроль в руках DBA • Более простой вариант смены СУБД для приложения – Шардирование и отказоустойчивость – Хранимая логика в базе
  • 11. 11 PLProxy • Шардирование по диапазонам ключей • Ключи из sequence'ов, которые на конечных базах разные • При добавлении нового шарда мастер конечной базы: – через FDW заносит информацию на pgmeta – меняет sequence'ы • Эта информация доезжает до всех plproxy- машин
  • 13. 13 pgcheck • Назначает приоритеты машинам конечных баз в зависимости от: – Живости машины, – Её роли (мастер/реплика), – В случае реплик: • Удалённости (ЦОД), • (А)синхронности, • Нагрузки, • TODO: отставания. • Это меняет поведение функции plproxy.get_cluster_partitions
  • 14. 14 Деградация в read-only в случае потери мастера
  • 15. 15 pgswitch • Скрипт для планового переключения мастера, запускаемый на реплике • Проверяет всё, что можно и нужно, на старом и новых мастерах • Переключает мастера и все реплики на нового мастера • В любой непонятной ситуации паникует
  • 16. 16 pgsync • Живёт на конечных базах • Меняет репликацию с синхронной на асинхронную и обратно • Автоматическое переключение мастера без потери данных • Пока только в тестинге
  • 18. 18 Проверки pg-active-sessions | Количество активных сессий pg-connections | Количество свободных соединений pg-log-errors | Количество ошибок в журнале(-ах) за последнюю минуту pg-mounted-nfs | Смонтированность nfs-каталогов pg-ping | SELECT 1 в PostgreSQL pg-replication-alive | Количество живых реплик pg-replication-lag | Лаг реплики в байтах pg-vacuum | Время последнего vacuum/analyze для всех таблиц pg-xlog-files | Количество незаархивированных xlog'ов pgbouncer | TCP chat на порт 6432 на каждой машине yrpop-errors | Количество ошибок ymod_pq в yrpop.log
  • 19. 19 Графики • Начинали с pg_stats_reporter • Сейчас ищем ему замену • И почти всё рисуем в graphite
  • 22. 22 По первости • По привычке отрезали много памяти под shared_buffers • Много оптимизировали дисковую подсистему – raid'ы с файловыми системами – page cache – Checkpoints/autovacuum/bgwriter
  • 23. 23 RUN ON ALL • Шардирование сделали по идентификаторам сборщика и чанка • Сборщики одного пользователи могут попадать в разные шарды • Запрос “покажи мне все сборщики конкретного пользователя” вынужден выполняться с RUN ON ALL • Начинали с 32 (!) логических шардов • Запрос оказался весьма частым • Наедались соединениями
  • 24. 24 RUN ON ALL • Не стоит использовать для частых запросов • Сократили количество шардов с 32 до 4 • Закэшировали результаты этого запроса в приложении
  • 25. 25 Нам не хватает: • Интерфейс ожиданий и трассировка сессии • Возможность отдать под shared_buffers всю память и включить O_DIRECT • Нормальное партиционирование • Полусинхронная репликация • Параллелизм: – Восстановление реплики – pg_basebackup – Другие операции • Advisory locks с таймаутами
  • 27. 27 Итоги • 2+ ТБ данных (15+ млрд. строк) • 40000+ rps • ~ -1 oracle • ~ 6 месяцев 0,5 человека • Хорошее начало светлого пути: – Много полезного опыта для DBA – Много переиспользуемого кода для разработчиков – Положительное мнение о PostgreSQL у всех :)
  • 28. Владимир Бородин Системный администратор d0uble@yandex-team.ru +7 495 739-70-00 (доб. 7255) 119021, Москва, ул. Льва Толстого, 18Б Спасибо