【发布时间】:2011-02-08 16:33:55
【问题描述】:
我正在尝试提高长时间运行的 plpgsql 存储过程的性能,但我不知道有哪些可用的分析工具(如果有的话)。任何人都可以就如何分析这样的过程提供建议吗?
【问题讨论】:
标签: postgresql stored-procedures profiling plpgsql
我正在尝试提高长时间运行的 plpgsql 存储过程的性能,但我不知道有哪些可用的分析工具(如果有的话)。任何人都可以就如何分析这样的过程提供建议吗?
【问题讨论】:
标签: postgresql stored-procedures profiling plpgsql
从包括clock_timestamp() 在内的过程中引发一些notices 以查看数据库花费时间的位置。并使程序尽可能简单。
你能给我们举个例子吗?
【讨论】:
我们目前正在寻找这个问题的更好答案,并且偶然发现了这个工具: http://www.openscg.com/2015/02/postgresql-plpgsql-profiler/ 主办地点: https://bitbucket.org/openscg/plprofiler
它声称可以为您提供所需的内容,包括在函数的每一行上花费的总时间。我们还没有进一步调查,但根据作者的说法,我们是乐观的。
【讨论】:
首先,您可以在 Postgres 日志文件中打开 logging of all statements。日志将包含每个语句的运行时。通过这种方式,您可以识别最慢的查询并尝试优化它们。
但是阅读您对弗兰克帖子的评论,我猜想循环是您的问题。尝试摆脱循环并在单个查询中完成所有操作。一条读取大量行的语句通常比读取几行的大量语句更有效。
【讨论】:
尝试使用 pg_stat_statements 扩展(http://www.postgresql.org/docs/9.2/static/pgstatstatements.html)。 它可以显示所有语句(包括plpgsql过程中的子语句)的调用号和总调用时间。
【讨论】: