利用 pgAdmin 进行 Linux 上的 PostgreSQL 监控
一 快速上手与实时看板
二 深入性能诊断与对象级统计
SELECT pid, usename, application_name, client_addr, query_start, state, query
FROM pg_stat_activity
WHERE state = 'active'
ORDER BY query_start;
SELECT schemaname, tablename, seq_scan, idx_scan, n_tup_ins, n_tup_upd, n_tup_del
FROM pg_stat_all_tables
ORDER BY seq_scan DESC
LIMIT 20;
CREATE EXTENSION IF NOT EXISTS pg_stat_statements;
SELECT query, total_time, rows,
100.0 * shared_blks_hit / (shared_blks_hit + shared_blks_read) AS hit_ratio
FROM pg_stat_statements
ORDER BY total_time DESC
LIMIT 10;
三 慢查询日志与日志分析
logging_collector = on
log_min_duration_statement = 500 # 单位毫秒,记录超过阈值的语句
修改后重启数据库生效。sudo apt install pgbadger # Debian/Ubuntu 示例
# 或
sudo yum install pgbadger # CentOS/RHEL 示例
pgbadger /var/log/postgresql/postgresql-*.log -o /var/log/pgbadger/report.html
打开生成的 report.html 可查看慢查询排行、调用频次、错误趋势等,便于长期优化与复盘。四 长期监控与告警集成
scrape_configs:
- job_name: 'postgresql'
static_configs:
- targets: ['localhost:9187']
五 关键指标与优化建议
| 指标 | 如何查看 | 异常表现 | 优化建议 |
|---|---|---|---|
| 连接数与会话 | pgAdmin Dashboard 的 Server sessions;查询 pg_stat_activity | 连接数长期接近上限、存在大量 idle 或异常长事务 | 调整应用连接池;排查长事务与锁等待;必要时增大 max_connections 并优化应用释放连接 |
| 慢查询 | log_min_duration_statement + pgBadger;Query Tool + EXPLAIN ANALYZE | 报告或面板中慢 SQL 占比高 | 增加/改写索引;改写 SQL 避免全表扫描;使用分区/批量提交;定期 VACUUM ANALYZE |
| 表与索引访问 | 表 Statistics;pg_stat_all_tables | 高 seq_scan、索引命中率低 | 为高频过滤/关联列建立合适索引;分析执行计划与统计信息准确性 |
| 缓存命中率 | pg_stat_statements.hit_ratio | shared_blks_hit 低、命中率偏低 | 适度提高 shared_buffers;优化工作集与访问局部性;减少不必要的大表扫描 |
| 磁盘 I/O | pgAdmin Block I/O;系统 iostat | 读写吞吐高、await 时间长 | 使用更快存储(SSD/NVMe);优化查询减少随机 I/O;考虑分区/并行化与合适的 FILLFACTOR |
以上流程覆盖 实时看板 → 深入诊断 → 日志分析 → 长期监控与告警 的完整闭环,既能在 pgAdmin 内完成日常巡检与问题定位,也能通过 Prometheus + Grafana 实现可观测性与告警的工程化落地。