本文目录导读:

监控数据库运行状态是数据库管理员(DBA)和运维工程师的日常工作,通常需要从可用性(能不能连接)、性能(快不快)、资源(系统满不满)、异常(有没有报错) 四个维度进行。
以下是针对主流数据库(MySQL、PostgreSQL、SQL Server、Oracle)及对应监控方式的系统性介绍:
核心监控指标
无论什么数据库,都需要关注以下几类指标:
可用性与连接
- 进程状态: 数据库进程是否运行(如
mysqld、postgres、sqlservr)。 - 端口存活: 监听端口是否可达(如 MySQL 的 3306 端口)。
- 连接数: 当前活跃连接数、最大连接数利用率。
- 慢查询: 执行时间超过阈值的SQL数量。
- 死锁: 单位时间内的死锁次数。
性能与吞吐
- QPS/TPS: 每秒查询数/每秒事务数。
- IOPS & 延迟: 磁盘读写次数和等待时长。
- 缓存命中率: 数据是否经常能从内存中读到,而不是去磁盘翻(特别是MySQL的InnoDB Buffer Pool命中率)。
系统资源
- CPU使用率: 数据库通常很吃CPU,如果长期>80%需要关注。
- 内存使用率: 尤其是数据库进程占用的内存。
- 磁盘空间: 数据目录还剩多少空间(磁盘满会导致数据库直接崩溃或拒绝写入)。
- 磁盘IO等待: 如果是机械硬盘,IO等待时间过长说明磁盘是瓶颈。
复制状态(主从/集群架构)
- 主从延迟(Seconds_Behind_Master): 从库落后主库多少秒。
- 复制线程状态: IO线程和SQL线程是否正常运行。
- GTID/位置号: 确保同步进度没有出现错误。
常用监控工具与方式(由浅入深)
命令行快速检查(适合人工巡检)
- MySQL:
SHOW GLOBAL STATUS;(查看各种计数器)SHOW PROCESSLIST;(看当前所有连接在做什么)SHOW ENGINE INNODB STATUS\G(看InnoDB引擎内部状态,包括死锁、事务等)
- PostgreSQL:
SELECT * FROM pg_stat_activity;(查看活跃会话)SELECT * FROM pg_stat_database;(查看数据库整体统计)
- 通用:
top/htop(看CPU/内存)iostat -x 1(看磁盘IO)df -h(看磁盘使用率)
开源监控平台(生产环境首选)
这是更专业的做法,集成了数据采集、可视化、告警功能:
- Prometheus + Grafana(最主流)
- 原理: 使用 mysqld_exporter、postgres_exporter、oracledb_exporter 等工具抓取数据库指标,Prometheus存储,Grafana绘制仪表盘。
- 优点: 开源免费,生态强大,告警灵活(Alertmanager)。
- Zabbix
- 原理: 通过Zabbix Agent或JDBC模板,主动拉取数据库数据。
- 优点: 老牌监控,自带模板,适合已经有Zabbix基础设施的企业。
- Percona Monitoring and Management (PMM)
- 特点: 专门为MySQL、MongoDB、PostgreSQL设计的开源监控平台,开箱即用,对查询分析(Query Analytics)支持很好。
云服务商自带的监控(上云用户必看)
如果你用 AWS RDS、阿里云RDS、腾讯云DB,可以直接用云控制台:
- 所见即所得: 提供了控制台级别的监控面板,直接看CPU、内存、连接数、IOPS。
- 性能洞察(Performance Insights): 可以精确到具体哪条SQL导致了CPU飙升(AWS RDS 的 Performance Insights 很强)。
- 慢查询日志: 可以直接在控制台下载或查看。
商业监控软件(大企业/金融级)
- SolarWinds Database Performance Analyzer: 能钻取到索引和等待事件级别。
- Quest Foglight: 支持几乎所有主流数据库的深度监控。
- New Relic / Datadog: SaaS服务,集成简单,但费用较高。
针对不同数据库的特殊监控点
- MySQL:
- 关键指标:
Innodb_row_lock_current_waits(行锁等待)、Innodb_buffer_pool_pages_free(空闲页)。 - 常用命令:
SHOW SLAVE STATUS\G查看主从复制状态。
- 关键指标:
- PostgreSQL:
- 关键指标:
pg_locks表(查看锁)、autovacuum运行状态(防止事务ID环绕)。 - 常用视图:
pg_stat_replication(查看流复制延迟)。
- 关键指标:
- SQL Server:
- 关键等待类型:
PAGEIOLATCH_*(磁盘IO瓶颈)、LOCK_*(阻塞)。 - 工具: 系统自带的
SQL Server Profiler或DMV(动态管理视图)。
- 关键等待类型:
- Oracle:
- 关键等待事件:
log file sync(日志写性能)、enq: TX - row lock contention(行锁争用)。 - 工具:
AWR报告(性能报告,自动负载仓库)、ADDM(自动诊断)。
- 关键等待事件:
告警阈值设置建议
不告警等于没监控,但告警太多等于“狼来了”,建议设置分级阈值:
| 指标 | 警告(Warning) | 严重(Critical) |
|---|---|---|
| 磁盘使用率 | > 80% | > 90% |
| CPU使用率 | > 70%(持续5分钟) | > 90%(持续5分钟) |
| 数据库连接数 | > 最大连接数的 80% | > 最大连接数的 95% |
| 主从同步延迟 | > 10秒 | > 60秒 或 持续增长 |
| 慢查询数量 | 每分钟 > 10个 | 每分钟 > 50个 |
| 死锁数量 | 每分钟 > 1次 | 每分钟 > 5次 |
总结建议
- 入门应急: 先学会用
SHOW PROCESSLIST(MySQL)和SELECT * FROM pg_stat_activity(PG)快速定位当前会话。 - 日常监控: 部署 Prometheus + Grafana(配合对应 Exporter),这是目前开源社区最标准的组合。
- 深度分析: 当遇到性能瓶颈时,打开慢查询日志,配合
EXPLAIN分析SQL执行计划。 - 自动化: 设置好告警(钉钉/微信/邮件),让机器先发现问题,人只负责处理“严重”级别的问题。
如果你需要针对某个特定数据库(比如MySQL)的具体监控搭建步骤或排查问题脚本,可以告诉我,我可以进一步展开。