为了账号安全,请及时绑定邮箱和手机立即绑定

磨砺分清浊,实战定乾坤:MySQL性能优化感悟

标签:
PHP Java MySQL

曾几何时,我工作以后很长一段时间不知道该学些什么,月薪也稳稳地定格在了那里,我明白如果不做些什么,迟早会被应届生替换下去,因为道理很简单,你除了经验没有任何地方比他强,公司不会花两倍的钱来雇一个没什么区别的人。

直到我看了慕课网的《打造扛得住的MySQL数据库架构》,我好像重新找到了最初开始学习的激情和未来的发展方向。

课程一开始让我有种山重水复疑无路,柳暗花明又一村的感觉,打开了一个MySQL的新世界,我第一次知道MySQL还有存储引擎这个东西,而且它还是那么的重要,对于课程其中一部分的感悟分享给大家,篇幅有限不能倾囊道来,大家有条件的可以自己去看一下视频。

MySQL中的数据用各种不同的技术存储在文件(或者内存)中。这些技术中的每一种技术都使用不同的存储机制、索引技巧、锁定水平并且最终提供广泛的不同的功能和能力。通过选择不同的技术,你能够获得额外的速度或者功能,从而改善你的应用的整体功能。而MySQL是支持自定义存储引擎的,所以除了第三方存储引擎,如果实力足够甚至可以自己开发出一套存储引擎。

我们来看一下MySQL常用存储引擎的特点:
图片描述

在MySQL5.58版本以前,默认是使用MyISAM存储引擎的,也就是说5.58以前的MySQL默认是不支持事务的,而5.58以后呢,默认使用的是Innodb存储引擎,是支持事务的。Innodb实现事务的方式是通过Redo Log 和 Undo Log来实现的。

Redo Log:主要用来实现事务的持久性,存储的是已提交的事务。由两部分组成,一个是内存中的重做日志缓冲区,由innodb_log_buffer_size决定其大小,我们可以在MySQL命令行下使用show variables like 命令来查看,另一个则是重做日志文件是以id_logfile开头的文件,存储在MySQL的data目录下,它的数量是由innodb_log_files_in_group参数来决定的,同样可以使用show variables like命令来查看。
图片描述

Undo Log:主要作用是实现MVCC(多版本并发控制),存储的是未提交的事务。当事务进行回滚的时候,就需要使用到Undo Log中的信息了。

Redo Log进行的是顺序写入,在数据库运行的时候,不需要对Redo Log进行读取操作,而Undo Log则是需要进行随机的读写的,从MySQL5.6版本开始,Undo Log可以独立于系统表空间的存在,如果条件允许,可以把它放置在固态硬盘中,能大大增加服务器的性能。

那么如何选择一个合适的存储引擎来优化MySQL的性能呢,首先要考虑一下如果需要事务的支持则最好使用Innodb,如果不需要使用事务,并且大部分都是插入和查询的操作,可以使用MyISAM,如果只是插入,很少查询的话Archive也是个不错的选择。

但是我们的数据库在生产环境中是需要进行备份的,前面所介绍的所有存储引擎中,只有Innodb有免费的在线热备份方案,要么就是收费的方案。而且崩溃后恢复数据,MyISAM损坏的几率要高于Innodb,所以即使不需要事务的支持,也要优先考虑Innodb,除非是某些比较特别的情况。

同时对于Innodb的事务有一个重要的参数Innodb_flush_log_at_trx_commit,它有三个选项:
0:每秒进行一次log写入cache,并flush log到磁盘,事务提交时不作任何操作
1[默认]:在每次事务提交以后,将log写入cache,并flush log到磁盘
2[建议]:事务提交提交以后,执行log数据写入到cache,并且每秒执行一次flush log到磁盘

第一种,容易丢失数据;第二种,安全高但性能最差;第三种,性能相对较高并且相对安全。需要注意的是,第一种设置MySQL进程崩溃就会至少丢失一秒数据。第三种则是提交到内存以后,准备写入磁盘时服务器死机,才可能丢失一秒的数据。

关于MySQL的优化还有大量的操作,比如我们操作系统参数的配置,MySQL默认参数的修改,硬件的选择,表的结构设计,索引的设计,查询优化,主从同步等等,这些能够从根本上解决MySQL的性能问题,打造真正扛得住的MySQL数据库,也为大家突破两万月薪保驾护航。

最后我想说的是:宝剑锋从磨砺出,梅花香自苦寒来。希望大家都能不断的学习进取,突破一个又一个的技术巅峰!

点击查看更多内容
82人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消