41
Диагностика postgresql c точки зрения системного администратора Николай Сивко okmeter.io

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

Embed Size (px)

Citation preview

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

Диагностика postgresqlc точки зрения системного администратораНиколай Сивкоokmeter.io

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

Кто говорит• Очень долго работал админом

• Руководил эксплуатацией в hh.ru

• Основал и работаю в okmeter.io – сервис мониторинга

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

Проблема

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

Проблема• Для хорошего uptime нужно понимать, как работает каждый

компонент вашей инфраструктуры

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

• Лучше если БД управляют профессиональные DBA, но это доступно не всем проектам

• По верхам понимать, как работает БД нужно любому админу

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

Что хочет знать админ• БД для остального проекта – ресурс: работает ли он

штатно или есть проблемы?

• БД потребляет ресурсы сервера: - на что тратятся ресурсы? - пора добавлять или можно как-то снизить? - какой именно запрос просить ускорить?

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

Не затронем:• Backup/restore

• Репликацию

• Оптимизацию запросов

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

Как сейчас работает БД• Работа БД – выполнять запросы

• Время выполнения очень хороший показатель: - если уперлись в ресурсы: время растет - появились тяжелые запросы: уперлись в ресурсы ->время растет - ждем на блокировках: время растет - пропали запросы: время падает (запросы от мониторинга быстрые)

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

Время выполнения запросов• pg_stat_activity – мгновенный снимок всех исполняющихся

запросов extract(epoch from (now()-xact_start)) – время в текущем состоянии (active, idle in transaction)

• pg_stat_statements – счетчики по завершенным запросам total_time – кумулятивная сумма времен выполнения запроса

• Сниффинг сети между клиентами и pg

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

Смотрим по pg_stat_statements• Время выполнения запроса обычно ~1ms, получить полную картину

периодическими запросами в pg_stat_activity нереально

• По pg_stat_statements мы к сожалению не можем посчитать гистограмму, придется смотреть на среднее

[rate(total_time)/rate(calls)]

• Для общей картины смотрим на суммарное среднее: [sum(rate(total_time))/sum(rate(calls))]

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

Среднее плохо. Но видно же аномалию?

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

Среднее по-прежнему плохо

• Любая аномалия (выброс/провал) на среднем не обязательно проблема

НО

• Скорее всего любую проблему будет видно на среднем!

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

Не пропали соединения?

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

Сколько запросов?

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

Как работает БД?• Однозначно сложно сказать• По 3-4 графикам можно понять• Хорошо бы иметь гистограмму, тогда было бы проще:

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

Если проблема есть• Что с ресурсами: CPU, disk, net?

• Может их съел какой-то другой процесс?

• Ресурсов стало меньше (деградация сервера)

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

Другой процесс?

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

Деградация сервера

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

Деградация сервера

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

Ресурсы изнутри postgresql• Убедились, что потребляет сам PG

• Хотим больше конкретики: запросы/таблицы/индексы

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

Ресурсы: cpu• Будем считать, что total_query_time = disk_wait_time + cpu_time

• Это вранье, если - существенное время ожидаем блокировок – потребляем меньше CPU - parallel query (9.6+) – потребляем больше CPU

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

Ресурсы: cpu• Не нужно смотреть на “медленные” запросы, когда говорим про

ресурсы

• Правильно смотреть на сумму времени

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

CPU: запросы

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

CPU: нужно исключить блокировки• Выбросы на cpu_time могут быть из-за локов• Перепроверяем по pg_stat_activity• pg_stat_activity + pg_locks: можем узнать, кто залочил и кто ждет

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

Ресурсы: диск.чтение• shared_blks_read: чтение страниц с диска в случае buffer cache

miss (до диска дойдет, если будет еще page cache miss)

• local_blks_read: чтение данных временных таблиц

• temp_blks_read: чтение временных файлов (когда для запроса нужно больше памяти, чем work_mem)

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

Сложности мониторинга диска• Процесс делает системный вызов read()

• Он отражается в /proc/<pid>/io

• Но до диска может не дойти, если прочитался из page cache

• С другой стороны в /proc/<pid>/io попадает например чтение из stdin

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

Диск: кто грузит по чтению?

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

Диск: кто грузит по чтению?

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

Диск: blks_read VS templ_blks_read

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

Диск: blks_read VS templ_blks_read• Разные запросы: нужно видеть и одни и другие

• Чиним по-разному: - heap: добавляем памяти/меняем запрос/перекладываем данные по-другому/ускоряем дисковую подсистему - temp: увеличиваем work_mem/меняем запрос/переносим на аналитическую реплику

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

Ресурсы: диск.запись• WAL

• Синхронизация “грязных” страниц

• Временные файлов

• Запись временных таблиц

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

Ресурсы: диск.запись• Любые изменения “пачкают” страницы и записываются в WAL

• Можем ориентироваться только по dirty pages

• Запись “грязных” страниц на диск не синхронна

• Пишет или backend или checkpointer или bgwriter

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

Диск: dirty pages - checkpointer

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

Диск: checkpointer – disk traffic

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

WTF: SELECT пачкает страницы?

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

WTF: SELECT пачкает страницы?

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

WTF: SELECT пачкает страницы?!?!

• INSERT в транзакции txid1 -> tuple (t_xmin=txid1)• SELECT не знает завершилась ли txid1 (commited/aborted) - Идем в CLOG узнавать статус txid1 (это достаточно дорого) - Если txid1 завершена, сохраняем hint bits в tuple (t_infomask) - Помечаем страницу как “грязную”

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

А ещё SELECT можетвызывать синхронную запись

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

SELECT может вызывать запись• Если при чтении нам нужно прочитать страницу, которой нет в

buffer cache, мы читаем ее с диска

• Если в buffer cache нет свободного места, нужно что-то вытеснить

• Если кандидат на вытеснение помечен как dirty, мы его пишем на диск

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

Ресурсы: сеть• PG не предоставляет информацию по количество

результирующих байт по запросу

• Можно очень примерно посчитать по pg_stat_statements.rows

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

Итого:• Нужно хорошо понимать, как PG работает с ресурсами сервера

• Осознавать физический смысл метрик, на которые вы смотрите

• Обязательно нужно объяснять для себя найденные аномалии, это позволит полностью разобраться c деталями реализации той или иной подсистемы

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

Спасибо за внимание!

Вопросы?Николай Сивко[email protected]