PostgreSQL 可视化监控利器 —— pg_top 安装与使用全攻略(查看正在执行的SQL占用的资源)
在日常数据库运维和性能调优中,想要实时查看 PostgreSQL 的运行状态?
比如:
-
哪个 SQL 在吃 CPU?
-
有没有会话锁住了表?
-
当前连接数爆了吗?
别急!一款命令行神器能让你秒变“数据库侦探” —— pg_top。
🧩 一、pg_top 是什么?
pg_top 是一款类似 Linux top 的 PostgreSQL 性能监控工具。
它能实时展示数据库的:
-
当前活跃连接
-
执行中的 SQL
-
CPU / 内存占用
-
锁(Lock)状态
-
进程运行时间
一句话总结:
👉 pg_top = PostgreSQL 的动态监控面板。
⚙️ 二、安装 pg_top
📦 Fedora / CentOS / RHEL 安装
一条命令搞定:
sudo dnf install pg_top
安装完成后验证:
pg_top --version
👤 使用 PostgreSQL 用户运行
su postgres
pg_top
连接指定数据库:
pg_top -U postgres -d my_database
连接远程数据库:
pg_top -h 192.168.1.10 -p 5432 -U postgres -d my_database
调整刷新间隔(默认 5 秒):
pg_top -s 2
🔍 三、pg_top 常用快捷键
进入界面后,通过快捷键动态切换视图:
| 快捷键 | 功能说明 |
|---|---|
| r | 按 CPU 使用率排序 |
| m | 按内存使用率排序 |
| t | 按运行时间排序 |
| f | 切换显示列 |
| c | 显示 SQL 命令文本 |
| L | 查看锁信息(Locks View) |
| q | 退出 |
| ? | 查看帮助菜单 |
💡 实用小技巧:
-
按 c 查看实时 SQL
-
按 L 检查锁竞争
-
按 r 找出“吃 CPU 的元凶”
🧠 四、实战演示
🧩 示例 1:查看活跃查询
pg_top -d mydb -U postgres
进入后按下 c 键,你会看到类似下方界面:
PID USER PRI NI SIZE RSS SHARE STAT CPU% MEM% TIME COMMAND1423 postgres 20 0 251M 29M 0.1 idle 0.0 1.2 0:00.42 SELECT * FROM orders WHERE price > 1000;1456 postgres 20 0 302M 40M 0.2 run 98.4 2.3 0:13.05 UPDATE users SET active = true WHERE last_login > now() - interval '30 days';

🔎 一眼就能看出:哪个查询占 CPU、哪个在跑、哪个在等。
🔒 示例 2:查看锁等待情况
进入 pg_top 后按 L(大写 L):
Database: mydb Locks ViewPID Lock Type Mode Relation Transaction ID Granted1432 relation RowExclusive public.users 123456789 t1459 transaction ExclusiveLock <none> 123456790 f
可以清楚地看到哪些锁已持有、哪些在等待。
⚡ 示例 3:按 CPU 或内存排序
进入界面后,按下对应键:
-
r:按 CPU 排序(定位最重 SQL)
-
m:按内存排序
-
t:按运行时间排序
示例界面👇
pg_top - 14:52:11 up 12 days, 2:45, load average: 0.42, 0.35, 0.32
PID USER CPU% MEM% TIME+ COMMAND
1456 postgres 95.6 2.1 0:12.34 UPDATE users SET active = true ...
1622 postgres 15.2 1.7 0:01.43 SELECT * FROM orders WHERE price > 1000
🧮 五、pg_top vs 其他工具
| 工具 | 特点 | 适用场景 |
|---|---|---|
| pg_top | 实时刷新、交互式命令行 | 性能诊断、现场排查 |
| pg_stat_activity | SQL 查询方式 | 日常监控、数据采集 |
| pgAdmin / pgbadger | 图形界面、报表统计 | 可视化分析 |
✅ 建议组合使用:
pg_top + pg_stat_statements = 实时 + 历史 性能分析。
🧰 六、常见问题 (FAQ)
Q1:运行时提示 “permission denied”?
🔹 检查 PostgreSQL 用户权限,确保能访问系统视图。
Q2:SQL 文本不显示?
🔹 在 postgresql.conf 中增加:
track_activity_query_size = 2048
然后重启数据库。
Q3:支持哪些版本?
🔹 支持 PostgreSQL 9.x - 17.x,大多数发行版仓库自带。
🏁 七、总结
pg_top 是 PostgreSQL 运维和性能调优中最轻巧实用的工具之一。
它能让你快速:
-
找出慢查询
-
定位锁竞争
-
监控数据库资源占用
💡 一句话总结:
想知道 PostgreSQL “现在在忙啥”?运行 pg_top 就够了!
📚 延伸阅读
-
PostgreSQL 官方文档:Monitoring Database Activity
-
pg_stat_activity 详解
-
pgbadger:PostgreSQL 日志分析神器
