我需要查看提交给PostgreSQL服务器的查询。通常,我会使用SQL Server事件探查器在SQL Server领域中执行此操作,但是我尚未找到如何在PostgreSQL中执行此操作。似乎有很多付费工具,我希望有一个开源版本。
Answers:
您可以使用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的答案中,以查看当前正在运行哪些查询,只需随时发出以下语句(例如,在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文本。因此,我可以看到该工具是免费且完美的。
您可以使用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;
或者在该视图上处理其他查询,以查找所需内容。