数据库异常智能分析与治理
如果无法正常显示,请先停止浏览器的去广告插件。
1. 数据库异常智能分析与治理
演讲人:蔡金龙@美团
2. 数据库异常智能分析与诊断
蔡金龙@美团
3. • 现状与问题
• 解决的思路
• 技术的方案
• 取得的结果
4. 现状与问题
实例高速增长带来的稳定性问题
运维效率
1. 分析定位难度高,以人为主,工具为辅
2. 工具之间联动少,单点之间来回切换
3. 处理过程不透明,协同沟通成本高
业务稳定性
1. 故障处理周期长,小问题容易变成大故障
2. 故障出现频次高,新业务故障持续不断发生
团队口碑
1. 用户投诉多,产品满意度评分低
规模增长与运维能力发展之间的不平衡问题凸显
5. 现状与问题
理想很丰满,现实很骨感
异常预防
分解+逻辑转换
异常处理
异常复盘/改进
• 每个环节具备10%~20%的能力,保障能力短板明显
• 自助化和自动化能力不足,整个链条没有打通,未形成合力
6. • 现状与问题
• 解决的思路
• 技术的方案
• 取得的结果
7. 解决的思路
既解决短期矛盾,也立足长远发展(Think Big Picture, Think Long Term)
从历史故障复盘来看,有80%的故障80%的时间花在分析和定位上。因此,短期解决异常分析和定位效率ROI最高。长期来
看,只有完善能力版图,才能持续不断的提升整个数据库的稳定性保障能力
8. 解决的思路
夯实基础能力,赋能上层业务,实现数据库自治
欲伐大木 ,岂能骤折。必以斧斤伐之,渐至微细,然后能折。--雄才大略的清太祖努尔哈赤“伐树理论”
9. 解决的思路
建立科学的评估体系,持续的跟踪产品质量
美国著名管理学者卡普兰说过“没有度量就没有管理”
运营
指标拆解
核心
指标
产品
自治
10. • 现状与问题
• 解决的思路
• 技术的方案
• 取得的结果
11. 技术的方案
技术架构的顶层设计
设计的7大原则
安全性:对业务影响极小,几乎可以忽略不计
丰富性:系统覆盖历史上出现过故障场景所涉及
的异常指标
实时性:秒级以内的延迟,实时分析和汇总
完备性:数据上报,不要错报,不要漏报
易用性:掌握简单数据库知识即可使用,面向小
白而不是专家
可闭环:分析准确,决策正确,执行明确
低成本:极致的数据压缩
12. 技术的方案
采集层:慢查询采集设计
慢查询:对于日志采集agent来说,准确率、延时、资源消耗三者不可兼得
13. 技术的方案
采集层:全量SQL采集演进策略、技术方案和技术实现
演进策略
方案调研
技术实现
14. 技术的方案
采集层:摸底测试与丢失率优化
15. 技术的方案
采集层:CPU利用率分析与优化
用pprof工具对进程CPU占用进行了画像分析,从左边的火焰图归纳出CPU消耗的大头
16. 技术的方案
采集层:CPU利用率分析与优化
脱敏优化:脱敏下沉,功能解耦
延迟脱敏的结果
rds-agent QPS 丢失率 CPU利用率
改进前 50833.50 63.95% 601.39%
改进后 51246.47 31.95% 259.59%
17. 技术的方案
采集层:CPU利用率分析与优化
1. 缩短链路: 分流、worker、解析SQL合并成一个goroutine解析器
2. 主动切换:解析器每5ms从网络协议包的队列中取一次
效果 QPS 丢失率 CPU利用率
改进前 51246.47 31.95% 259.59%
改进后 51229.54 0% 206.87%
链路优化的结果
18. 技术的方案
采集层:CPU利用率分析与优化
GC优化:内存管理池化
rds-agent QPS 丢失率 CPU利用率
改进前 51229.54 0% 206.87%
改进后 51275.11 0% 153.32%
池化的结果
19. 技术的方案
采集层:CPU利用率分析与优化
协议优化:过滤无用的空包
过滤的结果
20. 技术的方案
采集层:CPU利用率分析与优化
优化前后数据对比
21. 技术的方案
计算存储:大数据通道的建设与优化
具备能力:支持大于10万实例的数据采集能力
设计原则
1.
2.
3.
4.
5.
全内存计算:尽量确保所有的计算都在单线程内\单进
程内做纯内存的操作,追求性能跟吞吐量的极致
最小化对MySQL实例的影响:尽量计算后置,不在
Agent上做复杂计算,确保不对RDS实例生产较大影
响
上报原始数据:MySQL实例上报的数据尽量维持原始
数据状态、不做或者尽量少做数据加工
数据压缩:由于上报量巨大,需要保障上报的数据进
行极致的压缩
内存消耗可控:通过理论和实际压测保障几乎不可能
会发生内存溢出
22. 技术的方案
计算存储:分钟级别的数据聚合
Mafka Consumer线程对相同模板SQL的消息按分钟粒度进行聚合计算,以(RDSIP+DBName+SQL模版ID+SQL查询结束
时间)所在分钟数为聚合键,聚合健的计算公式为aggkey=RDS_IP_DBName_SQL_Template_ID_Time_Minute
(Time_Minute的值取自SQL查询结束时间所在的“年、月、日、时、分钟”)
23. 技术的方案
计算存储:过期数据的补偿机制
24. 技术的方案
计算存储:避免跨机器的开销,使性能跟吞吐量达到极限
25. 技术的方案
计算存储:日均千亿级SQL的极致压缩
遵循层层减流原则,使用消息压缩、预聚合、字典化、分钟级聚合的手段,保证流量在经过每个组件时进行递减,最终达到
节省带宽减少存储量的目的
26. 技术的方案
能力评估指标体系
27. 技术的方案
基于数据驱动的异常分析和根因定位的顶层设计
参考: https://mp.weixin.qq.com/s/QMbsV1609NVx60zI1CKffw
28. 技术的方案
主从延迟规则展示
顺序
分析决策:规则的提炼
300+异常告警复盘,
深入的内核原理分析
回顾
提炼
复盘
总结
分析
规则生成
规则名称
触发条件
1 slave_checkpoint_period太大 slave_checkpoint_period >= 延迟告警阀值 * 50%
2 系统时钟偏移 |从库当前时间 - 标准时间| >= 延迟告警阈值 * 50% (|XX| 表示取绝对值)
3 执行MASTER_DELAY SQL_Delay数值 >= 延迟告警阈值 * 50%
4 主从切换 检查高可用系统是否存在主从切换事件
5 库迁移操 检查迁移服务是否存在库迁移事件
6 主库大事务 (主库事务执行 > 20s || 主库事务影响行数 > 100000) && 从库复制线程出现该事务
7 MDL锁阻塞 从库复制线程state出现waiting for XXX lock
9 主库写流量突增 从库写QPS突增 || 从库Innodb_rows_XXX突增 || 从库Innodb日志写入量突增
10 未启用并行复制 从库slave_parallel_workers == 0
11 从库读流量突增 读QPS突增 && cpu load突增 && IO利用率突增 && 本机慢查突增
12 从库出现大查询 读QPS不突增 && IO利用率突增 && innodb_rows_read突增 && SQL执行
时长>20s
13 实例重启 从库Uptime < 60s
14 IO/SQL线程重启 从库MySQL运行日志中抓取特征文本
15 硬件故障 硬件检查平台进行检查
29. 技术的方案
以铜为镜,可以正衣冠;以史为镜,可以知兴替;以人为镜,可以明得失
30. 技术的方案
验证是改进的基础,持续验证,持续改进
31. • 现状与问题
• 解决的思路
• 技术的方案
• 取得的结果
32. 取得的结果
分析决策:指标评估(基于异常告警)
70% 99% 80%
P0覆盖率 帮助率 召回率
80%
准确率
33. 取得的结果
目标回顾与用户反馈
用户问卷调查
34. 取得的结果
客户案例
会话触发
告警
分析+拉群
根因定位
35. 取得的结果
客户案例
延迟触发
告警
分析+拉群
根因定位
36. THANK YOU!