我正在尝试提高长期运行的plpgsql存储过程的性能,但我不知道有什么(如果有的话)分析工具可用。任何人都可以提供有关如何分析此类程序的建议吗?
答案 0 :(得分:5)
从包含notices的过程中提取一些clock_timestamp(),以查看数据库花费时间的位置。并使程序尽可能简单。
你能告诉我们一个例子吗?
答案 1 :(得分:2)
我们目前正在寻找这个问题的更好答案,并且偶然发现了这个工具: http://www.openscg.com/2015/02/postgresql-plpgsql-profiler/ 主持人: https://bitbucket.org/openscg/plprofiler
它声称可以为您提供所需内容,包括在每个功能线上花费的总时间。我们还没有进一步调查,但根据作者的说法,我们很乐观。
答案 2 :(得分:1)
首先,您可以将logging of all statements打开到Postgres日志文件中。日志将包含每个语句的运行时。这样,您可以识别最慢的查询并尝试优化它们。
但是阅读你对弗兰克的帖子的评论我猜想循环是你的问题。尝试摆脱循环并在单个查询中执行所有操作。一条读取大量行的语句通常比只读几行的语句更有效。
答案 3 :(得分:1)
尝试使用pg_stat_statements扩展名(http://www.postgresql.org/docs/9.2/static/pgstatstatements.html)。 它可以显示所有语句的呼叫号码和总呼叫时间(包括plpgsql过程中的子语句)。