目录标题
数据库性能瓶颈与高可用异常切换是关系型数据库日常运维中的两大核心问题。为了系统化地排查这类问题,我们可以将其抽象为通用排查框架,并结合实际使用的工具与命令来进行实操。
🧩 一、整体抽象框架
我们可以将关系型数据库问题的排查抽象为以下 4 个维度:
排查维度 | 描述说明 | 工具/方法示例 |
---|---|---|
1. 监控与告警 | 是否有异常的监控指标或告警信息提示性能/可用性问题 | Grafana、Prometheus、Zabbix、CloudWatch |
2. 资源分析 | 系统资源是否存在瓶颈(CPU、内存、I/O、网络) | top / vmstat / iostat / sar |
3. 数据库自身状态 | 数据库内部是否存在异常(慢SQL、锁、连接、复制) | SQL命令、performance_schema 、日志 |
4. 高可用组件 | 高可用集群的切换逻辑、心跳、漂移、VIP状态 | Pacemaker/Keepalived/Orchestrator |
🧱 二、性能瓶颈排查步骤(以MySQL为例)
步骤一:确认现象
- 监控异常?CPU高?连接数满?慢查询飙升?
- 是否只影响某一个库或表?是否与业务高峰相关?
步骤二:检查系统资源(主机层)
top -c # 查看CPU使用高的进程
vmstat 1 5 # 内存和CPU瓶颈(上下文切换)
iostat -x 1 3 # 磁盘I/O瓶颈
sar -n DEV 1 3 # 网络流量
步骤三:数据库状态检查
SHOW PROCESSLIST; -- 活跃连接与等待状态
SHOW FULL PROCESSLIST; -- 检查慢SQL、锁等待
SHOW GLOBAL STATUS LIKE 'Threads%'; -- 连接线程信息
SHOW ENGINE INNODB STATUS\G -- 查看锁等待、死锁
或使用 performance_schema
/ sys
库:
SELECT * FROM sys.schema_table_lock_waits;
SELECT * FROM sys.user_summary_by_statement_type;
步骤四:慢SQL分析
- 开启慢查询日志(
slow_query_log
) - 使用
pt-query-digest
工具分析
pt-query-digest /var/log/mysql/slow.log
步骤五:资源瓶颈优化方向
类型 | 常见原因 | 优化建议 |
---|---|---|
CPU | SQL未优化/并发连接数高 | SQL调优、连接池、limit优化 |
I/O | 磁盘读写频繁、全表扫描 | 添加索引、避免临时表 |
内存 | 查询缓存命中率低、Join过大 | 增大缓冲池、避免大结果集操作 |
锁等待 | 表锁/行锁冲突 | 事务拆分、加索引、缩小锁定范围 |
🌐 三、高可用异常切换排查(MySQL主从、MGR、PostgreSQL Patroni等)
通用排查思路
-
确认切换是否真的发生?
- 检查主从状态、VIP是否漂移、是否触发Failover策略
-
定位切换原因?
- 是否是心跳超时、主机故障、监控误判或网络异常
-
切换过程是否顺利?
- 是否存在脑裂、回滚、同步滞后等问题
常见命令和工具
工具 | 功能 |
---|---|
systemctl status mysql | 检查MySQL是否异常退出 |
journalctl -xe | 查看MySQL异常日志 |
mysql> SHOW SLAVE STATUS\G | 检查主从复制状态 |
MGR:SHOW STATUS LIKE 'group_replication%' | 查看MGR状态 |
orchestrator / MHA / Patroni | 分析故障切换流程与日志 |
crm status (Pacemaker) | 查看资源漂移与切换状态 |
异常场景举例与排查方向
场景 | 原因分析 | 排查方法 |
---|---|---|
主库宕机,VIP未漂移 | Keepalived检测机制失败 | 查看 keepalived.log / ip addr |
节点被踢出集群 | 心跳丢失、资源不可用 | 查看 corosync / crm_mon 状态 |
从库滞后严重 | SQL线程错误、IO错误 | SHOW SLAVE STATUS\G 查找 Last_Errno |
切换失败,主库未降级 | 多主脑裂,切换逻辑错误 | 检查高可用组件的配置与心跳时间 |
🧠 四、抽象的排查思维导图(建议脑中记住)
故障告警
├─ 系统资源瓶颈
│ ├─ CPU / 内存 / 磁盘 / 网络
│ └─ 使用系统工具诊断(top, vmstat, iostat)
├─ 数据库内部异常
│ ├─ 连接池爆满?SQL慢?死锁?
│ └─ SHOW PROCESSLIST / 慢查询日志 / performance_schema
├─ 高可用组件异常
│ ├─ 心跳超时?网络漂移?VIP漂移失败?
│ └─ keepalived / pacemaker / orchestrator 日志
└─ 应用侧影响
└─ 连接失败、错误码、重连逻辑异常等
📌 建议工具列表(关系型数据库通用)
工具/命令 | 用途 |
---|---|
top , vmstat , iostat , sar | 系统层资源诊断 |
SHOW PROCESSLIST | 查看当前SQL执行状态 |
slow_query_log + pt-query-digest | SQL调优工具 |
performance_schema / sys | 内部统计和诊断 |
orchestrator , MHA , Patroni | 高可用切换诊断工具 |
tcpdump / ss | 网络问题分析 |
crm status , pcs status | 高可用组件资源诊断 |