是否有PostgreSQL等效的SQL Server探查器?

时间:2010-03-12 03:46:55

标签: postgresql profiler

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

6 个答案:

答案 0 :(得分:49)

您可以使用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

答案 1 :(得分:28)

添加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)

答案 2 :(得分:22)

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

答案 3 :(得分:5)

  

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

作为一种选择,如果你使用pgAdmin(在我的照片上它是pgAdmin 4 v2.1)。您可以通过&#34; Dashboard&#34;标签: pgadmin4 query from application, dashboard

答案 4 :(得分:0)

添加约书亚和vladr的答案

它对我有用:

打开postgresql.conf

集:

log_statement ='mod'

log_min_messages = debug2

打开文件夹中的最后一个日志 C:\ Program Files \ PostgreSQL \ 9.6 \ data \ pg_log \

查询将在那里。

我使用postgresql-9.6.5-1

答案 5 :(得分:0)

您可以使用pg_stat_statements扩展名。

如果在docker中运行数据库,只需在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;

或在该视图上处理其他查询,以查找所需内容。