我想监控从应用程序发送到我的数据库的查询。为此,我找到了 pg_stat_activity
,但往往返回的行都会显示 "in transaction"。我可能做错了什么,或者没能快速看到查询的过程,搞混了,或者以上都有!
有人能推荐一种最简单的监视运行在 PostgreSQL 上的查询的方法吗?我希望采用某种易于使用的基于 UI 的解决方案(例如:SQL Server 的 "Profiler"),但我并不挑剔。
我想监控从应用程序发送到我的数据库的查询。为此,我找到了 pg_stat_activity
,但往往返回的行都会显示 "in transaction"。我可能做错了什么,或者没能快速看到查询的过程,搞混了,或者以上都有!
有人能推荐一种最简单的监视运行在 PostgreSQL 上的查询的方法吗?我希望采用某种易于使用的基于 UI 的解决方案(例如:SQL Server 的 "Profiler"),但我并不挑剔。
PgAdmin提供了一个名为服务器监视器的易于使用的工具
(工具 -> 服务器状态)
使用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。请参考日志记录配置参数。pg_activity
是我们使用的工具。
https://github.com/dalibo/pg_activity
它是一个类似于top
的优秀工具。
您可以在 Ubuntu 21.10 上使用以下命令安装并运行它:
sudo apt install pg-activity
pg_activity
/var/log
下:https://dev59.com/tXRB5IYBdhLWcg3wF0DH#comment65038122_722236 - Ciro Santilli OurBigBook.compg_activity
一定会抛出 pg_activity: 致命错误:连接到套接字"/var/run/postgresql/.s.PGSQL.5432"上的服务器失败:角色"my_user"不存在
(退出代码1)。 - Chris Vilches如果你正在使用Docker Compose,你可以在你的docker-compose.yaml文件中添加这一行:
command: ["postgres", "-c", "log_statement=all"]
docker-compose logs -f
如果您只想查看Postgres日志,请执行以下操作:
docker-compose logs -f [postgres-service-name]
很抱歉我自己没有尝试过,但我认为pgFouine可以显示一些统计信息。
虽然它似乎不会实时显示查询,而是在之后生成查询报告,但也许它仍然能满足您的需求?