Postgresql 如何分析plpgsql过程

Postgresql 如何分析plpgsql过程,postgresql,stored-procedures,profiling,plpgsql,Postgresql,Stored Procedures,Profiling,Plpgsql,我正试图提高长时间运行的plpgsql存储过程的性能,但我不知道有哪些评测工具可用。有人能为如何分析这样一个过程提供建议吗?从过程中提出一些建议,包括查看数据库花费的时间。并使程序尽可能简单 你能给我们举个例子吗?首先,你可以打开Postgres日志文件。日志将包含每个语句的运行时。通过这种方式,您可以确定最慢的查询并尝试对其进行优化 但是读到你在弗兰克的帖子上的评论,我猜循环是你的问题。尝试摆脱循环,在单个查询中完成所有操作。一条读很多行的语句通常比很多只读几行的语句更有效。尝试使用pg_st

我正试图提高长时间运行的plpgsql存储过程的性能,但我不知道有哪些评测工具可用。有人能为如何分析这样一个过程提供建议吗?

从过程中提出一些建议,包括查看数据库花费的时间。并使程序尽可能简单


你能给我们举个例子吗?

首先,你可以打开Postgres日志文件。日志将包含每个语句的运行时。通过这种方式,您可以确定最慢的查询并尝试对其进行优化


但是读到你在弗兰克的帖子上的评论,我猜循环是你的问题。尝试摆脱循环,在单个查询中完成所有操作。一条读很多行的语句通常比很多只读几行的语句更有效。

尝试使用pg_stat_statements extension()。
它可以显示所有语句(包括plpgsql过程中的子语句)的调用编号和总调用时间。

我们目前正在寻找更好的答案来回答这个问题,并且偶然发现了这个工具: 主办地点:


它声称可以提供您所需要的,包括在函数的每一行上花费的总时间。我们尚未对此进行进一步调查,但根据作者的说法,我们持乐观态度。

我希望找到一种不需要改变程序的方法,但这可能比什么都不做要好。文档记录了类似的过程,但获取可用数据似乎过于复杂。该过程是一组嵌套循环,用于为Solr数据导入处理程序查询创建文档(如果有帮助的话)(可能没有)。这不是一种很好的方法,但这是唯一的方法。这也是为什么保持简短和简单很重要的原因:与其他代码一样,简短的过程更容易调试和分析。不幸的是,这个过程非常简单。它遍历一组1:n关系,方法是选择一些数据,遍历n,选择更多数据,遍历嵌套的1:n关系,然后在整行就绪后从内部循环返回下一个。比SELECT或FOR更复杂的所有内容都已放入其他程序中。