很多朋友问我MySQL性能调优怎么入门,今天来分享我的学习路线和经验,帮大家少走弯路。
很多,朋友,问,我,MySQL,性能,调优,怎么,入门,觉得,性能,调优,很,高深,很,难,学,不知道,从,哪里,开始,其实,我,最,开始,也,觉得,性能,调优,很,难,很,神秘,后来,慢慢,摸索,出,了,一条,学习,路线,一步步,入门,了,MySQL,性能,调优。
今天,这篇,文章,就,来,分享,我,的,MySQL,性能,调优,学习,路线,和,经验,包括,我,是,怎么,一步步,入门,的,学,了,哪些,东西,看,了,哪些,资料,踩,了,哪些,坑,希望,能,给,想,学习,MySQL,性能,调优,的,朋友,一些,参考,和,启发,帮,大家,少,走,弯路,快速,入门。
一、为什么要学MySQL性能调优
在,说,学习,路线,之前,先,说说,为什么,要,学,MySQL,性能,调优,很多,朋友,可能,觉得,我,就是,个,开发,写,好,代码,就,行,了,性能,调优,是,DBA,的,事情,和,我,没关系,其实,这种,想法,是,错误,的,MySQL,性能,调优,不,只是,DBA,的,事情,也是,开发,人员,必须,掌握,的,技能。
首先,大部分,应用,的,性能,瓶颈,都,在,数据库,尤其是,MySQL,作为,最,常用,的,关系型,数据库,很多,系统,都,用,它,存储,数据,如果,MySQL,性能,不,好,整个,应用,的,性能,都,会,受,影响,用户,体验,差,甚至,系统,崩溃,所以,不管,你,是,开发,还是,DBA,都,需要,懂,一些,MySQL,性能,调优,的,知识,能,在,遇到,性能,问题,的,时候,快速,定位,和,解决。
其次,作为,开发,人员,你,写,的,SQL,和,表,结构,设计,直接,影响,MySQL,的,性能,很多,性能,问题,都,是,因为,SQL,写,得,不好,或者,表,结构,设计,不合理,导致,的,比如,没,加,索引,索引,加,得,不对,SQL,写,得,太,复杂,全表,扫描,等等,这些,问题,DBA,可能,不,太,好,解决,因为,他们,不,了解,业务,逻辑,需要,开发,人员,自己,去,优化,所以,开发,人员,懂,MySQL,性能,调优,能,在,写,代码,的,时候,就,避免,很多,性能,问题,从,源头,提升,性能,这,比,事后,调优,更,有效。
最后,懂,MySQL,性能,调优,能,提升,你,的,竞争力,现在,很多,公司,招聘,开发,人员,都,要求,懂,数据库,性能,优化,如果你,懂,MySQL,性能,调优,能,在,面试,和,工作,中,脱颖而出,获得,更,好,的,机会,和,薪资,而且,性能,调优,是,一个,很,有,技术,含量,的,技能,能,体现,你,的,技术,深度,和,解决,问题,的,能力,所以,很,值得,学习。
二、我的学习路线:从入门到进阶
下面,来说,说,我,的,MySQL,性能,调优,学习,路线,我,把,它,分成,了,几个,阶段,每个,阶段,学,什么,怎么,学,都,分享,给,大家。
第一阶段:打好MySQL基础
学,性能,调优,之前,一定,要,先,打,好,MySQL,的,基础,这,是,最,重要,的,一步,如果,基础,不,扎实,性能,调优,就是,空中楼阁,学,不,好,的,我,最,开始,就是,基础,不,太,扎实,直接,去,看,性能,调优,的,文章,和,书籍,很多,东西,看,不,懂,后来,回头,补,基础,才,慢慢,入门,了,所以,一定,要,先,打,好,基础。
基础,包括,哪些,内容,呢,首先,是,MySQL,的,基本,使用,比如,SQL,语句,的,编写,增删改查,多表,查询,子查询,联合查询,等等,这些,是,最,基本,的,必须,熟练,掌握,然后,是,MySQL,的,架构,和,原理,比如,MySQL,的,逻辑,架构,连接,管理,查询,缓存,解析器,优化器,执行器,存储引擎,等等,了解,MySQL,是,怎么,工作,的,一条,SQL,是,怎么,执行,的,这些,对,性能,调优,很,重要,因为,只有,了解,了,MySQL,的,工作,原理,才能,知道,性能,瓶颈,可能,在,哪里,怎么,优化。
然后,是,存储引擎,尤其是,InnoDB,因为,现在,大部分,MySQL,都,用,InnoDB,作为,存储引擎,要,了解,InnoDB,的,架构,和,原理,比如,InnoDB,的,缓冲池,Buffer Pool,重做,日志,redo log,回滚,日志,undo log,事务,隔离,级别,锁,机制,MVCC,等等,这些,是,InnoDB,的,核心,也是,性能,调优,的,重点,很多,性能,问题,都,和,这些,有关,所以,一定,要,深入,了解。
还有,索引,的,原理,和,使用,索引,是,MySQL,性能,调优,最,常用,也,最,有效,的,手段,一定,要,深入,了解,索引,的,原理,比如,B+树,索引,的,结构,聚簇,索引,和,非聚簇,索引,的,区别,联合,索引,的,最左,前缀,原则,覆盖,索引,索引,下推,等等,这些,都是,索引,优化,的,核心,必须,掌握,还要,会,用,EXPLAIN,查看,SQL,的,执行,计划,判断,索引,是否,生效,SQL,有没有,性能,问题,这,是,性能,调优,的,基本,功。
基础,阶段,我,推荐,看,《MySQL必知必会》,先,入门,SQL,的,基本,使用,然后,看,《高性能MySQL》,这本书,是,MySQL,性能,调优,的,经典,书籍,虽然,有点,厚,但是,内容,很,全面,很,深入,值得,反复,读,还有,MySQL,官方,文档,也,很,重要,很多,原理,和,参数,的,说明,官方,文档,最,权威,最,准确,要,养成,查,官方,文档,的,习惯。
第二阶段:学习性能调优的方法论和工具
打,好,基础,之后,就,可以,开始,学习,性能,调优,的,方法论,和,工具,了,性能,调优,不是,瞎,调,是,有,方法论,的,要,先,定位,问题,再,分析,原因,再,优化,解决,最后,验证,效果,这个,流程,很,重要,要,掌握。
首先,要,学会,怎么,发现,和,定位,性能,问题,比如,怎么,判断,MySQL,有没有,性能,问题,性能,瓶颈,在,哪里,是,CPU,瓶颈,还是,IO,瓶颈,还是,锁,等待,还是,SQL,慢,查询,等等,这,需要,会,用,一些,监控,和,诊断,工具,比如,MySQL,自带,的,SHOW STATUS,SHOW PROCESSLIST,SHOW ENGINE INNODB STATUS,等等,还有,慢查询,日志,slow query log,能,记录,执行,慢,的,SQL,帮,你,定位,慢SQL,还有,performance_schema,MySQL,的,性能,架构,能,更,详细,地,监控,MySQL,的,各种,性能,指标,这些,工具,都,要,学会,使用。
然后,要,学会,分析,性能,问题,的,原因,比如,发现,了,慢SQL,怎么,分析,它,为什么,慢,是,没,走,索引,还是,索引,不,合适,还是,SQL,写,得,不好,还是,数据量,太,大,还是,锁,等待,等等,这,需要,用,EXPLAIN,查看,执行,计划,分析,索引,使用,情况,扫描,行数,等等,还要,结合,SHOW PROFILE,查看,SQL,执行,各个,阶段,的,耗时,定位,具体,慢,在,哪里,这些,都是,分析,性能,问题,的,基本,方法,要,熟练,掌握。
然后,要,学会,优化,的,方法,和,技巧,性能,优化,主要,分,几个,层面,SQL,优化,索引,优化,表,结构,优化,配置,优化,架构,优化,等等,SQL,优化,就是,优化,SQL,语句,的,写法,比如,避免,SELECT *,避免,在,索引,列,上,用,函数,避免,模糊,查询,前缀,通配符,等等,索引,优化,就是,合理,设计,和,使用,索引,比如,给,常用,查询,条件,加,索引,设计,合适,的,联合,索引,避免,过多,索引,等等,表,结构,优化,就是,优化,表,的,设计,比如,选择,合适,的,数据,类型,避免,过大,的,字段,适度,反范式,等等,配置,优化,就是,优化,MySQL,的,配置,参数,比如,InnoDB,缓冲池,大小,日志,大小,连接数,等等,架构,优化,就是,从,架构,层面,优化,比如,读写,分离,分库分表,缓存,等等,这些,优化,方法,都,要,学习,和,掌握,根据,不同,的,性能,问题,选择,合适,的,优化,方法。
这个,阶段,我,推荐,继续,看,《高性能MySQL》,里面,有,很多,性能,调优,的,方法,和,技巧,还有,姜承尧,的,《MySQL技术内幕:InnoDB存储引擎》,深入,讲解,InnoDB,的,原理,和,优化,很,值得,看,还有,一些,好,的,技术,博客,比如,MySQL,官方,博客,Percona,博客,等等,都,有,很多,性能,调优,的,文章,和,案例,可以,多,看看。
第三阶段:实战练习,积累经验
学,了,理论,和,方法,之后,一定,要,实战,练习,积累,经验,性能,调优,是,一门,实践性,很,强,的,技能,光,看,书,不,实践,是,学,不,好,的,只有,在,实际,中,遇到,问题,解决,问题,才能,真正,掌握,性能,调优。
怎么,实战,练习,呢,首先,可以,在,自己,的,测试,环境,里,模拟,性能,问题,然后,尝试,定位,和,优化,比如,造,一些,大,数据量,的,表,写,一些,慢SQL,然后,用,EXPLAIN,分析,用,各种,工具,定位,然后,优化,看,优化,前后,的,性能,对比,这样,能,熟悉,性能,调优,的,流程,和,方法,积累,经验。
然后,在,实际,工作,中,遇到,性能,问题,的,时候,要,主动,去,分析,和,解决,不要,怕,不要,觉得,是,DBA,的,事情,和,自己,无关,要,把,它,当作,学习,的,机会,主动,去,定位,问题,分析,原因,尝试,优化,即使,最后,是,DBA,解决,的,你,也,能,从,中,学到,很多,东西,而且,解决,的,问题,多,了,经验,就,丰富,了,性能,调优,的,能力,自然,就,提升,了。
还有,可以,参与,一些,开源,项目,或者,在,技术,社区,回答,别人,的,性能,问题,帮,别人,分析,和,解决,MySQL,性能,问题,这,也,能,锻炼,自己,的,能力,积累,经验,而且,能,接触,到,各种,不同,的,性能,问题,拓宽,自己,的,视野,提升,解决,问题,的,能力。
这个,阶段,没有,什么,特别,的,书籍,推荐,主要,就是,多,实践,多,积累,经验,性能,调优,就是,一个,经验,积累,的,过程,见,的,问题,多,了,解决,的,问题,多,了,自然,就,熟练,了,就能,快速,定位,和,解决,各种,性能,问题,了。
第四阶段:深入研究,形成体系
当,你,有,了,一定,的,实战,经验,之后,就,可以,深入,研究,形成,自己,的,知识,体系,了,这个,阶段,可以,深入,研究,一些,更,底层,的,东西,比如,InnoDB,的,源码,MySQL,的,优化器,原理,锁,机制,的,细节,等等,这些,更,深入,的,知识,能,让,你,对,MySQL,的,理解,更,透彻,性能,调优,的,能力,也,能,更,上,一层,楼。
还,可以,研究,一些,MySQL,的,新,特性,和,周边,工具,比如,MySQL,8.0,的,新,特性,Window,函数,CTE,等等,还有,Percona,Server,MariaDB,等,MySQL,分支,的,特性,以及,ProxySQL,MHA,Orchestrator,等,MySQL,周边,工具,这些,能,拓宽,你,的,视野,让,你,有,更,多,的,手段,来,做,性能,调优,和,数据库,管理。
还,可以,形成,自己,的,性能,调优,方法论,和,检查,清单,比如,遇到,性能,问题,先,查,什么,再,查,什么,怎么,定位,怎么,分析,怎么,优化,把,这些,总结,成,一套,自己,的,方法,和,流程,这样,以后,遇到,性能,问题,就能,按部就班,地,解决,不会,手忙脚乱,这,也是,从,入门,到,精通,的,标志。
这个,阶段,可以,看,一些,更,深入,的,书籍,和,源码,比如,《MySQL技术内幕》,还有,MySQL,源码,相关,的,资料,也,可以,多,参加,一些,技术,分享,和,会议,和,其他,MySQL,专家,交流,学习,他们,的,经验,和,方法,不断,提升,自己。
三、性能调优的常见误区和坑
在,学习,和,实践,性能,调优,的,过程,中,我,也,踩,了,很多,坑,有,一些,常见,的,误区,下面,分享,给,大家,帮,大家,避免,踩,坑。
1. 不要盲目调参数,先定位问题
很多,人,学,性能,调优,最,开始,就,喜欢,调,MySQL,的,配置,参数,觉得,把,参数,调,好,了,性能,就,上去,了,其实,这,是,一个,很大,的,误区,大部分,性能,问题,都,不是,参数,的,问题,而是,SQL,的,问题,索引,的,问题,表,结构,的,问题,或者,架构,的,问题,如果,不,先,定位,问题,盲目,调,参数,不仅,不,能,解决,问题,还,可能,引入,新,的,问题,所以,性能,调优,一定,要,先,定位,问题,找到,性能,瓶颈,在哪里,然后,针对性,地,优化,不要,上来,就,调,参数。
2. 不要过度优化,要考虑投入产出比
性能,调优,不是,越,极致,越,好,要,考虑,投入,产出,比,有些,优化,可能,需要,花,很多,时间,和,精力,但是,性能,提升,很,有限,这样,的,优化,就,不,太,值得,比如,一条,SQL,从,10ms,优化,到,5ms,可能,需要,花,很多,时间,但是,对,用户,体验,影响,很,小,这样,的,优化,就,不,太,值得,而,一条,SQL,从,10s,优化,到,100ms,可能,只,需要,加,个,索引,花,很少,时间,但是,性能,提升,巨大,这样,的,优化,就,很,值得,所以,性能,调优,要,优先,解决,那些,影响,大,容易,解决,的,问题,考虑,投入,产出,比,不要,过度,优化,追求,极致,而,忽略,了,更,重要,的,问题。
3. 不要只看单个SQL,要看整体
很多,人,性能,调优,只,看,单个,SQL,的,执行,时间,觉得,单个,SQL,快,了,整体,性能,就,好,了,其实,不,一定,有时候,单个,SQL,执行,时间,不长,但是,执行,次数,非常,多,累计,耗时,很,大,对,整体,性能,影响,很,大,而,有些,SQL,执行,时间,长,但是,执行,次数,少,累计,耗时,不,大,对,整体,性能,影响,小,所以,性能,调优,要,看,整体,看,累计,耗时,看,对,系统,整体,的,影响,不要,只,看,单个,SQL,的,执行,时间,要,优先,优化,那些,累计,耗时,大,对,整体,性能,影响,大,的,SQL,这样,效果,才,好。
4. 优化后一定要验证效果
很多,人,做,了,优化,之后,就,觉得,完事,了,不,去,验证,优化,效果,其实,这,是,不对,的,优化,之后,一定,要,验证,效果,看,性能,是不是,真的,提升,了,提升,了,多少,有没有,引入,新,的,问题,因为,有时候,你,觉得,优化,了,但是,实际,效果,可能,不,明显,甚至,反而,性能,下降,了,或者,引入,了,新,的,问题,比如,加,了,索引,查询,快,了,但是,写入,慢,了,所以,优化,之后,一定,要,验证,效果,对比,优化,前后,的,性能,指标,确认,优化,有效,没有,副作用,这样,才算,真正,完成,了,优化。
5. 不要忽略业务层面的优化
很多,人,性能,调优,只,关注,技术,层面,比如,SQL,索引,配置,等等,但是,忽略,了,业务,层面,的,优化,其实,有些,性能,问题,从,业务,层面,优化,效果,更,好,比如,有些,查询,其实,业务,上,不,需要,实时,查询,可以,改成,异步,或者,缓存,有些,统计,查询,可以,预计算,存,结果,不用,每次,都,实时,统计,有些,功能,其实,可以,简化,减少,不必要,的,查询,和,计算,这些,业务,层面,的,优化,往往,比,技术,层面,的,优化,效果,更,好,成本,更,低,所以,性能,调优,不,要,只,关注,技术,层面,也,要,从,业务,层面,思考,看,有没有,更,好,的,优化,方式。
四、推荐的学习资源
最后,推荐,一些,我,觉得,好,的,MySQL,性能,调优,学习,资源,帮,大家,快速,入门。
书籍:
- 《MySQL必知必会》:入门,SQL,基础,适合,新手
- 《高性能MySQL》:MySQL,性能,调优,经典,书籍,内容,全面,深入,必看
- 《MySQL技术内幕:InnoDB存储引擎》:深入,讲解,InnoDB,原理,和,优化,值得,看
- 《MySQL排错指南》:讲解,MySQL,问题,排查,和,解决,很,实用
网站和博客:
- MySQL官方文档:最权威,最准确,的,资料,一定要,会,查
- MySQL官方博客:最新,的,MySQL,资讯,和,技术,文章
- Percona博客:很多,MySQL,性能,调优,和,运维,的,好,文章
- 阿里云数据库博客,腾讯云数据库博客:很多,实战,案例,和,经验,分享
工具:
- EXPLAIN:查看,SQL,执行,计划,必备
- SHOW PROFILE:查看,SQL,执行,各阶段,耗时
- performance_schema:MySQL,性能,监控,和,诊断
- pt-query-digest:Percona,工具,分析,慢查询,日志
- sysbench:MySQL,压力,测试,工具
五、写在最后
MySQL,性能,调优,是,一个,需要,长期,学习,和,积累,的,技能,不,可能,一蹴而就,但是,只要,找,对,学习,路线,一步步,来,先,打,好,基础,再,学,方法论,和,工具,然后,多,实战,积累,经验,最后,深入,研究,形成,体系,就,能,慢慢,入门,并且,不断,提升,成为,MySQL,性能,调优,的,高手。
我,自己,也是,从,一个,什么,都,不,懂,的,新手,慢慢,摸索,过来,的,踩,了,很多,坑,也,积累,了,一些,经验,今天,把,我,的,学习,路线,和,经验,分享,出来,希望,能,帮,到,想,学习,MySQL,性能,调优,的,朋友,少,走,一些,弯路,快速,入门。
当然,我,自己,也,还,在,学习,和,提升,的,路上,还有,很多,东西,不,懂,还,需要,继续,努力,这篇,文章,只是,我,个人,的,一些,经验,和,心得,可能,不,一定,都,对,也,不,一定,适合,所有人,仅供,参考,欢迎,大家,在,评论,区,分享,你们,的,学习,经验,和,心得,一起,交流,一起,进步。
最后,希望,大家,都,能,学好,MySQL,性能,调优,成为,技术,大牛,在,工作,中,遇到,性能,问题,都,能,迎刃而解,做,出,高性能,的,系统,也,希望,这篇,文章,能,给,大家,带来,一些,帮助,和,启发,谢谢,大家,的,阅读。
评论(0)
暂无评论,快来抢沙发~
评论功能仅对会员开放,请先登录
登录