【发布时间】:2011-01-26 16:29:06
【问题描述】:
我需要查看提交到 PostgreSQL 服务器的查询。通常我会使用 SQL Server profiler 在 SQL Server 领域执行此操作,但我还没有找到如何在 PostgreSQL 中执行此操作。似乎有很多付费工具,我希望有一个开源变体。
【问题讨论】:
标签: postgresql profiler
我需要查看提交到 PostgreSQL 服务器的查询。通常我会使用 SQL Server profiler 在 SQL Server 领域执行此操作,但我还没有找到如何在 PostgreSQL 中执行此操作。似乎有很多付费工具,我希望有一个开源变体。
【问题讨论】:
标签: postgresql profiler
您可以使用 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
【讨论】:
添加到 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)
【讨论】:
我发现了 pgBadger (http://dalibo.github.io/pgbadger/),它是一个很棒的工具,曾多次救过我的命。这是一个报告示例:http://dalibo.github.io/pgbadger/samplev4.html。 如果您打开它并转到“顶部”菜单,您可以看到最慢的查询和耗时的查询。 然后您可以询问详细信息并查看按小时显示查询的漂亮图表,如果您使用详细信息按钮,您可以以漂亮的形式查看 SQL 文本。所以我可以看到这个工具是免费且完美的。
【讨论】:
sudo apt install pgbadger pgbadger /var/log/postgresql/postgresql-11-main.log 谢谢推荐!这是我正在寻找的分析器工具。 github.com/darold/pgbadger#postgresql-configuration
您可以使用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;
或者在该视图上使用其他查询来查找您要查找的内容。
【讨论】: