【问题标题】:Is there a PostgreSQL equivalent of SQL Server profiler?是否有 PostgreSQL 等效的 SQL Server 探查器?
【发布时间】:2011-01-26 16:29:06
【问题描述】:

我需要查看提交到 PostgreSQL 服务器的查询。通常我会使用 SQL Server profiler 在 SQL Server 领域执行此操作,但我还没有找到如何在 PostgreSQL 中执行此操作。似乎有很多付费工具,我希望有一个开源变体。

【问题讨论】:

    标签: postgresql profiler


    【解决方案1】:

    您可以使用 log_statement 配置设置来获取服务器的所有查询列表

    https://www.postgresql.org/docs/current/static/runtime-config-logging.html#guc-log-statement

    只需设置它和日志文件路径,您就会得到列表。您还可以将其配置为仅记录长时间运行的查询。

    然后您可以获取这些查询并对它们运行 EXPLAIN 以了解它们发生了什么。

    https://www.postgresql.org/docs/9.2/static/using-explain.html

    【讨论】:

    • 完美,给它扔了一个尾巴-f
    • 嗯,很难将 .csv 日志文件称为“相当于 SQL Server 分析器”...
    【解决方案2】:

    添加到 Joshua 的回答中,要查看 which queries are currently running,只需随时发出以下语句(例如在 PGAdminIII 的查询窗口中):

    SELECT datname,procpid,current_query FROM pg_stat_activity;
    

    样本输出:

         datname    | procpid | current_query
     ---------------+---------+---------------
      mydatabaseabc |    2587 | <IDLE>
      anotherdb     |   15726 | SELECT * FROM users WHERE id=123 ;
      mydatabaseabc |   15851 | <IDLE>
     (3 rows)
    

    【讨论】:

    • 在我的 PG (9.3) 版本中,我使用了以下查询:SELECT datname, pid, usename, application_name, client_addr, query FROM pg_stat_activity; pg_stat_activity 是数据库“postgresql”的视图
    • SELECT client_addr, state_change, query FROM pg_stat_activity;
    • “查询”列长度太短,无法显示长查询。
    【解决方案3】:

    我发现了 pgBadger (http://dalibo.github.io/pgbadger/),它是一个很棒的工具,曾多次救过我的命。这是一个报告示例:http://dalibo.github.io/pgbadger/samplev4.html。 如果您打开它并转到“顶部”菜单,您可以看到最慢的查询和耗时的查询。 然后您可以询问详细信息并查看按小时显示查询的漂亮图表,如果您使用详细信息按钮,您可以以漂亮的形式查看 SQL 文本。所以我可以看到这个工具是免费且完美的。

    【讨论】:

    • 相当不错的工具。我使用本教程安装它,因为官方文档非常冗长:dhis2.org/analysing-postgresql-logs-using-pgbadger
    • 请注意,该工具仅适用于 *nix 系统,这对 Windows 用户来说很糟糕
    • +1,因为 OP 要求使用 Sql Server Profiler 之类的工具,而不是配置选项来手动提取所需的性能信息。
    • 易于安装和使用! sudo apt install pgbadger pgbadger /var/log/postgresql/postgresql-11-main.log 谢谢推荐!这是我正在寻找的分析器工具。 github.com/darold/pgbadger#postgresql-configuration
    【解决方案4】:

    我需要查看提交到 PostgreSQL 服务器的查询

    作为一个选项,如果您使用 pgAdmin(在我的图片上是 pgAdmin 4 v2.1)。您可以通过“仪表板”选项卡观察查询:

    【讨论】:

    • 这不能显示长 SQL 语句。 SQL 被截断。
    • 而且它也不能显示短时间运行的查询。有没有办法查看刚刚完成的查询?
    【解决方案5】:

    您可以使用pg_stat_statements 扩展名。

    如果在 docker 中运行 db,只需在 docker-compose.yml 中添加此命令,否则只需查看安装说明即可:

    command: postgres -c shared_preload_libraries=pg_stat_statements -c pg_stat_statements.track=all -c max_connections=200
    

    然后在数据库中运行这个查询:

    CREATE EXTENSION pg_stat_statements;
    

    现在来看看需要更多时间运行的操作:

    SELECT * FROM pg_stat_statements ORDER BY total_time/calls DESC LIMIT 10;
    

    或者在该视图上使用其他查询来查找您要查找的内容。

    【讨论】:

    • 同样,SELECT query_start,query,datname FROM pg_stat_activity where datname='your database name' order by query_start desc
    猜你喜欢
    • 1970-01-01
    • 2010-12-03
    • 2013-04-08
    • 2018-04-05
    • 2013-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多