Чтобы найти топ-100 самых долгих запросов в PostgreSQL, можно воспользоваться системными представлениями pg_stat_statements или pg_stat_activity.

Способ 1: Использование pg_stat_statements (Рекомендуется)

Если в PostgreSQL включен модуль pg_stat_statements, то можно выполнить следующий SQL-запрос:

SELECT query,
       calls,
       total_time,
       mean_time,
       max_time
FROM pg_stat_statements
ORDER BY total_time DESC
LIMIT 100;


Что делает этот запрос?


Способ 2: Мониторинг текущих долгих запросов (pg_stat_activity)

Если pg_stat_statements не включен, можно посмотреть активные запросы, которые выполняются прямо сейчас:

SELECT pid,
       age(clock_timestamp(), query_start) AS duration,
       state,
       query
FROM pg_stat_activity
WHERE state != 'idle'
ORDER BY duration DESC
LIMIT 100;


Этот запрос показывает:

Как включить pg_stat_statements, если он отключен?

Если первый запрос не работает, то нужно включить расширение:

CREATE EXTENSION IF NOT EXISTS pg_stat_statements;				

А затем добавить в postgresql.conf:

shared_preload_libraries = 'pg_stat_statements'
pg_stat_statements.track = all        

После этого нужно перезапустить PostgreSQL.

Дополнительная информация:

Данную информацию необходимо будет выгрузить в отдельный файл (.CSV), и передать на анализ
в Отдел сопровождения и внедрения IQStore: support@iqstore.ru