“今年除夕当晚,春晚红包将会随着央视春节联欢晚会的直播接棒登场,除了红包以外我们还为大家准备了 “小度”系列智能产品作为特别奖品,让大家感受到智能生活的乐趣!”


这是17日下午百度与央视的官宣,这意味着对小度商城技术团队的又一大挑战。


无论怎样的技术架构,怎样的技术选型,怎样的系统优化,数据最终还是要落到数据库上。真是天意,恰巧百度大学为我们安排了“SLG人才能力提升第二站,《MySQL数据库SQL性能优化》培训与你相约”,有种及时雨的感觉。

百度春晚红包之前的备战_调优


讲师是张冬洪,和我也算老相识了,在《7行Python的人脸识别》一文中就用了我们的合影,呵呵。


百度春晚红包之前的备战_MySQL_02


MySQL 的性能优化,每个有经验的程序员都会说出个一二三,老码农自己也写过《老曹眼中的MySQL调优》, 但是从系统性的视角来看,或者大规模的数据库优化,都应该是实践出真知。


这是一个定制后的学习过程,分为六个部分:


  • 硬件选型: 硬件优化
  • 原理和性能:参数调优
  • 开发规范:常见错误
  • 运维利器:常见工具
  • 提升效率:参数优化
  • 故障排除:捉放异常


本着保护作者知识产权的原则,记一下内容的概要,以及自己认为有趣的视角。例如硬件性能的金字塔模型:

百度春晚红包之前的备战_调优_03


还是沿着《面向全栈的技术管理》中时空观行走,空间的载体之一就是硬件环境,然后是MySQL系统组成和InnoDB的引擎构成。

百度春晚红包之前的备战_性能优化_04


百度春晚红包之前的备战_mysql_05

深入后才能浅出,才能进一步了解内存的相关参数,IO相关参数,以及与复制相关的参数,进而进行参数调优,这里没有捷径,更没有“银弹”。


开发规范同样很多,包括命名规范,库表设计,字段设计,索引规范,SQL设计规范,以及操作行为规范。虽然这些规范略显琐碎,“千里之堤,溃于蚁穴”。就像体操比赛那样,先有标准分,然后才是加分项。但是,如果上升的模式层面,可能更有系统性。


操作系统层面的调优同样不可或缺,Gregg的图是被引用最多——


百度春晚红包之前的备战_性能优化_06


自己在《全栈必备 Linux基础》一文中也引用过这张图,深入学习的话,可以看那本巨著《性能之巅》。


对于系统运维,自己一直钟爱 Percona Toolkit,现在冬洪的公司也提供了一些其他的便利工具。无监控,不运维,本次学习中推荐的工具是

Prometheus + mysqld_exporter + Grafana以及PMM。


SQL的语句优化离不开执行计划(explain), Profile定位QUERY代价消耗,以及SQL Optimizer Trace,核心无它,都是减少物理IO,与IO相关的部分参数有:


百度春晚红包之前的备战_性能优化_07


总之,本次学习的内容很厚实,由于时间有限,越发感到信息量很大。自我梳理一下,面向大规模数据库的系统调优可能是这样的一个金字塔结构:


百度春晚红包之前的备战_春晚红包_08


“是故学然后知不足,教然后知困。知不足,然后能自反也;知困,然后能自强也。”

《礼记·学记》