在PostgreSQL上分析/分析查询

时间:2015-03-05 14:08:46

标签: sql postgresql plpgsql postgresql-8.4

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

我可以使用PostgreSQL的哪些工具(如果有的话)?我很感激任何帮助,因为我对Postgres很新。

2 个答案:

答案 0 :(得分:3)

使用pg_stat_statements扩展程序来获取长时间运行的查询。然后使用select * from pg_stat_statements order by total_time / calls desc limit 10得到10个最长。然后使用explain查看计划......

答案 1 :(得分:2)

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

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

  2. 使用客户端应用程序的分析来查看他们花费时间的查询。有时一个查询的持续时间很短,但经常重复这些查询会导致性能问题。

  3. 当然,解释分析可以提供帮助。但是,如果您正在查看plpgsql函数,通常需要提取查询并直接对它们运行explain analyze。

    注意:除非您知道它没有写入数据库,否则总是在回滚的事务或只读事务中运行explain analyze。