PostgreSQL profiling

Профилирование хранимых процедур в PostgreSQL не является тривиальной задачей. Сложность заключается в том, что в журнал попадает обобщенное время выполнения хранимой процедуры. Таким образом, если Ваша хранимая процедура вызывает какие-то запросы или другие хранимые процедуры, в журнал попадет исключительно суммарное время выполнения.

Что касается трассировки выполнения вложенных в процедуру вызовов других функций, существенно облегчить задачку может установка переменной track_functions в значение pl. Например,

SET track_functions TO pl;

После вызова желаемой функции в таблице pg_stat_user_functions будет суммарная статистика о ней.

Для более детального профилирования можно воспользоваться RAISE LOG или модулем log_functions. О использовании первого очень подробно рассказывается в руководстве PROFILING STORED PROCEDURES/FUNCTIONS, второго — Profiling PL/pgsql functions. Для второго подхода потребуется собрать дополнительный модуль для PostgreSQL. Однако у него есть и неоспоримое преимущество — он не потребует модификации исходной хранимой процедуры, что обязательно потребуется в случае использования RAISE LOG.