目录
数据库故障排查全景指南:从预警到恢复的完整体系
1. 故障分类与症状识别
1.1 故障类型矩阵
故障类别 | 典型症状 | 紧急程度 | 影响范围 |
---|---|---|---|
连接故障 | 应用报连接超时/拒绝连接 | 高 | 全局性 |
性能故障 | 查询响应时间超过阈值 | 中 | 业务关键操作 |
数据故障 | 数据不一致/丢失 | 极高 | 核心数据 |
存储故障 | 磁盘空间不足/I/O延迟高 | 高 | 系统稳定性 |
1.2 症状快速诊断树
2. 核心排查工具解析
2.1 通用诊断工具
MySQL诊断套件:
SHOW FULL PROCESSLIST; -- 查看实时线程
EXPLAIN FORMAT=JSON SELECT ...; -- 分析查询计划
SELECT * FROM information_schema.INNODB_TRX; -- 检查长事务
PostgreSQL专用工具:
SELECT * FROM pg_stat_activity; -- 活动会话查看
pg_stat_statements -- 统计SQL执行情况
2.2 性能分析工具对比
工具 | 适用场景 | 输出示例 |
---|---|---|
mysqldumpslow | 慢查询日志分析 | Count: 12 Time=2.1s … |
pt-query-digest | 高级查询分析 | Rank 1: 45% total time |
vmstat | 系统资源监控 | r b swpd free buff … |
3. 分场景排查流程
3.1 连接故障排查
3.2 性能下降排查
-
定位慢查询:
-- MySQL SELECT * FROM sys.schema_table_statistics WHERE rows_fetched > 100000; -- PostgreSQL SELECT query, total_time FROM pg_stat_statements ORDER BY total_time DESC LIMIT 10;
-
分析锁竞争:
SHOW ENGINE INNODB STATUS; -- 查看锁信息 SELECT * FROM sys.innodb_lock_waits;
4. 典型故障案例分析
案例1:索引失效导致CPU飙升
现象:
- CPU使用率持续95%以上
- 慢查询日志暴增
排查过程:
- 使用
SHOW PROCESSLIST
发现全表扫描 EXPLAIN
验证索引使用情况- 发现统计信息过时导致优化器误判
解决方案:
ANALYZE TABLE orders; -- 更新统计信息
ALTER TABLE orders ADD INDEX (create_time); -- 添加缺失索引
案例2:连接池耗尽导致服务不可用
现象:
- 应用报"Too many connections"
- 新连接无法建立
应急处理:
SET GLOBAL max_connections=1000; -- 临时扩容
SHOW VARIABLES LIKE 'wait_timeout'; -- 检查超时设置
KILL 12345; -- 终止僵尸连接
5. 故障预防体系构建
5.1 监控指标清单
指标类别 | 监控项 | 告警阈值 |
---|---|---|
连接资源 | 活跃连接数 | > 最大连接数80% |
查询性能 | 慢查询数量 | > 100/分钟 |
存储空间 | 数据目录使用率 | > 85% |
5.2 自动化巡检脚本
# 连接健康检查
def check_connections(db):
max_conn = db.query("SHOW VARIABLES LIKE 'max_connections'").value
used_conn = db.query("SHOW STATUS LIKE 'Threads_connected'").value
if used_conn / max_conn > 0.8:
alert("连接数超过阈值!")
# 存储空间检查
def check_storage(db):
df = psutil.disk_usage('/data')
if df.percent > 85:
alert("存储空间不足!")
6. 应急恢复策略
6.1 数据恢复流程
6.2 故障报告模板
故障分析报告
故障现象:
[简要描述故障表现]
影响范围:
- 受影响系统:订单系统
- 影响时长:2小时
- 业务损失:约500笔交易
根因分析:
- 慢查询导致CPU过载(SQL见附件)
- 连接池配置不合理
改进措施:
- 优化问题SQL
- 调整连接池参数
- 增加慢查询监控
通过本指南,您将掌握:
- 数据库故障的系统化分类方法
- 关键诊断工具的高级使用技巧
- 典型场景的标准化排查流程
- 长效预防机制的构建策略
- 紧急恢复的标准操作流程
实践建议:
- 建立故障知识库积累案例
- 定期进行故障演练
- 实现关键指标的自动化监控
- 制定完善的应急预案
- 持续优化数据库配置参数
遵循本指南的系统方法,可使平均故障恢复时间(MTTR)降低60%以上,有效保障数据库系统的稳定运行。