Logging Difficult Queries/ru
Чтобы найти наиболее медленные запросы в вашей системе, можно воспользоваться настройкой log_min_duration_statement, установив значение, выраженное в миллисекундах, по истечению которого запрос попадает в лог. Начиная с версии PostgreSQL 8.4 также можно воспользоваться pg_stat_statements не прибегая к сторонним инструментам.
Некоторые утилиты анализа данных лога:
- pgBadger - см. Статьи
- pgFouine. В его документации даются несколько подсказок по log_min_duration_statement и ему подобным параметрам
- PQA
- EPQA
- pgsi - см. Введение
При применении этих инструментов можно выставить минимальное значение в ноль для фиксации всех запросов. Это приведет к интенсивному логгированию, однако, позволит получить полную картину происходящего на сервере.
Контрольные точки могут останавливать запросы до нескольких секунд. Если наблюдаются запросы, выполняющиеся по несколько секунд и при этом завершающиеся в одно и то же время, обратитесь к логгированию контрольных точек. Если выяснится, что они выстраиваются в очередь, стоит поиграться с настройками.
auto-explain
Для PostgreSQL существует модуль Auto-Explain, сохраняющий планы выполнения запросов, превышающих заданный временной порог при выполнении. Полученные планы могут помочь в обнаружении причин медленного выполнения проблемных запросов. См. Waiting for 8.4 - auto-explain, например.