实时监控 PostgreSQL 查询的应用程序?

30

我想监控从应用程序发送到我的数据库的查询。为此,我找到了 pg_stat_activity,但往往返回的行都会显示 "in transaction"。我可能做错了什么,或者没能快速看到查询的过程,搞混了,或者以上都有!

有人能推荐一种最简单的监视运行在 PostgreSQL 上的查询的方法吗?我希望采用某种易于使用的基于 UI 的解决方案(例如:SQL Server 的 "Profiler"),但我并不挑剔。

5个回答

27

PgAdmin提供了一个名为服务器监视器的易于使用的工具

(工具 -> 服务器状态)


21
这个工具似乎在PgAdmin 4中已经消失了。 - Lasf
@Lasf - 同意... 你有任何想法为什么它消失了吗? - Scott Skiles
9
总体而言,我发现PgAdmin 4的使用体验比PgAdmin 3差。=( - sivabudh
1
为什么在pgadmin中删除了那个? - uberrebu

19

使用PostgreSQL 8.4或更高版本,您可以使用contrib模块pg_stat_statements来收集数据库服务器的查询执行统计信息。

在您的数据库中运行此contrib模块的SQL脚本pg_stat_statements.sql(在Ubuntu上,可以在/usr/share/postgresql/<version>/contrib找到),并添加此示例配置到您的postgresql.conf(需要重新启动):

custom_variable_classes = 'pg_stat_statements'
pg_stat_statements.max = 1000
pg_stat_statements.track = top # top,all,none
pg_stat_statements.save = off
为了实时查看执行的查询语句,您可以配置服务器日志以显示所有查询语句或执行时间最短的查询语句。为此,请相应地在postgresql.conf中设置日志记录配置参数log_statement和log_min_duration_statement。请参考日志记录配置参数

1
虽然这是一个很好的答案,但它没有涵盖如何从pg_stat_statements收集数据,因为它是不断变化的,并且只有关于查询执行的累计统计信息。为此,您可以使用一些工具,例如okmeter.io或PoWA,它们将向您显示有关查询执行和性能的图表和详细信息。免责声明-我在okmeter.io工作。 - Pavel T

7

pg_activity 是我们使用的工具。 https://github.com/dalibo/pg_activity

它是一个类似于top的优秀工具。

您可以在 Ubuntu 21.10 上使用以下命令安装并运行它:

sudo apt install pg-activity
pg_activity

1
我尝试让它工作,但它没有报告任何查询。看起来很好,连接也正常,只是不确定出了什么问题,为什么执行查询时会得到一个空屏幕。 - andyczerwonka
@andyczerwonka 我可以看到查询,例如此测试脚本所做的查询,但它只显示当前正在执行的查询,因此您将看不到任何/大多数短查询。要获取完整的查询日志而不是实时查询监视,请参见:https://dev59.com/tXRB5IYBdhLWcg3wF0DH Ubuntu默认情况下启用了它,位于/var/log下:https://dev59.com/tXRB5IYBdhLWcg3wF0DH#comment65038122_722236 - Ciro Santilli OurBigBook.com
pg_activity 一定会抛出 pg_activity: 致命错误:连接到套接字"/var/run/postgresql/.s.PGSQL.5432"上的服务器失败:角色"my_user"不存在(退出代码1)。 - Chris Vilches

1

如果你正在使用Docker Compose,你可以在你的docker-compose.yaml文件中添加这一行:

command: ["postgres", "-c", "log_statement=all"]

现在您可以通过docker-compose日志查看Postgres查询日志。
docker-compose logs -f 

如果您只想查看Postgres日志,请执行以下操作:

docker-compose logs -f [postgres-service-name]

https://dev59.com/hVMI5IYBdhLWcg3wHHvM#58806511


0

很抱歉我自己没有尝试过,但我认为pgFouine可以显示一些统计信息。

虽然它似乎不会实时显示查询,而是在之后生成查询报告,但也许它仍然能满足您的需求?

您可以查看http://pgfouine.projects.postgresql.org/


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接