来,看看MySQL 5.6, 5.7, 8.0的新特性

对于MySQL的历史,相信很多人早已耳熟能详,这里就不要赘述。下面仅从产品特性的角度梳理其发展过程中的里程碑事件。

1995年,MySQL 1.0发布,仅供内部使用。

1996年,MySQL 3.11.1发布,直接跳过了MySQL 2.x版本。

1999年,MySQL AB公司成立。同年,发布MySQL 3.23,该版本集成了Berkeley DB存储引擎。该引擎由Sleepycat公司开发,支持事务。在集成该引擎的过程中,对源码进行了改造,为后续可插拔式存储引擎架构奠定了基础。

2000年,ISAM升级为MyISAM存储引擎。同年,MySQL基于GPL协议开放源码。

2002年,MySQL 4.0发布,集成了后来大名鼎鼎的InnoDB存储引擎。该引擎由Innobase公司开发,支持事务,支持行级锁,适用于OLTP等高并发场景。

2005年,MySQL 5.0发布,开始支持游标,存储过程,触发器,视图,XA事务等特性。同年,Oracle收购Innobase公司。

2008年,Sun以10亿美金收购MySQL AB。同年,发布MySQL 5.1,其开始支持定时器(Event scheduler),分区,基于行的复制等特性。

2009年,Oracle以74亿美金收购Sun公司。

2010年,MySQL 5.5发布,其包括如下重要特性及更新。

InnoDB代替MyISAM成为MySQL默认的存储引擎。

多核扩展,能更充分地使用多核CPU。

InnoDB的性能提升,包括支持索引的快速创建,表压缩,I/O子系统的性能提升,PURGE操作从主线程中剥离出来,Buffer Pool可拆分为多个Instances。

半同步复制。

引入utf8mb4字符集,可用来存储emoji表情。

引入metadata locks(元数据锁)。

分区表的增强,新增两个分区类型:RANGE COLUMNS和LIST COLUMNS。

MySQL企业版引入线程池。

可配置IO读写线程的数量(innodb_read_io_threads,innodb_write_io_threads)。在此之前,其数量为1,且不可配置。

引入innodb_io_capacity选项,用于控制脏页刷新的数量。

2013年,MySQL 5.6发布,其包括如下重要特性及更新。

GTID复制。

无损复制。

延迟复制。

基于库级别的并行复制。

mysqlbinlog可远程备份binlog。

对TIME, DATETIME和TIMESTAMP进行了重构,可支持小数秒。DATETIME的空间需求也从之前的8个字节减少到5个字节。

Online DDL。ALTER操作不再阻塞DML。

可传输表空间(transportable tablespaces)。

统计信息的持久化。避免主从之间或数据库重启后,同一个SQL的执行计划有差异。

全文索引。

InnoDB Memcached plugin。

EXPLAIN可用来查看DELETE,INSERT,REPLACE,UPDATE等DML操作的执行计划,在此之前,只支持SELECT操作。

分区表的增强,包括最大可用分区数增加至8192,支持分区和非分区表之间的数据交换,操作时显式指定分区。

Redo Log总大小的限制从之前的4G扩展至512G。

Undo Log可保存在独立表空间中,因其是随机IO,更适合放到SSD中。但仍然不支持空间的自动回收。

可dump和load Buffer pool的状态,避免数据库重启后需要较长的预热时间。

InnoDB内部的性能提升,包括拆分kernel mutex,引入独立的刷新线程,可设置多个purge线程。

优化器性能提升,引入了ICP,MRR,BKA等特性,针对子查询进行了优化。

可以说,MySQL 5.6是MySQL历史上一个里程碑式的版本,这也是目前生产上应用得最广泛的版本。

2015年,MySQL 5.7发布,其包括如下重要特性及更新。

2018年,MySQL 8.0发布,其包括如下重要特性及更新。

引入了原生的,基于InnoDB的数据字典。数据字典表位于mysql库中,对用户不可见,同mysql库的其它系统表一样,保存在数据目录下的mysql.ibd文件中。不再置于mysql目录下。

Atomic DDL。

重构了INFORMATION_SCHEMA,其中,部分表已重构为基于数据字典的视图,在此之前,其为临时表。

PERFORMANCE_SCHEMA查询性能提升,其已内置多个索引。

不可见索引(Invisible index)。

降序索引。

直方图。

公用表表达式(Common table expressions)。

窗口函数(Window functions)。

角色(Role)。

资源组(Resource Groups),可用来控制线程的优先级及其能使用的资源,目前,能被管理的资源只有CPU。

引入了innodb_dedicated_server选项,可基于服务器的内存来动态设置innodb_buffer_pool_size,innodb_log_file_size和innodb_flush_method。

快速加列(ALGORITHM=INSTANT)。

JSON字段的部分更新(JSON Partial Updates)。

自增主键的持久化。

可持久化全局变量(SET PERSIST)。

默认字符集由latin1修改为utf8mb4。

默认开启UNDO表空间,且支持在线调整数量(innodb_undo_tablespaces)。在MySQL 5.7中,默认不开启,若要开启,只能初始化时设置。

备份锁。

Redo Log的优化,包括允许多个用户线程并发写入log buffer,可动态修改innodb_log_buffer_size的大小。

默认的认证插件由mysql_native_password更改为caching_sha2_password。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/3b64515ca515cfbfe7d14d8be742d2c3.html