监控 CentOS 上的 PostgreSQL 可以从 系统级、数据库级、日志、以及可视化工具 四个层面来做。下面给你一套从“基础 → 进阶 → 生产级”的完整方案。
top
htop
vmstat 1
iostat -x 1
free -h
df -h
关注点:
%us / %sy%util 是否接近 100%ps -ef | grep postgres
重点进程:
postgres: main processpostgres: checkpointerpostgres: background writerpostgres: walwriterpostgres: autovacuum launcherSELECT * FROM pg_stat_activity;
常用字段:
pidusenamedatnamestatequeryquery_start查看连接数:
SELECT count(*) FROM pg_stat_activity;
SELECT * FROM pg_stat_database;
关键指标:
numbackends(连接数)xact_commit / xact_rollbackblks_read / blks_hit(缓存命中率)SELECT * FROM pg_stat_statements;
启用方式:
CREATE EXTENSION pg_stat_statements;
postgresql.conf:
shared_preload_libraries = 'pg_stat_statements'
pg_stat_statements.track = all
SELECT * FROM pg_stat_user_tables;
SELECT * FROM pg_stat_user_indexes;
关注:
seq_scan(全表扫描)idx_scann_tup_upd / n_tup_delSELECT * FROM pg_locks;
结合:
SELECT
a.pid,
a.usename,
a.query,
l.locktype,
l.mode
FROM pg_locks l
JOIN pg_stat_activity a ON l.pid = a.pid;
find /var/lib/pgsql -name "postgresql*.log"
常见路径:
/var/lib/pgsql/13/data/log/
postgresql.conf:
logging_collector = on
log_directory = 'log'
log_filename = 'postgresql-%Y-%m-%d.log'
log_min_duration_statement = 500 # 慢查询 500ms
log_connections = on
log_disconnections = on
log_lock_waits = on
yum install ptop
pg_top
SELECT * FROM pg_stat_bgwriter;
SELECT * FROM pg_stat_wal;
| 项目 | 命令 |
|---|---|
| 当前连接 | pg_stat_activity |
| 慢查询 | pg_stat_statements |
| 锁 | pg_locks |
| 表扫描 | pg_stat_user_tables |
| 缓存命中率 | blks_hit / blks_read |
| 日志 | postgresql-*.log |
max_connections如果你愿意,我可以:
✅ 给你一套 Prometheus + Grafana 完整部署方案
✅ 针对 CentOS 7 / 8 + PostgreSQL 12/13/14/15 定制
✅ 教你 只看 5 个最重要的指标
你现在用的是 PostgreSQL 几?CentOS 几?单机还是主从?