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

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

Проанализировать причины инцидента производительности СУБД . Выявить и оптимизировать SQL-запросы влияющие на снижение производительности СУБД. Свыше 80% ожиданий: DataFileRead 80% ожиданий: Наибольшее количество ожиданий типа IPC по SQL c queryid = -5849488707035427374 80% ожиданий: Наибольшее количество ожиданий типа IPC по SQL c queryid = -5849488707035427374 -- Для фильтрации table1 CREATE INDEX CONCURRENTLY col1x_succession_plan_filter ON "table1" ("col2") WHERE "col8" IS NULL AND "col9" IS NULL; -- Для соединения с col7 CREATE INDEX CONCURRENTLY col1x ON "col7" ("table1col1", "col8", "col4"); -- Для связи с table2 CREATE INDEX CONCURRENTLY col1x ON "table1" ("table2col1"); CREATE TEMP TABLE temp_tables (col2 BIGINT); INSERT INTO temp_tables VALUES (Y1), (Y2), ...; -- все значения -- Затем в основном запросе: WITH filtered_tables AS ( SELECT ... FROM "table1" sp JOIN temp_tables pt ON sp."col2" = pt.col2 WHERE ... )
Оглавление
Оптимизировать можно до бесконечности.
Оптимизировать можно до бесконечности.

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

Задача

Проанализировать причины инцидента производительности СУБД . Выявить и оптимизировать SQL-запросы влияющие на снижение производительности СУБД.

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

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

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

-3
-4

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

-5

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

-6

Свыше 80% ожиданий: DataFileRead

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

SQL-запросы с количеством ожиданий типа IO >= 10
SQL-запросы с количеством ожиданий типа IO >= 10

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

-8

80% ожиданий:

  • BgWorkerShutdown
  • ParallelFinish
  • ExecuteGather

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

SQL-запросы с количеством ожиданий типа IPC >= 10
SQL-запросы с количеством ожиданий типа IPC >= 10

Наибольшее количество ожиданий типа IPC по SQL c queryid = -5849488707035427374

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

-10

80% ожиданий:

  • BufferMapping
  • ParallelHashJoin
  • LockManager

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

SQL-запросы с количеством ожиданий типа LWLock >= 10
SQL-запросы с количеством ожиданий типа LWLock >= 10

Наибольшее количество ожиданий типа IPC по SQL c queryid = -5849488707035427374

SQL-запрос для оптимизации: -5849488707035427374

-12

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

-13

Возможный вариант оптимизации SQL-запроса

1. Добавить индексы

-- Для фильтрации table1
CREATE INDEX CONCURRENTLY col1x_succession_plan_filter
ON "table1" ("col2")
WHERE "col8" IS NULL AND "col9" IS NULL;
-- Для соединения с col7
CREATE INDEX CONCURRENTLY col1x
ON "col7" ("table1col1", "col8", "col4");
-- Для связи с table2
CREATE INDEX CONCURRENTLY col1x
ON "table1" ("table2col1");

2. Переписать запрос с использованием CTE

-14

3. Оптимизация работы с IN

CREATE TEMP TABLE temp_tables (col2 BIGINT);
INSERT INTO temp_tables VALUES (Y1), (Y2), ...; -- все значения
-- Затем в основном запросе:
WITH filtered_tables AS (
SELECT ...
FROM "table1" sp
JOIN temp_tables pt ON sp."col2" = pt.col2
WHERE ...
)