postgresql 如何分析plpgsql过程

r1zk6ea1  于 2022-12-26  发布在  PostgreSQL
关注(0)|答案(5)|浏览(151)

我正在尝试提高一个长时间运行的plpgsql存储过程的性能,但是我不知道有什么性能分析工具,如果有的话,谁能提供一些关于如何分析这样一个过程的建议?

2vuwiymt

2vuwiymt1#

从包含clock_timestamp()的过程中调用一些notices,以查看数据库在哪里花费时间,并使过程尽可能简单。
你能给我们举个例子吗?

r7s23pms

r7s23pms2#

我们目前正在寻找这个问题的更好答案,并偶然发现了这个工具:http://www.openscg.com/2015/02/postgresql-plpgsql-profiler/托管地址:https://bitbucket.org/openscg/plprofiler
它声称能给予你所需要的信息,包括函数每一行所花费的总时间,我们还没有进一步的研究,但是基于作者的说法,我们是乐观的。

insrf1ej

insrf1ej3#

首先,你可以打开Postgres日志文件中所有语句的日志记录,日志中包含每条语句的运行时间,这样你就可以识别出最慢的查询并尝试优化它们。
但是阅读了你对Frank帖子的评论,我猜你的问题是循环。试着摆脱循环,在一个查询中做所有的事情。一个语句读很多行通常比很多语句只读几行更有效。

qcuzuvrc

qcuzuvrc4#

尝试使用pg_stat_statements扩展(http://www.postgresql.org/docs/9.2/static/pgstatstatements.html)。它可以显示所有语句(包括plpgsql过程中的子语句)的调用次数和总调用时间。

tf7tbtn2

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

相关问题