我正在尝试提高一个长时间运行的plpgsql存储过程的性能,但我不知道是否有任何可用的分析工具。请问有人可以提供关于如何进行此类过程分析的建议吗?
我正在尝试提高一个长时间运行的plpgsql存储过程的性能,但我不知道是否有任何可用的分析工具。请问有人可以提供关于如何进行此类过程分析的建议吗?
从包括 clock_timestamp() 的过程中提取一些notices,以查看数据库花费时间的位置。并尽可能简化过程。
你能给我们展示一个例子吗?
首先,您可以在Postgres日志文件中打开所有语句的记录。日志将包含每个语句的运行时间。这样,您就可以识别最慢的查询并尝试优化它们。
但是根据您对Frank帖子的评论,我猜循环可能是您的问题所在。尝试摆脱循环,并在单个查询中完成所有操作。一条读取大量行的语句通常比许多仅读取少量行的语句更有效率。
使用的工具是https://github.com/bigsql/plprofiler
如果您使用PGDG yum存储库安装了PostgreSQL,则安装plprofiler
非常简单,只需运行下面的命令,但请记住它仅适用于PostgreSQL 11及更高版本(将XX替换为您的版本号):
yum install plprofiler_XX-server plprofiler_XX-client plprofiler_XX
然后将分析器扩展添加到您的数据库中:
CREATE EXTENSION plprofiler;
然后要在 plpgsql 函数上生成一个配置文件报告,运行如下命令:
plprofiler run -U your_username -d your_database --command "SELECT * FROM your_custom_plpgsql_function()" --output profile.html