在 Linux 上使用 pgAdmin 监控 PostgreSQL 的实用步骤
一 快速上手 Dashboard 与内置监控
- 在左侧对象树选择目标服务器或数据库,打开右侧 Dashboard,查看关键指标:Database sessions(会话数)、Transactions per second(每秒事务)、Tuples in/out(元组读写)、Block I/O(块 I/O),用于快速判断负载与健康度。
- 打开 Tools > Query Tool 执行 SQL,并使用 Explain / Explain Analyze 查看执行计划,定位慢查询与瓶颈。
- 在对象树中右键库/表选择 Statistics,查看 Server Statistics、Table Statistics 等,跟踪查询量、缓存命中、索引/顺序扫描、行数变化等指标。
- 在对象树的 Monitoring 节点可查看更细的实时性能数据(如 CPU、内存、磁盘 I/O 等),支持动态刷新。
- 若左侧出现 Logs 节点,可查看数据库日志(需提前开启日志收集),用于故障排查与慢查询定位。
二 关键 SQL 检查清单(在 pgAdmin Query Tool 执行)
- 连接与负载概览
- 最大连接与当前连接:
- show max_connections;
- select count(*) from pg_stat_activity;
- select count(*) from pg_stat_activity where state=‘active’;
- 按库/用户/IP/应用统计连接:
- select datname,count() from pg_stat_activity group by datname order by count() desc;
- select usename,count() from pg_stat_activity group by usename order by count() desc;
- select client_addr,count() from pg_stat_activity group by client_addr order by count() desc;
- select application_name,count() from pg_stat_activity group by application_name order by count() desc;
- 长事务与长连接
- 超过 30 分钟 的长事务 TOP5:
- select current_database(), pid,usename,query,state,xact_start,now()-xact_start xact_duration,query_start,now()-query_start as query_duration,backend_xid,backend_xmin from pg_stat_activity where EXTRACT(EPOCH FROM NOW()-xact_start)/60>30 and query !~ ‘^COPY$’ and pid<>pg_backend_pid() and state in (‘idle in transaction’,‘active’) and (backend_xid is not null or backend_xmin is not null) order by xact_duration desc limit 5;
- 超过 30 分钟 的长连接 TOP5:
- select current_database(),usename,pid,application_name,query,state,backend_start,now()-backend_start as backend_duration from pg_stat_activity where EXTRACT(EPOCH FROM NOW()-backend_start)/60>30 and pid<>pg_admin_pid() order by backend_duration desc limit 5;
- 锁与阻塞
- 查看阻塞与等待关系(按需扩展字段与条件):
- select blocked_locks.pid as blocked_pid,blocked_activity.usename as blocked_user,blocking_locks.pid as blocking_pid,blocking_activity.usename as blocking_user,blocked_activity.query as blocked_statement,blocking_activity.query as current_statement_in_blocking_process,now()-blocking_activity.query_start as blocking_statement_duration,blocked_activity.state as blocked_state,blocking_activity.state as blocking_state from pg_catalog.pg_locks blocked_locks join pg_stat_activity blocked_activity on blocked_locks.pid=blocked_activity.pid join pg_catalog.pg_locks blocking_locks on blocking_locks.locktype=blocked_locks.locktype and blocking_locks.DATABASE=blocked_locks.DATABASE and blocking_locks.relation=blocked_locks.relation and blocking_locks.page=blocked_locks.page and blocking_locks.tuple=blocked_locks.tuple and blocking_locks.virtualxid=blocked_locks.virtualxid and blocking_locks.transactionid=blocked_locks.transactionid and blocking_locks.classid=blocked_locks.classid and blocking_locks.objid=blocked_locks.objid and blocking_locks.objsubid=blocked_locks.objobjsubid and blocking_locks.pid<>blocked_locks.pid join pg_stat_activity blocking_activity on blocking_locks.pid=blocking_activity.pid where not blocked_locks.granted;
- 慢查询与 SQL 统计
- 在 postgresql.conf 中开启:
- logging_collector = on
- log_min_duration_statement = 1000(单位毫秒,示例为记录超过 1 秒的语句)
- 结合 pg_stat_statements 分析最耗时的 SQL(需创建扩展:create extension if not exists pg_stat_statements;)。
三 系统层面巡检与日志
- 系统资源:使用 top/htop、vmstat、iostat、pidstat、dstat、sar、Glances 观察 CPU、内存、I/O、网络 与数据库/pgAdmin 进程资源占用,识别系统层瓶颈。
- pgAdmin 应用自身健康:
- 服务状态与日志:
- systemctl status pgadmin4
- journalctl -u pgadmin4 -f
- 默认 Web 端口 5050,确认监听:ss -tulpen | grep 5050 或 netstat -tulpen | grep 5050
- 日志路径:/var/log/pgadmin/pgadmin4.log,实时跟踪:tail -f /var/log/pgadmin/pgadmin4.log
- Docker 场景:docker exec -it <容器名> sh、ps aux | grep pgadmin、tail -f /var/log/pgadmin/pgadmin4.log
四 长期监控与告警方案
- 轻量组合:pgAdmin Dashboard + 系统工具(top/vmstat/iostat)+ PostgreSQL 内置视图,覆盖日常可用性、负载与 SQL 性能。
- 生产组合:
- Prometheus + Grafana(PostgreSQL Exporter):采集并可视化指标,配置阈值告警,形成可观测性闭环。
- Zabbix(libzbxpgsql):企业级监控与告警。
- 云数据库场景:除 pgAdmin 外,建议同时启用云厂商控制台的 实例监控(如 RDS for PostgreSQL 的监控指标),获取更完整的资源与性能视图。
五 常见排障与优化建议
- 慢查询定位:在 Query Tool 使用 EXPLAIN / EXPLAIN ANALYZE 识别高成本算子(如顺序扫描)、缺失索引与统计信息过期。
- 表与索引健康:在表对象 Statistics 观察 行数、索引大小、顺序/索引扫描比例,按需创建索引并执行 VACUUM / ANALYZE 保持性能。
- 连接治理:对异常或长时间空闲的连接进行排查与清理(如基于 pg_stat_activity 的结果评估),避免连接风暴。
- 锁与阻塞:利用 pg_stat_activity 与 pg_locks 联合分析阻塞链,优先处理持锁时间长的事务。