温馨提示×

CentOS下怎么监控PostgreSQL性能

小樊
40
2026-07-09 17:37:53
栏目: 云计算

CentOS 下监控 PostgreSQL 性能,可以从 系统层 + 数据库层 + 第三方工具 三个维度来做。下面按实用程度给你一个完整方案。


一、系统层面监控(CentOS)

1️⃣ CPU / 内存 / IO

top
htop        # 推荐,需安装
vmstat 1
iostat -x 1

关注点:

  • %iowait 是否高
  • 内存是否 swap
  • PostgreSQL 进程 CPU 使用是否异常

2️⃣ 磁盘 IO(数据库很重要)

iostat -x 1

重点看:

  • await(IO 等待)
  • svctm
  • %util

二、PostgreSQL 自带监控方式(最基础)

1️⃣ 查看当前连接与执行中 SQL

SELECT * FROM pg_stat_activity;

常用字段:

  • state(active / idle)
  • query
  • query_start
  • wait_event

查看慢查询:

SELECT pid, now() - query_start, query
FROM pg_stat_activity
WHERE state = 'active'
ORDER BY 2 DESC;

2️⃣ 表级 & 索引性能统计

SELECT * FROM pg_stat_user_tables;

关注:

  • seq_scan / idx_scan
  • n_tup_ins / n_tup_upd / n_tup_del

索引使用情况:

SELECT * FROM pg_stat_user_indexes;

3️⃣ 数据库整体统计

SELECT * FROM pg_stat_database;

重点:

  • numbackends(连接数)
  • tup_returned
  • tup_fetched
  • blks_read / blks_hit(缓存命中率)

三、实时性能监控工具(强烈推荐)

✅ pg_top(类似 top)

yum install pg_top
pg_top -h localhost -p 5432 -U postgres

可看到:

  • 当前 SQL
  • 锁等待
  • 行扫描情况

四、日志分析(慢查询)

1️⃣ 开启慢查询日志

编辑 postgresql.conf

log_min_duration_statement = 500   # 超过 500ms 记录
logging_collector = on
log_directory = 'pg_log'

重启 PostgreSQL:

systemctl restart postgresql

五、专业监控方案(生产环境推荐)

✅ 1️⃣ pgBadger(日志分析神器)

yum install pgbadger
pgbadger /var/lib/pgsql/13/data/pg_log/*.log -o report.html

功能:

  • 慢查询统计
  • 时间分布
  • 错误分析

✅ 2️⃣ Prometheus + Grafana(企业级)

组件:

  • postgres_exporter
  • Prometheus
  • Grafana

可监控:

  • QPS
  • 连接数
  • 表/索引 IO
  • 缓存命中率

六、快速性能检查清单(排障用)

✅ 连接数是否过多
✅ 是否有慢 SQL
✅ 是否有大量 seq_scan
✅ 缓存命中率是否 > 99%
✅ IO 是否瓶颈
✅ 是否有死锁或等待事件


七、常用命令速查表

-- 当前活动 SQL
SELECT * FROM pg_stat_activity;

-- 表扫描情况
SELECT relname, seq_scan, idx_scan FROM pg_stat_user_tables;

-- 缓存命中率
SELECT blks_hit::float / (blks_hit + blks_read) FROM pg_stat_database;

-- 当前锁
SELECT * FROM pg_locks;

如果你愿意,我可以:

  • ✅ 给你 一套完整的 CentOS + PostgreSQL 监控脚本
  • ✅ 帮你 分析一次慢查询
  • ✅ 给你 Prometheus + Grafana 完整部署方案

你现在是在 生产环境 还是 测试环境

0