MySQL 5.7 到 8.0,Oracle 官方跳跃了 Major Version 版本号,随之而来的就是在 MySQL 8.0 上作了许多重大更新,在往企业级数据库的路上大步前行,全新 Data Dictionary 设计,支持 Atomic DDL,全新的版本升级策略,安全和帐号管理增强,InnoDB 功能加强等,目前小版本已经 release 到 8.0.16,新的功能仍然在持续推出。
RDS MySQL 8.0 产品是阿里云推出的 MySQL 系列云产品之一,使用彻底兼容 MySQL 8.0 的阿 里云 AliSQL 8.0 分支,除了官方在 MySQL 8.0 推出的全新功能外,AliSQL 沉淀了许多在 Alibaba 集团电商业务和云上几十万客户在使用 MySQL 过程当中遇到的问题和需求,以此来加固AliSQL, 提高 AliSQL 的性能和稳定性。
下面分别对 MySQL 8.0 和 AliSQL 8.0 相关的版本和功能作简短的介绍:html
MySQL 8.0 摒弃了 Server Layer 定义的 FRM 文件和其它非事务表,使用了一组 InnoDB 表来 保存数据字典,支持事务特性。mysql
在 Data Dictionary 支持事务特性的基础上,8.0 增长了一个 DDL log 字典表,用来协调在
DDL 过程当中,对数据字典,文件系统 和 事务系统的修改,作到原子性。正则表达式
从 8.0.16 开始,对于系统表的修改,抛弃了 mysql_upgrade工具,使用在系统重启的时候,进 行升级。sql
帐号方面,从 8.0 开始,支持 role 对权限进行便捷管理,以及新增多个系统权限,分别对应新 增了 ROLE_EDGES,GLOBAL_GRANTS 两个系统表;mysql schema 下的涉及权限和用户相关的表 更改为 InnoDB 引擎,支持事务特性,保证了帐号管理语句的原子性。数据库
认证方面,caching_sha2_password 做为默认的认证 plugin,以提高安全,但要注意并不能和 8.0 以前的client进行兼容。
链路加密,若是编译了OpenSSL 1.1.1 及以上,MySQL 8.0 SSL 将支持到 TLSv1.3 版本。
系统帐号,在 8.0.16 新增 SYSTEM_USER 权限,用于区分 系统帐号仍是普通帐户,能够对用户 进行分类管理。express
在 InnoDB 引擎中,新增了一个引擎私有的系统表 innodb_dynamic_metadata,自增值就保存 在这个表里,在对每张表进行修改 auto increment 值的时候,都使用 redo log 进行保护,在作
heckpoint 的时候,持久化到这个系统表中,保证下次重启后,auto increment 可以从持久化中恢 复出来,而且不受事务上下文回滚而影响。安全
在高并发的状况下,InnoDB 引擎中对于事务锁的死锁检测,将是影响性能 scale 的重要因素,
8.0 后提供了一个参数innodb_deadlock_detect:https://dev.mysql.com/doc/refman/8.0/en/innodb-parameters.html#sysvar_innodb_deadlock_detect,用来打开或者关闭引擎的死锁检测,在业 务可以明确相关风险的状况下,关闭死锁检测,能大幅提高并发能力。性能优化
在 InnoDB 引擎中,用户建立的临时表将统一到 ibtmp 文件的临时表空间中; 对于系统运行过 程中产生内存临时表,8.0后启用了新的 TempTable 引擎,支持 blob 字段,功能上优于 memory ngine。session
SELECT ... FOR SHARE 和 SELECT ... FOR UPDATE 新增了 NOWAIT 和SKIP LOCKED 语法,减小长时间和非必要的阻塞。并发
InnoDB 解决了长期困扰 DBA 的加字段要 copy 整张表数据的问题。如今能够快速的增长字段,只修改数据字典,而不用修改表中的记录自己。
InnoDB 目前支持在 clustered index 上进行并行查询,提供innodb_parallel_read_threads,https://dev.mysql.com/doc/refman/8.0/en/innodb-parameters.html#sysvar_innodb_parallel_read_threads,参数控制session内的并行度。
Redo的写入一直是 InnoDB 高并发状况下的瓶颈,8.0 开始:
在Json上,8.0 增长了更多的功能性,详见 MySQL 8.0 的 document。
InnoDB 继续优化 partial update on lob data,对于仅仅修改不多字节的 lob 字段,可以大幅 减小 undo data,并提高效率。
1) 支持 invisible index,方便用户和 DBA 调试 statement。
2)descending indexes,提高降序扫描的效率。
3)Common table expressions,支持 with 语法完成。
4)Window functions,增长大量窗口函数
5)Regular expression,从新设计了正则表达式的支持。
除了 MySQL 8.0 官方的特性之外,AliSQL 8.0 在新功能,性能提高,稳定性保证,可诊断性上 作了大量的改进:
Top SQL:
AliSQL 在 statement 级别上,增长了新的性能诊断指标,方便更快更准确的量化 SQL 的开销:
效果以下所示:
新增表和索引级别的统计:
AliSQL 8.0 增长对 Sequence 对象的支持,方便和高效的获取单调惟一值:
InnoDB 大文件删除带来稳定性开销,因此 AliSQL 8.0 提供了异步删数据文件的机制:
参数设置:
展现临时文件列表:
AliSQL 针对用户没有建 PK 的表,默认添加一个隐含主键,以加速 slave 端的 SQL apply。 查看方法:
AliSQL 新增 kill_idle_transaction_timeout 参数,以便对超时的事务链接进行 kill,防止事务长时间未提交带来的系统风险。
AliSQL 8.0 针对 slow log 收集过程当中,对用户实例的影响,以及truncate带来的阻塞可能,提 供了rotate slow log table的功能,影响更小,更快捷,并保证零数据丢失的收集方式。
AliSQL 8.0 从新设计的 audit log 模块,提供了四种刷新策略,分别是:
提供适合不一样业务模式的 audit log 配置供用户选择。
AliSQL 针对 SSL 链路,静态编译了OpenSSL 1.0 版本,目前支持到 TLSv1.2 版本。
AliSQL 针对 semi sync 和 MDL 进行了性能优化,提高了 semi sync 的性能,大幅减小了 MDL 锁阻塞的可能性。
本文做者:云攻略小攻
本文为云栖社区原创内容,未经容许不得转载。