58同城高级架构师 沈剑:58速运数据库降压优化实践

初鸿禧

2017/11/14 发布于 技术 分类

随着业务量的增加,数据库数据量与压力都越来越大,如何进行优化是将要分享的话题:1)哪些业务场景容易成为数据库瓶颈;2)如何发现数据库瓶颈的主要矛盾;3)数据库降压常见架构优化手段;4)58速运数据库降压架构优化实践。

文字内容
1. 58速运数S据AC库C降2压01优75化8沈实剑 践
2. 关于-我 2017• 百度 - 高级工程师 • 58同城 - 高级架构师,技术委员会主席,技术学院优秀讲师 CC• 58到家 - 高级技术总监,技术委员会主席 SA• 58速运 - CTO • “架构师乊路”作者,深夜写写技术文章 • 本质:技术人一枚
3. 目录 • DBA的定位 • DB优化方法 • 58速运优化实践 • 总结 SACC2017
4. 一、SADCBCA2的0定17位
5. DBA的职责 • 设计与定义数据库系统 • 监控数据库系统的运行 • 线上数据操作与维护 • 数据安全性保障 • 数据库系统性能调优 •… SACC2017
6. 实际情况 2017• 数据库设计:执行研发哥哥提交的建库/建表/建索引语句,提出质疑时,被通知今天要上线 • 监控:研发哥哥把数据库玩挂掉的时候,被质问为什么没有报警 CC• 线上操作:执行研发哥哥提交的增删查改语句,提出质疑时,被催促业务需求紧急 SA• 安全性:研发哥哥发现执行错了,被要求回滚数据,还被质疑恢复数据慢 • 性能调优:被研发哥哥要求加内存,加连接数,加从库(心里想着这么低的并发,劢不劢 就是join,批量扫库,加多少从库也没用) •…
7. DBA千万不要S沦AC为C“2工01单7 执行工具”
8. 业务DBA,从S丏A业C的C2角0度17带给业务价值
9. 业务DBA 2017• 数据库设计:业务DBA,从丏业的角度,帮劣研发做好早期设计 • 线上操作:业务DBA,需要了解被执行工单的业务背景,来龙去脉,做好把关 CC• 性能调优:业务DBA,从丏业的角度,结合业务迚行优化,给出优化建议 SA• …
10. 研发哥哥:好,S不A是C你C的2锅0,1你7 说我怎么改?
11. 二、业务SDABCAC系2统01优7 化方法
12. 找主要S矛A盾C,C针20对17性优化
13. 怎么S找AC主C要2矛01盾7?
14. 找到主要矛盾,要量化 • 哪些是主要矛盾? (1)执行次数多的SQL (2)执行时间长的SQL (3)扫描行数多的SQL SACC2017• 怎么获取这些数据? (1)获取所有SQL,执行时间 (2)按照某个维度排序 (3)得到主要矛盾
15. 落地技巧 2017• Mysql分析工具: pt-query-digest,用于分析慢查询 • 把慢SQL的时间设为0,从slowlog中获取所有SQL的相关信息,对性能的影响在10%以内 SACC• 可以获取总体分析结果,分组排序的分析结果,单Query ID的分析结果
16. 主要矛盾分析 2017• 按照总执行时间【time】排序 • 需要重点关注调用次数【Calls】和单次调用时间【R/Call】 CC• 通过【Query ID】可以得到具体SQL语句 SA• 通过【explain】,可以得到具体SQL的【索引命中】情况以及【扫描行数】情况
17. 怎么S针AC对C性2优01化7?
18. 三、5S8A速C运C2优0化17实践
19. 扫描行数多 2017• WHERE uid not in ( select userid from t_app_pusher ) • WHERE note LIKE '%XX' CC• WHERE YEAR(date) <= ‘2017' SA• WHERE state IN (0, 1) AND createtime >= '2016011-01' • 建立20+以上的索引,删除无效索引30+
20. 处理时间长 2017• WHERE phone=13800001234 • SELECT * FROM order WHERE date < = CURDATE() CC优化为: SA$curDate = date('Y-m-d'); $res = mysql_query( ' SELECT * FROM order WHERE date < = $curDate');
21. 访问次数多 2017• 可以发现TOP-SQL中都是读请求 • 增加缓存能大大降低数据库压力 CC(1)用户缓存 SA(2)司机缓存 (3)推送订单缓存 • 为什么没有加缓存?
22. 为什么调用次数Calls差异这么大 2017• 前台访问量大,查询条件简单,返回数据量小 • 后台访问量小,查询条件复杂,返回批量数据 SACC• 架构优化,前台与后台架构分离
23. 丼个写请求的例子 2017• 写操作耗时不长,但大量单条写操作容易引发大量磁盘IO • 司机地理位置,经纬度存储,以方便计算路径 CC• 数据库存储 SA• 批量数据库存储,降低写压力 • 用hive/ES存储,降低数据库压力
24. 数据库瓶颈? 2017• 这个锅,DBA不背 • 数据库QPS低于千级别,就有瓶颈,八成是研发哥哥的问题(索引,代码,架构) SACC• 改迚推不劢?就直接告诉他问题在哪里
25. S四AC、C总2结017
26. 总结 2017• pt-query-digest,慢SQL设为0 • 获取分组排序分析结果,得到次数多,耗时长,行数多的主要矛盾SQL CC• 针对主要矛盾进行优化 SA(1)索引添加 (2)SQL优化 (3)缓存增加 (4)架构优化 • 观念的改变:由“工单型DBA”转变为“业务伙伴DBA”
27. Q&A 谢谢! “架构师之路”公众号 SACC2017
28. SACC2017