【问题标题】:Analysing/Profiling queries on PostgreSQL在 PostgreSQL 上分析/剖析查询
【发布时间】:2015-05-06 22:26:29
【问题描述】:

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

我可以使用哪些 PostgreSQL 工具(如果有)来执行此操作?我很感激任何帮助,因为我对 Postgres 还很陌生。

【问题讨论】:

标签: sql postgresql plpgsql postgresql-8.4


【解决方案1】:

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

【讨论】:

  • 添加到您的配置并重新启动后,您还需要运行命令create extension pg_stat_statements
【解决方案2】:

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-19
    • 1970-01-01
    • 2010-10-01
    • 2012-03-19
    • 2019-03-31
    • 1970-01-01
    相关资源
    最近更新 更多