SlideShare a Scribd company logo
1 of 41
Диагностика postgresql
c точки зрения системного
администратора
Николай Сивко
okmeter.io
Кто говорит
• Очень долго работал админом
• Руководил эксплуатацией в hh.ru
• Основал и работаю в okmeter.io – сервис мониторинга
Проблема
Проблема
• Для хорошего uptime нужно понимать, как работает каждый
компонент вашей инфраструктуры
• БД обычно самый сложный компонент, непросто
масштабируется, непросто добиться отказоустойчивости
• Лучше если БД управляют профессиональные DBA, но это
доступно не всем проектам
• По верхам понимать, как работает БД нужно любому админу
Что хочет знать админ
• БД для остального проекта – ресурс: работает ли он
штатно или есть проблемы?
• БД потребляет ресурсы сервера:
- на что тратятся ресурсы?
- пора добавлять или можно как-то снизить?
- какой именно запрос просить ускорить?
Не затронем:
• Backup/restore
• Репликацию
• Оптимизацию запросов
Как сейчас работает БД
• Работа БД – выполнять запросы
• Время выполнения очень хороший показатель:
- если уперлись в ресурсы: время растет
- появились тяжелые запросы: уперлись в ресурсы ->время растет
- ждем на блокировках: время растет
- пропали запросы: время падает (запросы от мониторинга
быстрые)
Время выполнения запросов
• pg_stat_activity – мгновенный снимок всех исполняющихся
запросов
extract(epoch from (now()-xact_start)) – время в текущем состоянии
(active, idle in transaction)
• pg_stat_statements – счетчики по завершенным запросам
total_time – кумулятивная сумма времен выполнения запроса
• Сниффинг сети между клиентами и pg
Смотрим по pg_stat_statements
• Время выполнения запроса обычно ~1ms, получить полную картину
периодическими запросами в pg_stat_activity нереально
• По pg_stat_statements мы к сожалению не можем посчитать
гистограмму, придется смотреть на среднее
[rate(total_time)/rate(calls)]
• Для общей картины смотрим на суммарное среднее:
[sum(rate(total_time))/sum(rate(calls))]
Среднее плохо. Но видно же аномалию?
Среднее по-прежнему плохо
• Любая аномалия (выброс/провал) на среднем не обязательно
проблема
НО
• Скорее всего любую проблему будет видно на среднем!
Не пропали соединения?
Сколько запросов?
Как работает БД?
• Однозначно сложно сказать
• По 3-4 графикам можно понять
• Хорошо бы иметь гистограмму, тогда было бы проще:
Если проблема есть
• Что с ресурсами: CPU, disk, net?
• Может их съел какой-то другой процесс?
• Ресурсов стало меньше (деградация сервера)
Другой процесс?
Деградация сервера
Деградация сервера
Ресурсы изнутри postgresql
• Убедились, что потребляет сам PG
• Хотим больше конкретики: запросы/таблицы/индексы
Ресурсы: cpu
• Будем считать, что
total_query_time = disk_wait_time + cpu_time
• Это вранье, если
- существенное время ожидаем блокировок – потребляем
меньше CPU
- parallel query (9.6+) – потребляем больше CPU
Ресурсы: cpu
• Не нужно смотреть на “медленные” запросы, когда говорим про
ресурсы
• Правильно смотреть на сумму времени
CPU: запросы
CPU: нужно исключить блокировки
• Выбросы на cpu_time могут быть из-за локов
• Перепроверяем по pg_stat_activity
• pg_stat_activity + pg_locks: можем узнать, кто залочил и кто ждет
Ресурсы: диск.чтение
• shared_blks_read: чтение страниц с диска в случае buffer cache
miss (до диска дойдет, если будет еще page cache miss)
• local_blks_read: чтение данных временных таблиц
• temp_blks_read: чтение временных файлов (когда для запроса
нужно больше памяти, чем work_mem)
Сложности мониторинга диска
• Процесс делает системный вызов read()
• Он отражается в /proc/<pid>/io
• Но до диска может не дойти, если прочитался из page cache
• С другой стороны в /proc/<pid>/io попадает например чтение из
stdin
Диск: кто грузит по чтению?
Диск: кто грузит по чтению?
Диск: blks_read VS templ_blks_read
Диск: blks_read VS templ_blks_read
• Разные запросы: нужно видеть и одни и другие
• Чиним по-разному:
- heap: добавляем памяти/меняем запрос/перекладываем
данные по-другому/ускоряем дисковую подсистему
- temp: увеличиваем work_mem/меняем запрос/переносим на
аналитическую реплику
Ресурсы: диск.запись
• WAL
• Синхронизация “грязных” страниц
• Временные файлов
• Запись временных таблиц
Ресурсы: диск.запись
• Любые изменения “пачкают” страницы и записываются в WAL
• Можем ориентироваться только по dirty pages
• Запись “грязных” страниц на диск не синхронна
• Пишет или backend или checkpointer или bgwriter
Диск: dirty pages - checkpointer
Диск: checkpointer – disk traffic
WTF: SELECT пачкает страницы?
WTF: SELECT пачкает страницы?
WTF: SELECT пачкает страницы?!?!
• INSERT в транзакции txid1 -> tuple (t_xmin=txid1)
• SELECT не знает завершилась ли txid1 (commited/aborted)
- Идем в CLOG узнавать статус txid1 (это достаточно дорого)
- Если txid1 завершена, сохраняем hint bits в tuple (t_infomask)
- Помечаем страницу как “грязную”
А ещё SELECT может
вызывать синхронную запись
SELECT может вызывать запись
• Если при чтении нам нужно прочитать страницу, которой нет в
buffer cache, мы читаем ее с диска
• Если в buffer cache нет свободного места, нужно что-то вытеснить
• Если кандидат на вытеснение помечен как dirty, мы его пишем на
диск
Ресурсы: сеть
• PG не предоставляет информацию по количество
результирующих байт по запросу
• Можно очень примерно посчитать по pg_stat_statements.rows
Итого:
• Нужно хорошо понимать, как PG работает с ресурсами сервера
• Осознавать физический смысл метрик, на которые вы смотрите
• Обязательно нужно объяснять для себя найденные аномалии, это
позволит полностью разобраться c деталями реализации той или
иной подсистемы
Спасибо за внимание!
Вопросы?
Николай Сивко
nsv@okmeter.io

More Related Content

What's hot

Tempesta FW: challenges, internals, use cases / Александр Крижановский (Tempe...
Tempesta FW: challenges, internals, use cases / Александр Крижановский (Tempe...Tempesta FW: challenges, internals, use cases / Александр Крижановский (Tempe...
Tempesta FW: challenges, internals, use cases / Александр Крижановский (Tempe...Ontico
 
Доменно специфичные базы данных и рассылка Aviasales, Борис Каплуновский (Avi...
Доменно специфичные базы данных и рассылка Aviasales, Борис Каплуновский (Avi...Доменно специфичные базы данных и рассылка Aviasales, Борис Каплуновский (Avi...
Доменно специфичные базы данных и рассылка Aviasales, Борис Каплуновский (Avi...Ontico
 
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...Ontico
 
Разработка real-time приложений с RethinkDB / Илья Вербицкий (Независимый кон...
Разработка real-time приложений с RethinkDB / Илья Вербицкий (Независимый кон...Разработка real-time приложений с RethinkDB / Илья Вербицкий (Независимый кон...
Разработка real-time приложений с RethinkDB / Илья Вербицкий (Независимый кон...Ontico
 
Нагрузочное тестирование с помощью Яндекс.Танк - Алексей Лавренюк, PyCon RU 2...
Нагрузочное тестирование с помощью Яндекс.Танк - Алексей Лавренюк, PyCon RU 2...Нагрузочное тестирование с помощью Яндекс.Танк - Алексей Лавренюк, PyCon RU 2...
Нагрузочное тестирование с помощью Яндекс.Танк - Алексей Лавренюк, PyCon RU 2...it-people
 
С чего начать внедрение Hadoop в компании. Доклад Алексея Еремихина (Badoo).
С чего начать внедрение Hadoop в компании. Доклад Алексея Еремихина (Badoo). С чего начать внедрение Hadoop в компании. Доклад Алексея Еремихина (Badoo).
С чего начать внедрение Hadoop в компании. Доклад Алексея Еремихина (Badoo). Badoo Development
 
Доклад Валерия Старынина на DevConf 2014. "StatsCollector, или "Мама! Он и ме...
Доклад Валерия Старынина на DevConf 2014. "StatsCollector, или "Мама! Он и ме...Доклад Валерия Старынина на DevConf 2014. "StatsCollector, или "Мама! Он и ме...
Доклад Валерия Старынина на DevConf 2014. "StatsCollector, или "Мама! Он и ме...Badoo Development
 
PostgreSQL worst practices / Илья Космодемьянский (Data Egret)
PostgreSQL worst practices / Илья Космодемьянский (Data Egret)PostgreSQL worst practices / Илья Космодемьянский (Data Egret)
PostgreSQL worst practices / Илья Космодемьянский (Data Egret)Ontico
 
Zabbix и миллионы метрик: наилучший опыт масштабного мониторинга / Алексей Вл...
Zabbix и миллионы метрик: наилучший опыт масштабного мониторинга / Алексей Вл...Zabbix и миллионы метрик: наилучший опыт масштабного мониторинга / Алексей Вл...
Zabbix и миллионы метрик: наилучший опыт масштабного мониторинга / Алексей Вл...Ontico
 
Near-realtime аналитика событий в высоконагруженном проекте
Near-realtime аналитика событий в высоконагруженном проектеNear-realtime аналитика событий в высоконагруженном проекте
Near-realtime аналитика событий в высоконагруженном проектеAlexandr Krasheninnikov
 
Жизнь проекта на production
Жизнь проекта на productionЖизнь проекта на production
Жизнь проекта на productionNikolay Sivko
 
PostgreSQL - Ups, DevOps..., Алексей Лесовский (PostgreSQL-Consulting)
PostgreSQL - Ups, DevOps..., Алексей Лесовский (PostgreSQL-Consulting)PostgreSQL - Ups, DevOps..., Алексей Лесовский (PostgreSQL-Consulting)
PostgreSQL - Ups, DevOps..., Алексей Лесовский (PostgreSQL-Consulting)Ontico
 
Обзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий НасретдиновОбзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий НасретдиновOntico
 
Опыт миграции между дата-центрами / Михаил Тюрин, Сергей Бурладян (Avito)
Опыт миграции между дата-центрами / Михаил Тюрин, Сергей Бурладян (Avito)Опыт миграции между дата-центрами / Михаил Тюрин, Сергей Бурладян (Avito)
Опыт миграции между дата-центрами / Михаил Тюрин, Сергей Бурладян (Avito)Ontico
 
OpenResty: превращаем NGINX в полноценный сервер приложений / Владимир Прота...
OpenResty: превращаем NGINX в полноценный сервер приложений  / Владимир Прота...OpenResty: превращаем NGINX в полноценный сервер приложений  / Владимир Прота...
OpenResty: превращаем NGINX в полноценный сервер приложений / Владимир Прота...Ontico
 
Консольные приложения на Go
Консольные приложения на GoКонсольные приложения на Go
Консольные приложения на GoAndrey Smirnov
 
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...Ontico
 
Внутреннее устройство PostgreSQL: временные таблицы и фрагментация памяти / Г...
Внутреннее устройство PostgreSQL: временные таблицы и фрагментация памяти / Г...Внутреннее устройство PostgreSQL: временные таблицы и фрагментация памяти / Г...
Внутреннее устройство PostgreSQL: временные таблицы и фрагментация памяти / Г...Ontico
 
Нагрузочное тестирование с помощью Яндекс.Танка
Нагрузочное тестирование с помощью Яндекс.ТанкаНагрузочное тестирование с помощью Яндекс.Танка
Нагрузочное тестирование с помощью Яндекс.ТанкаAleksandr Boichenko
 

What's hot (19)

Tempesta FW: challenges, internals, use cases / Александр Крижановский (Tempe...
Tempesta FW: challenges, internals, use cases / Александр Крижановский (Tempe...Tempesta FW: challenges, internals, use cases / Александр Крижановский (Tempe...
Tempesta FW: challenges, internals, use cases / Александр Крижановский (Tempe...
 
Доменно специфичные базы данных и рассылка Aviasales, Борис Каплуновский (Avi...
Доменно специфичные базы данных и рассылка Aviasales, Борис Каплуновский (Avi...Доменно специфичные базы данных и рассылка Aviasales, Борис Каплуновский (Avi...
Доменно специфичные базы данных и рассылка Aviasales, Борис Каплуновский (Avi...
 
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
 
Разработка real-time приложений с RethinkDB / Илья Вербицкий (Независимый кон...
Разработка real-time приложений с RethinkDB / Илья Вербицкий (Независимый кон...Разработка real-time приложений с RethinkDB / Илья Вербицкий (Независимый кон...
Разработка real-time приложений с RethinkDB / Илья Вербицкий (Независимый кон...
 
Нагрузочное тестирование с помощью Яндекс.Танк - Алексей Лавренюк, PyCon RU 2...
Нагрузочное тестирование с помощью Яндекс.Танк - Алексей Лавренюк, PyCon RU 2...Нагрузочное тестирование с помощью Яндекс.Танк - Алексей Лавренюк, PyCon RU 2...
Нагрузочное тестирование с помощью Яндекс.Танк - Алексей Лавренюк, PyCon RU 2...
 
С чего начать внедрение Hadoop в компании. Доклад Алексея Еремихина (Badoo).
С чего начать внедрение Hadoop в компании. Доклад Алексея Еремихина (Badoo). С чего начать внедрение Hadoop в компании. Доклад Алексея Еремихина (Badoo).
С чего начать внедрение Hadoop в компании. Доклад Алексея Еремихина (Badoo).
 
Доклад Валерия Старынина на DevConf 2014. "StatsCollector, или "Мама! Он и ме...
Доклад Валерия Старынина на DevConf 2014. "StatsCollector, или "Мама! Он и ме...Доклад Валерия Старынина на DevConf 2014. "StatsCollector, или "Мама! Он и ме...
Доклад Валерия Старынина на DevConf 2014. "StatsCollector, или "Мама! Он и ме...
 
PostgreSQL worst practices / Илья Космодемьянский (Data Egret)
PostgreSQL worst practices / Илья Космодемьянский (Data Egret)PostgreSQL worst practices / Илья Космодемьянский (Data Egret)
PostgreSQL worst practices / Илья Космодемьянский (Data Egret)
 
Zabbix и миллионы метрик: наилучший опыт масштабного мониторинга / Алексей Вл...
Zabbix и миллионы метрик: наилучший опыт масштабного мониторинга / Алексей Вл...Zabbix и миллионы метрик: наилучший опыт масштабного мониторинга / Алексей Вл...
Zabbix и миллионы метрик: наилучший опыт масштабного мониторинга / Алексей Вл...
 
Near-realtime аналитика событий в высоконагруженном проекте
Near-realtime аналитика событий в высоконагруженном проектеNear-realtime аналитика событий в высоконагруженном проекте
Near-realtime аналитика событий в высоконагруженном проекте
 
Жизнь проекта на production
Жизнь проекта на productionЖизнь проекта на production
Жизнь проекта на production
 
PostgreSQL - Ups, DevOps..., Алексей Лесовский (PostgreSQL-Consulting)
PostgreSQL - Ups, DevOps..., Алексей Лесовский (PostgreSQL-Consulting)PostgreSQL - Ups, DevOps..., Алексей Лесовский (PostgreSQL-Consulting)
PostgreSQL - Ups, DevOps..., Алексей Лесовский (PostgreSQL-Consulting)
 
Обзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий НасретдиновОбзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий Насретдинов
 
Опыт миграции между дата-центрами / Михаил Тюрин, Сергей Бурладян (Avito)
Опыт миграции между дата-центрами / Михаил Тюрин, Сергей Бурладян (Avito)Опыт миграции между дата-центрами / Михаил Тюрин, Сергей Бурладян (Avito)
Опыт миграции между дата-центрами / Михаил Тюрин, Сергей Бурладян (Avito)
 
OpenResty: превращаем NGINX в полноценный сервер приложений / Владимир Прота...
OpenResty: превращаем NGINX в полноценный сервер приложений  / Владимир Прота...OpenResty: превращаем NGINX в полноценный сервер приложений  / Владимир Прота...
OpenResty: превращаем NGINX в полноценный сервер приложений / Владимир Прота...
 
Консольные приложения на Go
Консольные приложения на GoКонсольные приложения на Go
Консольные приложения на Go
 
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
 
Внутреннее устройство PostgreSQL: временные таблицы и фрагментация памяти / Г...
Внутреннее устройство PostgreSQL: временные таблицы и фрагментация памяти / Г...Внутреннее устройство PostgreSQL: временные таблицы и фрагментация памяти / Г...
Внутреннее устройство PostgreSQL: временные таблицы и фрагментация памяти / Г...
 
Нагрузочное тестирование с помощью Яндекс.Танка
Нагрузочное тестирование с помощью Яндекс.ТанкаНагрузочное тестирование с помощью Яндекс.Танка
Нагрузочное тестирование с помощью Яндекс.Танка
 

Viewers also liked

Хорошо поддерживаемое приложение
Хорошо поддерживаемое приложениеХорошо поддерживаемое приложение
Хорошо поддерживаемое приложениеNikolay Sivko
 
Decreased fetal movements 2017
Decreased fetal movements 2017Decreased fetal movements 2017
Decreased fetal movements 2017Ahmad Saber
 
Satyrs and Nymphs in paintings
Satyrs and Nymphs in paintingsSatyrs and Nymphs in paintings
Satyrs and Nymphs in paintingsguimera
 
Kinh điển khởi nghiệp Summary
Kinh điển khởi nghiệp SummaryKinh điển khởi nghiệp Summary
Kinh điển khởi nghiệp SummaryHoang Duc Minh
 
2017年3月版データマエショリスト入門
2017年3月版データマエショリスト入門2017年3月版データマエショリスト入門
2017年3月版データマエショリスト入門Yuya Matsumura
 
Мониторинг качества работы вашего проекта
Мониторинг качества работы вашего проектаМониторинг качества работы вашего проекта
Мониторинг качества работы вашего проектаNikolay Sivko
 
Мониторинг всех слоев web проекта (hl2015)
Мониторинг всех слоев web проекта (hl2015)Мониторинг всех слоев web проекта (hl2015)
Мониторинг всех слоев web проекта (hl2015)Nikolay Sivko
 
Prometheus мониторинг микросервисных приложений / Виталий Левченко
Prometheus мониторинг микросервисных приложений / Виталий ЛевченкоPrometheus мониторинг микросервисных приложений / Виталий Левченко
Prometheus мониторинг микросервисных приложений / Виталий ЛевченкоOntico
 
Путь мониторинга 2.0 всё стало другим / Всеволод Поляков (Grammarly)
Путь мониторинга 2.0 всё стало другим / Всеволод Поляков (Grammarly)Путь мониторинга 2.0 всё стало другим / Всеволод Поляков (Grammarly)
Путь мониторинга 2.0 всё стало другим / Всеволод Поляков (Grammarly)Ontico
 
Monitoring-driven эксплуатация (rootconf2015)
Monitoring-driven эксплуатация (rootconf2015)Monitoring-driven эксплуатация (rootconf2015)
Monitoring-driven эксплуатация (rootconf2015)Nikolay Sivko
 
The culture of time - Starling points of view
The culture of time - Starling points of viewThe culture of time - Starling points of view
The culture of time - Starling points of viewAdam Chmielowski
 
Pelajaran sekolah sabat ke 11 triwulan 1 2017
Pelajaran sekolah sabat ke 11 triwulan 1 2017Pelajaran sekolah sabat ke 11 triwulan 1 2017
Pelajaran sekolah sabat ke 11 triwulan 1 2017David Syahputra
 
Netbiscuits: Enabling the Mobile Experience - Michael Neidhofer - Stanford - ...
Netbiscuits: Enabling the Mobile Experience - Michael Neidhofer - Stanford - ...Netbiscuits: Enabling the Mobile Experience - Michael Neidhofer - Stanford - ...
Netbiscuits: Enabling the Mobile Experience - Michael Neidhofer - Stanford - ...Burton Lee
 
Pensacola Socialdesk - Social Entrepreneurship
Pensacola Socialdesk - Social EntrepreneurshipPensacola Socialdesk - Social Entrepreneurship
Pensacola Socialdesk - Social EntrepreneurshipDavid Musselwhite
 
Social media, Gov 2.0 and government workers
Social media, Gov 2.0 and government workersSocial media, Gov 2.0 and government workers
Social media, Gov 2.0 and government workersJD Lasica
 
Move the needle: Get your supporters to take action
Move the needle: Get your supporters to take actionMove the needle: Get your supporters to take action
Move the needle: Get your supporters to take actionJD Lasica
 
6 Most Important Benefits of Repurposing Old Content
6 Most Important Benefits of Repurposing Old Content6 Most Important Benefits of Repurposing Old Content
6 Most Important Benefits of Repurposing Old ContentRebecca - The Savvy Marketer
 
STE 2017 Tech Salary Trends
STE 2017 Tech Salary TrendsSTE 2017 Tech Salary Trends
STE 2017 Tech Salary TrendsLee Cohen
 

Viewers also liked (20)

Хорошо поддерживаемое приложение
Хорошо поддерживаемое приложениеХорошо поддерживаемое приложение
Хорошо поддерживаемое приложение
 
Decreased fetal movements 2017
Decreased fetal movements 2017Decreased fetal movements 2017
Decreased fetal movements 2017
 
Satyrs and Nymphs in paintings
Satyrs and Nymphs in paintingsSatyrs and Nymphs in paintings
Satyrs and Nymphs in paintings
 
Kinh điển khởi nghiệp Summary
Kinh điển khởi nghiệp SummaryKinh điển khởi nghiệp Summary
Kinh điển khởi nghiệp Summary
 
2017年3月版データマエショリスト入門
2017年3月版データマエショリスト入門2017年3月版データマエショリスト入門
2017年3月版データマエショリスト入門
 
Мониторинг качества работы вашего проекта
Мониторинг качества работы вашего проектаМониторинг качества работы вашего проекта
Мониторинг качества работы вашего проекта
 
Мониторинг всех слоев web проекта (hl2015)
Мониторинг всех слоев web проекта (hl2015)Мониторинг всех слоев web проекта (hl2015)
Мониторинг всех слоев web проекта (hl2015)
 
Prometheus мониторинг микросервисных приложений / Виталий Левченко
Prometheus мониторинг микросервисных приложений / Виталий ЛевченкоPrometheus мониторинг микросервисных приложений / Виталий Левченко
Prometheus мониторинг микросервисных приложений / Виталий Левченко
 
Путь мониторинга 2.0 всё стало другим / Всеволод Поляков (Grammarly)
Путь мониторинга 2.0 всё стало другим / Всеволод Поляков (Grammarly)Путь мониторинга 2.0 всё стало другим / Всеволод Поляков (Grammarly)
Путь мониторинга 2.0 всё стало другим / Всеволод Поляков (Grammarly)
 
Monitoring-driven эксплуатация (rootconf2015)
Monitoring-driven эксплуатация (rootconf2015)Monitoring-driven эксплуатация (rootconf2015)
Monitoring-driven эксплуатация (rootconf2015)
 
The culture of time - Starling points of view
The culture of time - Starling points of viewThe culture of time - Starling points of view
The culture of time - Starling points of view
 
Pelajaran sekolah sabat ke 11 triwulan 1 2017
Pelajaran sekolah sabat ke 11 triwulan 1 2017Pelajaran sekolah sabat ke 11 triwulan 1 2017
Pelajaran sekolah sabat ke 11 triwulan 1 2017
 
Groeien
GroeienGroeien
Groeien
 
Netbiscuits: Enabling the Mobile Experience - Michael Neidhofer - Stanford - ...
Netbiscuits: Enabling the Mobile Experience - Michael Neidhofer - Stanford - ...Netbiscuits: Enabling the Mobile Experience - Michael Neidhofer - Stanford - ...
Netbiscuits: Enabling the Mobile Experience - Michael Neidhofer - Stanford - ...
 
Pensacola Socialdesk - Social Entrepreneurship
Pensacola Socialdesk - Social EntrepreneurshipPensacola Socialdesk - Social Entrepreneurship
Pensacola Socialdesk - Social Entrepreneurship
 
Social media, Gov 2.0 and government workers
Social media, Gov 2.0 and government workersSocial media, Gov 2.0 and government workers
Social media, Gov 2.0 and government workers
 
Report Metà Mandato
Report Metà MandatoReport Metà Mandato
Report Metà Mandato
 
Move the needle: Get your supporters to take action
Move the needle: Get your supporters to take actionMove the needle: Get your supporters to take action
Move the needle: Get your supporters to take action
 
6 Most Important Benefits of Repurposing Old Content
6 Most Important Benefits of Repurposing Old Content6 Most Important Benefits of Repurposing Old Content
6 Most Important Benefits of Repurposing Old Content
 
STE 2017 Tech Salary Trends
STE 2017 Tech Salary TrendsSTE 2017 Tech Salary Trends
STE 2017 Tech Salary Trends
 

Similar to Диагностика postgresql для системного администратора

Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...
Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...
Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...Ontico
 
Асинхронная репликация без цензуры, Олег Царёв (Mail.ru Group)
Асинхронная репликация без цензуры, Олег Царёв (Mail.ru Group)Асинхронная репликация без цензуры, Олег Царёв (Mail.ru Group)
Асинхронная репликация без цензуры, Олег Царёв (Mail.ru Group)Ontico
 
Выступление Сергея Аверина, Badoo, на High Performance Conference
Выступление Сергея Аверина, Badoo, на High Performance ConferenceВыступление Сергея Аверина, Badoo, на High Performance Conference
Выступление Сергея Аверина, Badoo, на High Performance ConferenceEYevseyeva
 
Не все базы данных одинаково полезны
Не все базы данных одинаково полезныНе все базы данных одинаково полезны
Не все базы данных одинаково полезныSergey Xek
 
Не все базы данных одинаково полезны
Не все базы данных одинаково полезныНе все базы данных одинаково полезны
Не все базы данных одинаково полезныSergey Xek
 
Опыт эксплуатации большого проекта на Ruby
Опыт эксплуатации большого проекта на RubyОпыт эксплуатации большого проекта на Ruby
Опыт эксплуатации большого проекта на RubyAlex Chistyakov
 
Распространенные ошибки применения баз данных (Сергей Аверин)
Распространенные ошибки применения баз данных (Сергей Аверин)Распространенные ошибки применения баз данных (Сергей Аверин)
Распространенные ошибки применения баз данных (Сергей Аверин)Ontico
 
High load2007 scaling-web-applications-rus
High load2007 scaling-web-applications-rusHigh load2007 scaling-web-applications-rus
High load2007 scaling-web-applications-rusVladd Ev
 
Распространенные ошибки применения баз данных (Сергей Аверин)
Распространенные ошибки применения баз данных (Сергей Аверин)Распространенные ошибки применения баз данных (Сергей Аверин)
Распространенные ошибки применения баз данных (Сергей Аверин)Ontico
 
Распространенные ошибки применения баз данных
Распространенные ошибки применения баз данныхРаспространенные ошибки применения баз данных
Распространенные ошибки применения баз данныхSergey Xek
 
Оптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на JavaОптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на JavaAlex Chistyakov
 
Open source субд глазами обычного программиста
Open source субд глазами обычного программистаOpen source субд глазами обычного программиста
Open source субд глазами обычного программистаSlach
 
Highload 2014. PostgreSQL: ups, DevOps.
Highload 2014. PostgreSQL: ups, DevOps.Highload 2014. PostgreSQL: ups, DevOps.
Highload 2014. PostgreSQL: ups, DevOps.Alexey Lesovsky
 
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)Ontico
 
Мастер-класс про организацию службы эксплуатации
Мастер-класс про организацию службы эксплуатацииМастер-класс про организацию службы эксплуатации
Мастер-класс про организацию службы эксплуатацииNikolay Sivko
 
История небольшого успеха с PostgreSQL – Владимир Бородин
История небольшого успеха с PostgreSQL – Владимир БородинИстория небольшого успеха с PostgreSQL – Владимир Бородин
История небольшого успеха с PostgreSQL – Владимир БородинYandex
 
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)Nikolay Samokhvalov
 
Как SRE следит за стабильностью и скоростью HeadHunter / Антон Иванов (HeadHu...
Как SRE следит за стабильностью и скоростью HeadHunter / Антон Иванов (HeadHu...Как SRE следит за стабильностью и скоростью HeadHunter / Антон Иванов (HeadHu...
Как SRE следит за стабильностью и скоростью HeadHunter / Антон Иванов (HeadHu...Ontico
 
PostgreSQL performance recipes
PostgreSQL performance recipesPostgreSQL performance recipes
PostgreSQL performance recipesAlexey Ermakov
 
Пётр Зайцев, Percona
Пётр Зайцев, PerconaПётр Зайцев, Percona
Пётр Зайцев, PerconaOntico
 

Similar to Диагностика postgresql для системного администратора (20)

Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...
Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...
Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...
 
Асинхронная репликация без цензуры, Олег Царёв (Mail.ru Group)
Асинхронная репликация без цензуры, Олег Царёв (Mail.ru Group)Асинхронная репликация без цензуры, Олег Царёв (Mail.ru Group)
Асинхронная репликация без цензуры, Олег Царёв (Mail.ru Group)
 
Выступление Сергея Аверина, Badoo, на High Performance Conference
Выступление Сергея Аверина, Badoo, на High Performance ConferenceВыступление Сергея Аверина, Badoo, на High Performance Conference
Выступление Сергея Аверина, Badoo, на High Performance Conference
 
Не все базы данных одинаково полезны
Не все базы данных одинаково полезныНе все базы данных одинаково полезны
Не все базы данных одинаково полезны
 
Не все базы данных одинаково полезны
Не все базы данных одинаково полезныНе все базы данных одинаково полезны
Не все базы данных одинаково полезны
 
Опыт эксплуатации большого проекта на Ruby
Опыт эксплуатации большого проекта на RubyОпыт эксплуатации большого проекта на Ruby
Опыт эксплуатации большого проекта на Ruby
 
Распространенные ошибки применения баз данных (Сергей Аверин)
Распространенные ошибки применения баз данных (Сергей Аверин)Распространенные ошибки применения баз данных (Сергей Аверин)
Распространенные ошибки применения баз данных (Сергей Аверин)
 
High load2007 scaling-web-applications-rus
High load2007 scaling-web-applications-rusHigh load2007 scaling-web-applications-rus
High load2007 scaling-web-applications-rus
 
Распространенные ошибки применения баз данных (Сергей Аверин)
Распространенные ошибки применения баз данных (Сергей Аверин)Распространенные ошибки применения баз данных (Сергей Аверин)
Распространенные ошибки применения баз данных (Сергей Аверин)
 
Распространенные ошибки применения баз данных
Распространенные ошибки применения баз данныхРаспространенные ошибки применения баз данных
Распространенные ошибки применения баз данных
 
Оптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на JavaОптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на Java
 
Open source субд глазами обычного программиста
Open source субд глазами обычного программистаOpen source субд глазами обычного программиста
Open source субд глазами обычного программиста
 
Highload 2014. PostgreSQL: ups, DevOps.
Highload 2014. PostgreSQL: ups, DevOps.Highload 2014. PostgreSQL: ups, DevOps.
Highload 2014. PostgreSQL: ups, DevOps.
 
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
 
Мастер-класс про организацию службы эксплуатации
Мастер-класс про организацию службы эксплуатацииМастер-класс про организацию службы эксплуатации
Мастер-класс про организацию службы эксплуатации
 
История небольшого успеха с PostgreSQL – Владимир Бородин
История небольшого успеха с PostgreSQL – Владимир БородинИстория небольшого успеха с PostgreSQL – Владимир Бородин
История небольшого успеха с PostgreSQL – Владимир Бородин
 
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
 
Как SRE следит за стабильностью и скоростью HeadHunter / Антон Иванов (HeadHu...
Как SRE следит за стабильностью и скоростью HeadHunter / Антон Иванов (HeadHu...Как SRE следит за стабильностью и скоростью HeadHunter / Антон Иванов (HeadHu...
Как SRE следит за стабильностью и скоростью HeadHunter / Антон Иванов (HeadHu...
 
PostgreSQL performance recipes
PostgreSQL performance recipesPostgreSQL performance recipes
PostgreSQL performance recipes
 
Пётр Зайцев, Percona
Пётр Зайцев, PerconaПётр Зайцев, Percona
Пётр Зайцев, Percona
 

Диагностика postgresql для системного администратора

  • 1. Диагностика postgresql c точки зрения системного администратора Николай Сивко okmeter.io
  • 2. Кто говорит • Очень долго работал админом • Руководил эксплуатацией в hh.ru • Основал и работаю в okmeter.io – сервис мониторинга
  • 4. Проблема • Для хорошего uptime нужно понимать, как работает каждый компонент вашей инфраструктуры • БД обычно самый сложный компонент, непросто масштабируется, непросто добиться отказоустойчивости • Лучше если БД управляют профессиональные DBA, но это доступно не всем проектам • По верхам понимать, как работает БД нужно любому админу
  • 5. Что хочет знать админ • БД для остального проекта – ресурс: работает ли он штатно или есть проблемы? • БД потребляет ресурсы сервера: - на что тратятся ресурсы? - пора добавлять или можно как-то снизить? - какой именно запрос просить ускорить?
  • 6. Не затронем: • Backup/restore • Репликацию • Оптимизацию запросов
  • 7. Как сейчас работает БД • Работа БД – выполнять запросы • Время выполнения очень хороший показатель: - если уперлись в ресурсы: время растет - появились тяжелые запросы: уперлись в ресурсы ->время растет - ждем на блокировках: время растет - пропали запросы: время падает (запросы от мониторинга быстрые)
  • 8. Время выполнения запросов • pg_stat_activity – мгновенный снимок всех исполняющихся запросов extract(epoch from (now()-xact_start)) – время в текущем состоянии (active, idle in transaction) • pg_stat_statements – счетчики по завершенным запросам total_time – кумулятивная сумма времен выполнения запроса • Сниффинг сети между клиентами и pg
  • 9. Смотрим по pg_stat_statements • Время выполнения запроса обычно ~1ms, получить полную картину периодическими запросами в pg_stat_activity нереально • По pg_stat_statements мы к сожалению не можем посчитать гистограмму, придется смотреть на среднее [rate(total_time)/rate(calls)] • Для общей картины смотрим на суммарное среднее: [sum(rate(total_time))/sum(rate(calls))]
  • 10. Среднее плохо. Но видно же аномалию?
  • 11. Среднее по-прежнему плохо • Любая аномалия (выброс/провал) на среднем не обязательно проблема НО • Скорее всего любую проблему будет видно на среднем!
  • 14. Как работает БД? • Однозначно сложно сказать • По 3-4 графикам можно понять • Хорошо бы иметь гистограмму, тогда было бы проще:
  • 15. Если проблема есть • Что с ресурсами: CPU, disk, net? • Может их съел какой-то другой процесс? • Ресурсов стало меньше (деградация сервера)
  • 19. Ресурсы изнутри postgresql • Убедились, что потребляет сам PG • Хотим больше конкретики: запросы/таблицы/индексы
  • 20. Ресурсы: cpu • Будем считать, что total_query_time = disk_wait_time + cpu_time • Это вранье, если - существенное время ожидаем блокировок – потребляем меньше CPU - parallel query (9.6+) – потребляем больше CPU
  • 21. Ресурсы: cpu • Не нужно смотреть на “медленные” запросы, когда говорим про ресурсы • Правильно смотреть на сумму времени
  • 23. CPU: нужно исключить блокировки • Выбросы на cpu_time могут быть из-за локов • Перепроверяем по pg_stat_activity • pg_stat_activity + pg_locks: можем узнать, кто залочил и кто ждет
  • 24. Ресурсы: диск.чтение • shared_blks_read: чтение страниц с диска в случае buffer cache miss (до диска дойдет, если будет еще page cache miss) • local_blks_read: чтение данных временных таблиц • temp_blks_read: чтение временных файлов (когда для запроса нужно больше памяти, чем work_mem)
  • 25. Сложности мониторинга диска • Процесс делает системный вызов read() • Он отражается в /proc/<pid>/io • Но до диска может не дойти, если прочитался из page cache • С другой стороны в /proc/<pid>/io попадает например чтение из stdin
  • 26. Диск: кто грузит по чтению?
  • 27. Диск: кто грузит по чтению?
  • 28. Диск: blks_read VS templ_blks_read
  • 29. Диск: blks_read VS templ_blks_read • Разные запросы: нужно видеть и одни и другие • Чиним по-разному: - heap: добавляем памяти/меняем запрос/перекладываем данные по-другому/ускоряем дисковую подсистему - temp: увеличиваем work_mem/меняем запрос/переносим на аналитическую реплику
  • 30. Ресурсы: диск.запись • WAL • Синхронизация “грязных” страниц • Временные файлов • Запись временных таблиц
  • 31. Ресурсы: диск.запись • Любые изменения “пачкают” страницы и записываются в WAL • Можем ориентироваться только по dirty pages • Запись “грязных” страниц на диск не синхронна • Пишет или backend или checkpointer или bgwriter
  • 32. Диск: dirty pages - checkpointer
  • 34. WTF: SELECT пачкает страницы?
  • 35. WTF: SELECT пачкает страницы?
  • 36. WTF: SELECT пачкает страницы?!?! • INSERT в транзакции txid1 -> tuple (t_xmin=txid1) • SELECT не знает завершилась ли txid1 (commited/aborted) - Идем в CLOG узнавать статус txid1 (это достаточно дорого) - Если txid1 завершена, сохраняем hint bits в tuple (t_infomask) - Помечаем страницу как “грязную”
  • 37. А ещё SELECT может вызывать синхронную запись
  • 38. SELECT может вызывать запись • Если при чтении нам нужно прочитать страницу, которой нет в buffer cache, мы читаем ее с диска • Если в buffer cache нет свободного места, нужно что-то вытеснить • Если кандидат на вытеснение помечен как dirty, мы его пишем на диск
  • 39. Ресурсы: сеть • PG не предоставляет информацию по количество результирующих байт по запросу • Можно очень примерно посчитать по pg_stat_statements.rows
  • 40. Итого: • Нужно хорошо понимать, как PG работает с ресурсами сервера • Осознавать физический смысл метрик, на которые вы смотрите • Обязательно нужно объяснять для себя найденные аномалии, это позволит полностью разобраться c деталями реализации той или иной подсистемы