Задача
Необходимо найти долговыполняющиеся запросы к базе данных.
Решение
Необходимо включить вывод в лог запросов, длительность которых больше заданной длительности.
Для этого в файле postgresql.conf необходимо установить следующие параметры:
log_duration = on # Включает логирование запросов log_min_duration_statement = 1 # Устанавливает минимальное время (в миллисекундах) выполнения запроса, который попадает в лог
и перезагрузить сервер:
sudo service postgresql restart
Теперь, в зависимости от настроек, запросы длительностью более 1 миллисекунды буду выводиться в лог:
# tail /var/log/postgresql/postgresql-9.1-main.log ... skip ... 2012-10-31 09:58:27 YEKT LOG: duration: 2.729 ms statement: select name, setting from pg_settings where name ilike '%log%';