千金良方:MySQL性能优化金字塔法则
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

推荐序2

小学课本告诉我们,蒸汽机是瓦特看到水壶被水蒸气顶起来以后冥思苦想发明出来的。但实际情况其实是,17世纪末期,托马斯·纽克曼(Thomas Newcomen)发明了体积庞大的“蒸汽机”,利用蒸汽的力量把煤矿里的水抽出来,避免了矿井透水、积水的问题。1765年,詹姆士·瓦特(James Watt)发明了分离式冷凝器,改进了纽克曼蒸汽机,使得蒸汽机的效率提升了4倍。当然,纽克曼蒸汽机也不是凭空出现的,纽克曼蒸汽机是基于Thomas Savery发明的Savery蒸汽泵的,继续往前追溯,可以追溯到公元1世纪古希腊力学家希罗(Heron of Alexandria)发明的汽转球。

我并不否认瓦特的贡献,正是有了他对蒸汽机做功效率的改变,才提升了煤炭、钢铁的产量,促进了轮船、火车的产生,才有了工业革命。我这里想说的是人们很早就发现了蒸汽做功的理论,但是把它利用起来,把它真正用于我们的生产生活中来提高生产效率的过程是曲折而漫长的,理论和原理的发明是耀眼的明星,工程化实践和持续不断的改进却像星光传到我们的眼睛一样,需要经过漫长的过程,凝聚着很多“无名”科学家和工程师的努力与心血。

MySQL之父Monty(Michael Widenius)在1981年写了MySQL的第一行代码以后,在开源的帮助下MySQL成长为目前最流行的开源数据库,同样其也凝聚了非常多的开发者、DBA、工程师的心血。2009年,在MySQL被Oracle收购以后,47岁的Monty开发了MariaDB分支,到现在MariaDB也已经10年了,他仍然亲自参与写代码,并且负责大部分代码的Review工作,我作为MariaDB基金会的中国成员在跟Monty一起Review代码时,经常会叹服老爷子对全局的把控能力和对细节的严谨态度。2016年当Monty在阿里巴巴交流分享时,我问Monty:“你怎么看阿里巴巴在MySQL方面的能力以及贡献?”他说:“你贡献的多源复制和闪回功能,对MariaDB很有用,因此我觉得你和你的团队是很有能力的,也希望能获得更多的来自各大厂商和社区的贡献。”

MySQL之所以能成为现在最流行的开源数据库,这跟它的开放性、包容性是分不开的。它的入门门槛低到用一条命令就能把MySQL安装起来,你能在程序开发的入门资料中很容易就找到MySQL的配套使用教程,你可以不用付任何费用就能在自己的环境中部署起来对外承载业务。我之前提交的代码补足了MySQL在某些方面的功能,是对它的贡献;苏普验证测试时发现MySQL 5.6的半同步Bug汇报给社区,是对它的贡献;李春他们撰写MySQL书籍,也是对它的贡献。我和阿里巴巴的其他同事翻译《高性能MySQL》时就体会到了出版一本书的艰辛,所以看到《千金良方:MySQL性能优化金字塔法则》这本沉甸甸的书时,完全能感受到三位作者在写书时的痛苦与艰辛。

MySQL从5.5版本开始引入performance_schema,从5.6版本开始把默认值设置为on,我个人认为从5.7版本(对应MariaDB 10.1)开始它才真正成熟起来。从某种程度上说,performance_schema的引入对MySQL来说可以类比于瓦特发明分离式冷凝器改进蒸汽机,使得开发人员或者DBA对MySQL的性能损耗能准确定位到源码层级,对MySQL的管控也可以更加精细化。这本书是我了解到的第一本体系化介绍performance_schema的书,对MySQL性能优化有兴趣的读者可以参阅。

另外,本书“案例篇”也是我见过的相对比较系统化介绍性能优化方面的内容,从服务器、操作系统、MySQL、SQL和锁方面整体梳理了MySQL性能优化的方方面面,相关案例都具有代表性,很值得参考和验证,也希望读者能参考案例来验证和测试,并举一反三,结合自己环境的实际场景构建起性能改进的方法论。

蒸汽机的改进不是一蹴而就的,性能的改进也是贯穿整个MySQL发展史的,就像瓦特改进蒸汽机引发了工业革命一样,我希望本书的出版能进一步促进大家对MySQL/MariaDB性能优化的关注,能为最流行的开源数据库MySQL/MariaDB大厦添砖加瓦。

彭立勋