是否有与SQL Server profiler相当的PostgreSQL?

是否有与SQL Server profiler相当的PostgreSQL?,postgresql,profiler,Postgresql,Profiler,我需要查看提交到PostgreSQL服务器的查询。通常我会在SQLServerLand中使用SQLServerProfiler执行此操作,但我还没有找到如何在PostgreSQL中执行此操作。似乎有很多付费工具,我希望有一个开源的变体。您可以使用log\u statement config设置来获取服务器上所有查询的列表 只要设置它和日志文件路径,就可以得到列表。您还可以将其配置为仅记录长时间运行的查询 然后,您可以接受这些查询并对它们运行EXPLAIN,以了解它们发生了什么 除了Joshua的

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

您可以使用log\u statement config设置来获取服务器上所有查询的列表

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

然后,您可以接受这些查询并对它们运行EXPLAIN,以了解它们发生了什么


除了Joshua的回答之外,您只需随时发布以下声明,例如在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)
我发现了pgBadger,它是一个神奇的工具,多次救了我的命。以下是报告的一个示例:。 如果打开它并进入“顶部”菜单,您可以看到最慢的查询和最耗时的查询。 然后,您可以询问详细信息并查看按小时显示查询的漂亮图表,如果您使用“详细信息”按钮,您可以以漂亮的形式查看SQL文本。因此,我可以看到这个工具是免费的和完美的

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

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

如果在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;

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

perfect,对它抛出了一个tail-f。很难将.csv日志文件称为SQL Server profiler的等效文件……在我的PG 9.3版本中,我使用了以下查询:选择datname、pid、usename、应用程序名称、客户端地址、PG统计活动查询;pg_stat_activity是DB'postgresql'选择客户端地址、状态更改、pg_stat_activity查询的视图;查询列长度太短,无法显示长查询。非常好的工具。我使用本教程安装它,因为官方文档非常详细:请注意,该工具仅适用于*nix系统,对于Windows用户+1来说非常糟糕,因为OP要求使用类似Sql Server Profiler not config options的工具来手动提取所需的性能信息。易于安装和使用!sudo apt install pgbadger pgbadger/var/log/postgresql/postgresql-11-main.log感谢您的推荐!这是我一直在寻找的探查器工具。这不能显示长SQL语句。SQL被截断。同样,从pg_stat_activity中选择query_start,query,datname,其中datname='your database name'按query_start desc排序