MySQL版本特性
MySQL5.6版本
MySQL5.6是Oracle的得意之作,该版本是让MySQL真正走向高性能数据库的里程碑版本,在此之前的MySQL版本中,虽然功能也较为丰富,但性能相较于同期的Oracle数据库而言,其实表现并不佳。直到Oracle公司接手MySQL后,首先就对其进行了大刀阔斧的改进,从Oracle中移植了很多特性过来,同时废弃一些原有的鸡肋功能,也优化了很多内部实现,最终打造出了MySQL5.6这个版本。 ## 1.支持只读事务(Read-Only) 在此之前的版本中,MySQL默认会为每个事务都分配事务ID,所有事务都一视同仁,但在5.6版本中开始支持只读事务,MySQL内部会有两个事务链表,一个是只读事务链表,一个是正常事务链表。 这样做的好处在于:其他事务利用MVCC机制读取数据时,生成的ReadView读视图中的活跃事务链表会小很多很多,因此遍历的速度更快,同时也无需为其分配回滚段,从而进一步提升了MySQL整体的查询性能。 ## 2. InnoDB存储引擎增强 >主要就说一下InnoDB的核心:BufferPool缓冲池相关的改进项,主要有两点:刷盘策略改进、缓冲池预热。 ##### 缓冲池刷盘策略优化 在之前的版本的InnoDB-BufferPool缓冲池中,变更过的数据页会共用MySQL后台的刷盘线程,也就是redo-log、undo-log、bin-log.....一系列内存到磁盘的刷盘工作,都是采用同一批线程来完成。在MySQL5.6版本中,BufferPool引入了独立的刷盘线程,也就意味着缓冲池中变更过的数据页会由专门的线程来负责刷盘,这样能够提升缓冲池的刷盘效率,无需排队等待刷写。 同时BufferPool的刷盘线程,还支持开启多线程并发刷盘操作,这样在缓冲池较大的情况下,能够进一步提升刷盘的效率,从而让数据落盘的效率更快,从一定程度上也提升了数据的安全性,毕竟内存中的数据随时都有几率丢失,但落盘后基本上不是硬件损坏,都有可能恢复过来。 ##### BufferPool缓冲池预热 缓冲池预热是一种特别好的机制,在之前版本的内存缓冲池中,当MySQL关闭时,原本内存中的热点数据都会被清空,重启后所有的热点数据又需要经过时间的沉淀,然后才能留在内存中。但MySQL5.6版本中,每次关闭MySQL时都会将内存中的热点数据页保存到磁盘中,当重启时会直接从磁盘中载入之前的热点数据,避免了热点数据的重新“选拔”! 而预热的含义是:出现意外变故时,先将上次选拔赛中最优秀的那批人,把对应的名字保存在一个名单中,处理完变故后,只需要找到这个名单,把名单上的人喊过来继续选拔即可,这样做显然将效率提升了N倍。 ## 3. 新增Performance_Schema库监控全局资源 如果对MySQL比较熟悉的小伙伴应该清楚,在之前的版本中存在一个名为information_schema的库,其中会记录一些MySQL运行期间需要用到的表,比如视图管理、存储过程与函数的管理、临时表的管理、会话的管理、触发器的管理、表分区的管理......,这些内容的信息都会被存储到information_schema库中。 而在MySQL5.6中,官方又加入了一个新的自带库:performance_schema,这里面会记录:数据库整体的监控信息,比如事务监控信息、最近执行的SQL信息、最近连接的客户端信息、数据库各空间的使用信息......,基于这个库可以在线上构建出一个完善的MySQL监控系统: - Statements/execution stages:MySQL统计的一些消耗资源较高的SQL语句。 - Table and Index I/O:MySQL统计的那些表和索引会导致I/O负载过高。 - Table Locks:MySQL统计的表中数据的锁资源竞争信息。 - Users/Hosts/Accounts:消耗资源最多的客户端、IP机器、用户。 - Network I/O ## 4. 索引下推机制(Index Condition Pushdown) Index Condition Pushdown索引下推简称ICP,它是MySQL5.6版本以后引入的一种优化机制。 索引下推在MySQL5.6版本之后是默认开启的,可以通过命令set optimizer_switch='index_condition_pushdown=off|on';命令来手动管理。 ## 5. MRR(Multi-Range Read)机制 Multi-Range Read简称为MRR机制,这也是和索引下推一同在MySQL5.6版本中引入的性能优化措施,那什么叫做MRR优化呢? MRR机制主要针对于辅助索引的回表查询,减少离散IO,并且将随机IO转换为顺序IO,从而提高查询效率。 ```sql SET @@optimizer_switch='mrr=on|off,mrr_cost_based=on|off'; ``` 可以通过上述这条命令开启或关闭MRR机制,MySQL5.6及以后的版本是默认开启的。 ## 6. 主从数据同步的复制改进 在MySQL5.6中,针对于主从数据同步的问题,主要引入了GTID复制、无损复制(增强半同步复制)、延时复制、并行复制这四种技术。 ## 7.MySQL5.6中的其他特性 - 索引增强:全文索引支持InnoDB与亚洲语种分词、支持空间索引等。 - 表分区增强:单表分区数量最大可创建8192个、分区锁性能提升、支持cloumns分区类型。 - 增强日期类型:time、datetime、timestamp精度提升到微秒级,datetime容量缩减到5字节。 - 日志增强:Redo-log文件大小限制由4G→512G、Undo-log文件可独立指定位置存储。 - 支持在线DDL(Online DDL)、对limit语句做了优化......  除开上述外,还有很多很多与之前不同的变更,官方号称在5.6中修复了1667个Bug,因此想要更为全面的了解,可阅读[《MySQL官网-5.6版手册》](https://dev.mysql.com/doc/refman/5.6/en/ "《MySQL官网-5.6版手册》")。
顶部
收展
底部
[TOC]
目录
MySQL5.6版本
MySQL5.7版本
MySQL8.0版本
相关推荐
MySQL教程
MySQL命令
MySQL索引
MySQL事务
MySQL锁机制