我正在尝试提高一个长时间运行的plpgsql存储过程的性能,但是我不知道有什么性能分析工具,如果有的话,谁能提供一些关于如何分析这样一个过程的建议?
2vuwiymt1#
从包含clock_timestamp()的过程中调用一些notices,以查看数据库在哪里花费时间,并使过程尽可能简单。你能给我们举个例子吗?
r7s23pms2#
我们目前正在寻找这个问题的更好答案,并偶然发现了这个工具:http://www.openscg.com/2015/02/postgresql-plpgsql-profiler/托管地址:https://bitbucket.org/openscg/plprofiler它声称能给予你所需要的信息,包括函数每一行所花费的总时间,我们还没有进一步的研究,但是基于作者的说法,我们是乐观的。
insrf1ej3#
首先,你可以打开Postgres日志文件中所有语句的日志记录,日志中包含每条语句的运行时间,这样你就可以识别出最慢的查询并尝试优化它们。但是阅读了你对Frank帖子的评论,我猜你的问题是循环。试着摆脱循环,在一个查询中做所有的事情。一个语句读很多行通常比很多语句只读几行更有效。
qcuzuvrc4#
尝试使用pg_stat_statements扩展(http://www.postgresql.org/docs/9.2/static/pgstatstatements.html)。它可以显示所有语句(包括plpgsql过程中的子语句)的调用次数和总调用时间。
tf7tbtn25#
要使用的工具是https://github.com/bigsql/plprofiler如果您使用PGDG yum存储库安装PostgreSQL,那么安装非常简单,只需运行以下命令(仅适用于PostgreSQL版本11及更高版本--用您的版本号替换XX):
yum install plprofiler_XX-server plprofiler_XX-client plprofiler_XX
然后将Profiler扩展添加到数据库中:
CREATE EXTENSION plprofiler;
然后,要生成plpgsql函数的概要报告,请运行如下命令:
plprofiler run -U your_username -d your_database --command "SELECT * FROM your_custom_plpgsql_function()" --output profile.html
5条答案
按热度按时间2vuwiymt1#
从包含clock_timestamp()的过程中调用一些notices,以查看数据库在哪里花费时间,并使过程尽可能简单。
你能给我们举个例子吗?
r7s23pms2#
我们目前正在寻找这个问题的更好答案,并偶然发现了这个工具:http://www.openscg.com/2015/02/postgresql-plpgsql-profiler/托管地址:https://bitbucket.org/openscg/plprofiler
它声称能给予你所需要的信息,包括函数每一行所花费的总时间,我们还没有进一步的研究,但是基于作者的说法,我们是乐观的。
insrf1ej3#
首先,你可以打开Postgres日志文件中所有语句的日志记录,日志中包含每条语句的运行时间,这样你就可以识别出最慢的查询并尝试优化它们。
但是阅读了你对Frank帖子的评论,我猜你的问题是循环。试着摆脱循环,在一个查询中做所有的事情。一个语句读很多行通常比很多语句只读几行更有效。
qcuzuvrc4#
尝试使用pg_stat_statements扩展(http://www.postgresql.org/docs/9.2/static/pgstatstatements.html)。它可以显示所有语句(包括plpgsql过程中的子语句)的调用次数和总调用时间。
tf7tbtn25#
要使用的工具是https://github.com/bigsql/plprofiler
如果您使用PGDG yum存储库安装PostgreSQL,那么安装非常简单,只需运行以下命令(仅适用于PostgreSQL版本11及更高版本--用您的版本号替换XX):
然后将Profiler扩展添加到数据库中:
然后,要生成plpgsql函数的概要报告,请运行如下命令: