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

Posted

技术标签:

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

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

【问题讨论】:

【参考方案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

以上是关于是否有 PostgreSQL 等效的 SQL Server 探查器?的主要内容,如果未能解决你的问题,请参考以下文章

PostgreSql中是不是有等效于sp_getapplock,sp_releaseapplock的?

sql 基于触发器的等效旧PostgreSQL时间旅行模块 - 请参阅http://blog.myitcv.org.uk/2014/02/25/row-level-version-control-wi

是否有与 SQL Server NewId() 函数等效的 Access?

是否有与 Progress 4GL INTERVAL 函数等效的 SQL Server 函数?

PostgreSQL plpgsql try catch 块等效

PostgreSQL 中的 DATE_FORMAT() 等效项