Как профилировать процедуры plpgsql - PullRequest
7 голосов
/ 08 февраля 2011

Я пытаюсь улучшить производительность длительной хранимой процедуры plpgsql, но не знаю, какие инструменты профилирования доступны, если таковые имеются.Кто-нибудь может предложить предложения по профилированию такой процедуры?

Ответы [ 4 ]

5 голосов
/ 08 февраля 2011

Вызовите уведомлений из процедуры, включая clock_timestamp () , чтобы увидеть, где база данных тратит время.И сделайте процедуры максимально простыми.

Не могли бы вы показать нам пример?

2 голосов
/ 01 июня 2015

В настоящее время мы ищем лучший ответ на этот вопрос, и наткнулись на этот инструмент: http://www.openscg.com/2015/02/postgresql-plpgsql-profiler/ Размещено в: https://bitbucket.org/openscg/plprofiler

Он утверждает, что дает вам то, что вы ищетевключая общее время, потраченное на каждую строку функции.Мы еще не исследовали его, но, основываясь на утверждениях автора, мы настроены оптимистично.

1 голос
/ 09 октября 2013

Попробуйте использовать расширение pg_stat_statements (http://www.postgresql.org/docs/9.2/static/pgstatstatements.html).Он может показывать номер вызова и общее время вызова для всех операторов (включая вложенные операторы в процедурах plpgsql).

1 голос
/ 08 февраля 2011

Для начала вы можете включить запись всех операторов в файл журнала Postgres. Журнал будет содержать время выполнения для каждого оператора. Таким образом, вы можете определить самые медленные запросы и попытаться оптимизировать их.

Но, читая ваш комментарий к посту Фрэнка, я думаю, что зацикливание - ваша проблема. Попробуйте избавиться от зацикливания и сделать все за один запрос. Один оператор, который читает много строк, обычно более эффективен, чем множество операторов, которые читают только несколько строк.

...