Найти в Дзене
Postgres DBA

PG_HAZEL + vmstat/iostat + DeepSeek: анализ инцидента производительности СУБД PostgreSQL.

Оглавление
Синергетика
Синергетика

Задача

Провести комплексный анализ состояния СУБД и инфраструктуры в ходе анализа инцидента производительности СУБД .

  1. Состояние инфраструктуры и метрики vmstat/iostat
  2. Корреляционный анализ ожиданий СУБД
  3. Семантический анализ причин ожиданий СУБД и SQL запросов

Инцидент снижения производительности СУБД

-2
-3

1.Состояние инфраструктуры

1.1 Предаварийные ситуации - отсутствуют

-4

1.2 Корреляция ожиданий СУБД и метрик vmstat

-5

1.3.1 Аномальные значения статистики iostat для файловой системы /data

-6

1.3.2 Аномальные значения статистики iostat для файловой системы /wal

-7

1.4 Чек-лист IO - ОК

-8

1.5 Чек-лист CPU-ALARM

-9

1.6 Чек-лист RAM - ALARM

-10

2.Корреляционный анализ ожиданий СУБД

-11

2.1 80% события ожидания по wait_event_type

-12
-13
-14

2.2 80% SQL запросы по wait_event_type

-15
-16
-17

3. Семантический анализ ожиданий СУБД и SQL запросов, вызывающих ожидания.

3.1.1 Сводная таблица мероприятий по оптимизации ожиданий типа IO

-18

Ключевые рекомендации:

  1. Профилактика операций на диске - объединяет настройку памяти и оптимизацию индексов
  2. Сокращение объема обрабатываемых данных - связывает партиционирование и борьбу с вздутием
  3. Регулярное обслуживание - автовакуум и операции VACUUM/ANALYZE направлены на поддержание здоровья БД
  4. Аппаратные и архитектурные решения - масштабирование ресурсов и репликация как крайние меры оптимизации

3.1.2 Анализ SQL-запросов, вызывающих ожидания типа IO

-19

Детализация по QueryID

Наиболее сложный запрос: 2319015528872418680

Этот запрос демонстрирует наибольшее разнообразие паттернов:

-20

Ключевые особенности самого сложного запроса:

  • Множественные JOIN операции (4 таблицы)
  • Сложная ORDER BY с несколькими полями и указанием направления сортировки
  • Использование DESC NULLS LAST для управления сортировкой NULL значений
  • Комплексная выборка с смешанными INNER и LEFT JOIN
  • Глубокая вложенность связей между сущностями

Выводы:
Преобладают запросы на чтение с сложными JOIN и условиями фильтрации. Наиболее ресурсоемкими являются запросы с рекурсивными CTE и множественными JOIN, которые требуют особого внимания при оптимизации производительности.

3.2.1 Сводная таблица мероприятий по оптимизации ожиданий типа IPC

-21

Ключевые рекомендации:

  1. Параллельные операции - объединяет все три типа ожиданий
  2. Системные ресурсы - CPU, I/O и память критичны для всех сценариев
  3. Анализ планов запросов - необходимость использования EXPLAIN ANALYZE для диагностики
  4. Балансировка нагрузки - поиск оптимального уровня параллелизма

Особенности каждого типа ожиданий:

  • BgWorkerShutdown: Связано с завершением фоновых процессов, часто вызвано отсутствием индексов
  • ExecuteGather: Координация параллельных запросов, требует балансировки количества воркеров
  • ParallelFinish: Фаза завершения параллельных операций, чувствительна к настройкам стоимости параллелизма

Общий вывод: Все три типа ожиданий требуют комплексного подхода - от анализа конкретных запросов до настройки системных параметров PostgreSQL и мониторинга ресурсов сервера.

3.2.2 Анализ SQL-запросов, вызывающих ожидания типа IPC

-22

Статистика паттернов:

  • JOIN операции: 5 запросов (62.5%)
  • WHERE с IN условиями: 8 запросов (100%)
  • ORDER BY: 2 запроса (25%)
  • LIMIT: 1 запрос (12.5%)
  • CTE: 1 запрос (12.5%)
  • Агрегатные функции: 2 запроса (25%)
  • Оконные функции: 1 запрос (12.5%)
  • Подзапросы: 1 запрос (12.5%)
  • Выборка всех полей: 1 запрос (12.5%)

Ключевые особенности наиболее сложного запроса: -678327810318891437

Этот запрос демонстрирует наибольшее разнообразие паттернов:

-23

Уникальные особенности:

  1. Многоуровневые CTE - два независимых Common Table Expression
  2. Оконные функции - row_number() OVER (PARTITION BY $1)
  3. Сложная агрегация - array_agg() для сбора результатов в массив
  4. Вложенные подзапросы - подзапрос в условии WHERE
  5. Множественные JOIN - сложные соединения таблиц
  6. Логические условия - комбинация OR с подзапросом
  7. Работа с массивами - использование unnest() для работы с составными идентификаторами

Вывод: Наиболее проблемные запросы с IPC ожиданиями характеризуются сложными JOIN операциями и условиями фильтрации с IN. Запрос -678327810318891437 является наиболее ресурсоемким из-за комбинации CTE, оконных функций и сложной логики агрегации, что делает его основным кандидатом для оптимизации.

3.3.1 Сводная таблица мероприятий по оптимизации ожиданий типа LWLock

-24

Ключевые рекомендации:

  1. Управление памятью - критически важно для всех типов LWLock ожиданий
  2. Анализ запросов - необходимость использования EXPLAIN ANALYZE для диагностики
  3. Профилактика конкуренции - снижение конфликтов за ресурсы
  4. Регулярное обслуживание - поддержание статистики и борьба с раздутостью

Особенности каждого типа ожиданий:

  • ParallelHashJoin: Связано с параллельными хэш-соединениями, требует балансировки памяти и параллелизма
  • LockManager: Относится к менеджеру блокировок, требует оптимизации транзакций
  • BufferMapping: Связано с конкуренцией за буферный кэш, требует настройки памяти и индексов

Общий вывод: Все три типа LWLock ожиданий требуют комплексного подхода, начиная от настройки параметров памяти и заканчивая оптимизацией схемы БД и логики приложения. Ключевой принцип - балансировка ресурсов и снижение конкуренции.

3.3.2 Анализ SQL-запросов, вызывающих ожидания типа LWLock

-25

Статистика паттернов:

  • JOIN операции: 4 запроса (57%)
  • WHERE с IN условиями: 3 запроса (43%)
  • ORDER BY: 1 запрос (14%)
  • LIMIT: 1 запрос (14%)
  • SET операции: 1 запрос (14%)
  • DISCARD: 1 запрос (14%)
  • INSERT: 1 запрос (14%)
  • Сложные условия JOIN: 4 запроса (57%)

Ключевые особенности наиболее сложного запроса: -8182552260313222074

Этот запрос демонстрирует наибольшее разнообразие паттернов:

-26

Уникальные особенности:

  1. Смешанные типы JOIN - комбинация LEFT OUTER JOIN и INNER JOIN
  2. Сложная цепочка связей - соединение через промежуточные таблицы (ImprovementPlanGoalToCourse → goal → improvementPlan)
  3. Сортировка с ограничением - ORDER BY с LIMIT 200
  4. Условие диапазона - фильтрация по id > определенного значения
  5. Множественные псевдонимы - сложная структура алиасов с специальными символами
  6. Разнородные условия WHERE - комбинация проверки на NULL и числового сравнения

Вывод: Наиболее проблемные запросы с LWLock ожиданиями характеризуются сложными цепочками JOIN операций с смешанными типами соединений. Запрос -8182552260313222074 является наиболее ресурсоемким из-за комбинации множественных JOIN, сортировки и ограничения результатов, что делает его основным кандидатом для оптимизации при LWLock конфликтах.