在 PostgreSQL 中,监控运行状态可以从系统级、数据库级、SQL 级、工具级几个层面来做。下面给你一个比较实用、由浅入深的总结。
pg_lsclusters # Debian/Ubuntu
systemctl status postgresql
ps -ef | grep postgres
SELECT version();
SELECT * FROM pg_stat_activity;
常用监控字段:
state(active / idle / idle in transaction)querywait_eventclient_addrbackend_start查看活跃连接数:
SELECT count(*) FROM pg_stat_activity WHERE state = 'active';
SELECT * FROM pg_stat_database;
重点关注:
numbackends(连接数)blks_read / blks_hit(缓存命中率)deadlocksconflicts命中率示例:
SELECT
datname,
blks_hit::float / (blks_hit + blks_read) AS hit_ratio
FROM pg_stat_database;
在 postgresql.conf 中:
log_min_duration_statement = 1000 # 毫秒
logging_collector = on
SELECT pid, now() - query_start AS duration, query
FROM pg_stat_activity
WHERE state = 'active'
ORDER BY duration DESC;
SELECT * FROM pg_stat_user_tables;
关注:
seq_scan(全表扫描)idx_scann_dead_tuplesSELECT
pid,
usename,
state,
wait_event_type,
query
FROM pg_stat_activity
WHERE wait_event_type = 'Lock';
SELECT * FROM pg_locks WHERE NOT granted;
SELECT pg_database_size('dbname');
SELECT pg_total_relation_size('tablename');
SELECT * FROM pg_tablespace;
top / htop
iostat -x 1
df -h
free -m
pg_stat_statements(强烈推荐)CREATE EXTENSION pg_stat_statements;
查看最耗资源的 SQL:
SELECT * FROM pg_stat_statements
ORDER BY total_exec_time DESC
LIMIT 10;
✅ 连接数
✅ 慢查询
✅ 锁等待
✅ 缓存命中率
✅ 表膨胀(dead tuples)
✅ 磁盘空间
✅ WAL 增长
如果你愿意,可以告诉我:
我可以直接给你一套可落地的监控方案或脚本。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。