在PostgreSQL上分析/分析查询

And*_*y.l 8 sql postgresql plpgsql postgresql-8.4

我刚刚继承了旧的PostgreSQL安装,需要做一些诊断来找出这个数据库运行缓慢的原因.在MS SQL上,您将使用Profiler等工具查看正在运行的查询,然后查看其执行计划的外观.

PostgreSQL存在哪些工具,如果有的话,我可以用它做什么?我很感激任何帮助,因为我对Postgres很新.

Vao*_*sun 5

使用pg_stat_statements扩展来获取长时间运行的查询。然后使用pg_stat_statements顺序中的select *,按total_time / calls dec限制10来获得十个最长的时间。然后使用说明来查看计划...


Chr*_*ers 5

我的一般方法通常是多种方法的混合。这不需要扩展。

  1. 设置 log_min_duration_statement 以捕获长时间运行的查询。 https://dba.stackexchange.com/questions/62842/log-min-duration-statement-setting-is-ignored应该可以帮助您开始。

  2. 使用客户端应用程序分析来查看他们将时间花在哪些查询上。有时,查询的持续时间很短,但频繁重复会导致性能问题。

当然,然后解释分析会有所帮助。然而,如果您正在查看 plpgsql 函数的内部,通常您需要提取查询并直接对它们运行解释分析。

注意:始终在回滚事务或只读事务中运行解释分析,除非您知道它不会写入数据库。