Java磨砺分清浊,实战定乾坤:MySQL性能优化感悟
《Java磨砺分清浊,实战定乾坤:MySQL性能优化感悟》要点: 曾几何时,我工作以后很长一段时间不知道该学些什么,月薪也稳稳地定格在了那里,我明白如果不做些什么,迟早会被应届生替换下去,因为道理很简单,你除了经验没有任何地方比他强,公司不会花两倍的钱来雇一个没什么区其余人. 直到我看了xxx的《打造扛得住的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数据库,也为大家突破两万月薪保驾护航. 最后我想说的是:宝剑锋从磨砺出,梅花香自苦寒来.希望大家都能赓续的学习进取,突破一个又一个的技术巅峰!
《Java磨砺分清浊,实战定乾坤:MySQL性能优化感悟》是否对您有启发,欢迎查看更多与《Java磨砺分清浊,实战定乾坤:MySQL性能优化感悟》相关教程,学精学透。编程之家PHP学院为您提供精彩教程。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- Mysql实例解决mysql ERROR 1017:Can't find file: '
- Mysql入门mysql中engine=innodb和engine=myisam的区别介绍
- Mysql实例Java的Struts框架中append标签与generator标签的使
- MYSQL教程mysql 中存在null和空时创建唯一索引的方法
- Mysql入门mysql 5.7.30安装配置方法图文教程
- Mysql常用sql语句(20)- 子查询重点知识
- Mysql入门mysql出现Error performing load command的解决方
- MySQL全文搜索不适用于像’house’这样的单词
- php-MySQL连接需要时间才能打开
- MYSQL数据库细数MySQL中SQL语句的分类