Чтобы найти топ-100 самых долгих запросов в PostgreSQL, можно воспользоваться системными представлениями pg_stat_statements
или pg_stat_activity
.
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; |
Что делает этот запрос?
total_time
).mean_time
– среднее время выполнения.max_time
– самое долгое выполнение.calls
– сколько раз запрос выполнялся.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; |
Этот запрос показывает:
duration
– время выполнения запроса.state
– статус запроса (например, active
или idle in transaction
).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.
SELECT pid, query, now() - query_start AS duration FROM pg_stat_activity WHERE state = 'active' AND now() - query_start > interval '10 seconds' ORDER BY duration DESC; |
pg_stat_statements
:SELECT pg_stat_statements_reset(); |
Данную информацию необходимо будет выгрузить в отдельный файл (.CSV), и передать на анализ
в Отдел сопровождения и внедрения IQStore: support@iqstore.ru