“如果你的MySQL查询总是慢如蜗牛,索引优化、SQL调优试了个遍却收效甚微,那你可能忽略了性能优化的‘金字塔法则’!
这本书揭示了MySQL优化的层次化思维,从硬件、架构到SQL语句,层层拆解问题根源。本文将带你探索其中的核心技巧,让你的数据库性能提升10倍!”
更多内容请移步下方观看
基础篇
基础篇的内容设计,旨在为大家普及一些在性能优化过程中可能使用到的MySQL基础知识。
为了方便大家对MySQL的体系结构和组件有一个整体认识,首先,完整介绍MySQL的安装、升级和整个体系组成结构,并介绍在MySQL运行过程中所有后台线程的作用;
其次,由于在性能优化过程中需要依赖与表/索引相关的统计信息、事务锁和表级锁相关信息、在语句执行过程中的一些等待事件信息等,我们用14个章节重点介绍MySQL的4个系统库:
information_schema、mysql、performance_schema、sys,通过这些系统库中记录的MySQL的状态和性能数据,读者可以更精确地定位问题的根源,甚至定位到源码的某一行;
最后,除在MySQL复制、事务和SQL优化章节介绍MySQL自身的优化基础以外,还通过读写扩展的架构优化,抛砖引玉,希望引起读者对架构优化的思考。相信大家通过阅读基础篇的内容一定会有所收获。
案例篇
解决问题的前提是问题可模拟、可追溯。
可模拟其实就是模拟问题现场的情况,或者可以复现故障,保留故障现场,方便DBA诊断和分析问题;或者按照预估的压力模拟高并发的请求,查看可能出现的数据库问题。部分问题由于处于生产环境中或者找不到重现的办法,只能退而求其次,做到可追溯。
可追溯要求事后能最大程度地还原现场的情况或者当时故障的各种信息,根据监控、报警、日志等分析故障发生时问题的原因,佐证对这个问题根源的猜测。
该篇希望通过自底向上,从硬件和操作系统到MySQL参数/SQL语句的优化,再到架构设计上的优化,向读者展示在实际的应用中存取数据,使用结构化数据、关系数据库时可以尝试的一些优化手段。
当然,优化案例不可能穷举,囊括当前提升性能的所有手段,但是作者尽最大努力收集当前最流行和最有典型意义的优化手段与案例,在分析案例时也尽量以最直白、简练的语言描述问题发生的场景、现象,方便读者手动重现问题,并尽量翔实和细致地描述分析步骤、操作方法、执行结果,以方便读者了解分析思路和解决问题的方法论。
通过这种描述方法,以期弥补案例不足、篇幅有限,无法充分说明数据库性能优化具体方法的遗憾。同样也建议读者在阅读MySQL数据库优化相关章节时,结合“基础篇”中的数据库相关原理和“工具篇”中的具体工具使用方法一起阅读。这样对于为什么要做SQL语句优化、如何做SQL语句优化;关系数据库能做些什么、不能做些什么能有一个基本的了解,对于在具体的案例中为什么要这样优化更容易理解,进而真正形成自己的优化方法论和“套路”。
相信很多人都听过斯坦门茨给福特公司画一条线要价1万美元的故事。很多所谓的实战会讲如何去画这条线,知道如何画线和真正理解原理,遇到其他场景自己也能画这条线是不同的。我们希望通过本篇的介绍,读者下次遇到问题时,结合“基础篇”和“工具篇”的内容自己也能学会应该在哪里来画这条线。
工具篇
假如给你一台服务器,在上面安装一个MySQL实例,然后将公司重要的业务数据存储在里面,要求你保证数据库7×24小时不间断地高效运行。如何办到呢?
在正式上线前,你需要知道服务器的各项硬件性能指标的“天花板”、基于该服务器上运行的数据库的服务能力“天花板”,做到心里有数,日后遇到数据库响应慢的情况时,不至于分不清是服务能力瓶颈,还是业务SQL语句烂,抑或是其他原因导致的。因此,我们对硬件的基准测试工具FIO、数据库的基准测试工具sysbench和HammerDB等进行了详细介绍,同时还对常用的硬件规格和型号的查看命令进行了详细介绍,方便大家建立性能基线数据库。
在正式上线后,如果遇到了数据库响应慢或者故障问题,作为数据库管理员的我们,自然需要去排查问题、解决问题。如何排查呢?服务器不会自己告诉你它出什么问题了,需要借助一些行之有效的工具来查看服务器的各项状态指标。因此,我们对常用的查看系统负载的命令、常用的查看数据库负载和状态的工具进行了详细介绍。
如果无法通过服务器的当前负载和数据库的当前负载与状态信息判断出问题所在,那么也许就需要借助于在一定的时间范围内的服务器和数据库负载与状态信息进行分析,以便找出一些关键性能与状态指标值的增长趋势、变化规律。这就需要一套能够长时间持久化负载与状态信息的监控系统来实现。因此,我们对目前最炫酷的Prometheus+Grafana进行了详细介绍。
另外,可能有一些性能尖刺值出现的时间极短,监控系统在它的采集周期内来不及采集,此时就需要借助一个触发式采集数据的工具。当你找到了“罪魁祸首”,需要去解决它时,例如:假设是一条烂SQL语句导致的问题(事实上,数据库响应慢大多数时候都是烂SQL语句导致的),那么可能还需要一个能够对在一定的时间范围内出现的烂SQL语句进行统计分析的工具。因此,我们对Percona Toolkit工具包中与性能采集和分析相关的工具进行了详细介绍。
最后,有时候可能会误操作数据库,需要对误操作的数据进行恢复。误操作数据量少时可以考虑进行反向操作恢复数据,误操作数据量大时或者说无法通过简单的方法进行补救的,可能就需要使用备份数据进行恢复了。因此,我们对目前MySQL主流的备份工具以及主流的闪回工具进行了详细介绍。
经过几个星期的时间我也给是找到了这些内容
但是由于篇幅问题呢,暂且就只展示这么多
注:篇幅有限,资料已整理成文档,查看下方名片获取!