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

Boz*_*Joe 74 postgresql profiler

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

Jos*_*ith 51

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

  • 好吧,很难将 .csv 日志文件称为“相当于 SQL Server 分析器”... (10认同)
  • 完美,向它扔了尾巴 -f (2认同)

vla*_*adr 29

添加到Joshua的答案,查看当前正在运行的查询只需在任何时候发出以下语句(例如在PGAdminIII的查询窗口中):

SELECT datname,procpid,current_query FROM pg_stat_activity;
Run Code Online (Sandbox Code Playgroud)

样本输出:

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

  • “查询”列长度太短,无法显示长查询。 (4认同)
  • 使用我的PG版本(9.3),我使用了以下查询:SELECT datname,pid,usename,application_name,client_addr,query FROM pg_stat_activity; pg_stat_activity是DB'postgresql'的视图 (3认同)
  • SELECT client_addr,state_change,query FROM pg_stat_activity; (2认同)

小智 23

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

  • 请注意,该工具仅适用于*nix系统,这对Windows用户来说很糟糕 (3认同)
  • 非常好的工具.我使用本教程安装它,因为官方文档非常详细:https://www.dhis2.org/analysing-postgresql-logs-using-pgbadger (2认同)

And*_*tov 9

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

作为一种选择,如果您使用pgAdmin(我的照片是pgAdmin 4 v2.1)。您可以通过“仪表板”选项卡观察查询: 来自应用程序,仪表板的pgadmin4查询

  • 这不能显示长 SQL 语句。SQL 被截断。 (3认同)
  • 而且它也无法显示短期运行的查询。有没有办法查看刚刚完成的查询? (2认同)

Fel*_*ira 6

您可以使用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
Run Code Online (Sandbox Code Playgroud)

然后在数据库中运行以下查询:

CREATE EXTENSION pg_stat_statements;
Run Code Online (Sandbox Code Playgroud)

现在查看运行时间较长的操作:

SELECT * FROM pg_stat_statements ORDER BY total_time/calls DESC LIMIT 10;
Run Code Online (Sandbox Code Playgroud)

或者通过该视图进行其他查询以找到您要查找的内容。

  • 同样, SELECT query_start,query,datname FROM pg_stat_activity where datname='your database name' order by query_start desc (2认同)