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

PG_HAZEL : Анализ инцидента производительности СУБД PostgreSQL , поиск и оптимизация проблемных SQL-запросов.

Продолжение анализа производительности для той же СУБД . 80% ожиданий: Текст запроса содержит параметр, поэтому для анализа возможных вариантов оптимизации придется воспользоваться планом выполнения запроса, полученному из отчетов pgpro_pwr: Основная проблема - "декартово произведение" из-за нескольких LEFT JOIN.
Оглавление
Кто хочет — тот добьется, Кто ищет — тот всегда найдет!
Кто хочет — тот добьется, Кто ищет — тот всегда найдет!

Аналогичная задача

Продолжение анализа производительности для той же СУБД .

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

Дашборд Zabbix
Дашборд Zabbix

Операционная скорость и ожидания СУБД

-3
-4

Корреляция и ожидания СУБД

-5
-6
-7

Ожидания типа IPC

-8

80% ожиданий:

  • BgWorkerShutdown
  • ParallelFinish
  • ExecuteGather

Ожидания типа IPC по SQL-запросам

-9

Следующий SQL-запрос для оптимизации : -1701015661318396920

-10

Текст запроса содержит параметр, поэтому для анализа возможных вариантов оптимизации придется воспользоваться планом выполнения запроса, полученному из отчетов pgpro_pwr:

  • pgpro_pwr_queryid: e864c744b5bda408
  • plan_id: b8b72054c691886a

План выполнения запроса

-11

Возможная оптимизация SQL-запроса

1. Оптимизация структуры запроса

Основная проблема - "декартово произведение" из-за нескольких LEFT JOIN.

-12

2. Добавление недостающих индексов

-13

3. Оптимизация текущего запроса

-14

4. Настройка PostgreSQL

-15

Возможный план оптимизации

  1. Добавление индекса для plans_table4 - это самое слабое место в текущем плане
  2. Разделить запрос на несколько - это даст наибольший прирост производительности
  3. Использование агрегацию через JSON, если нужны все данные в одной строке
  4. Настройка параметров СУБД