MySQL 8.0 简介

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 相关的版本和功能做简短的介绍:

MySQL 8.0 版本更新

1. 数据字典

MySQL 8.0 摒弃了 Server Layer 定义的 FRM 文件和其它非事务表,使用了一组 InnoDB 表来 保存数据字典,支持事务特性。

2. Atomic DDL

在 Data Dictionary 支持事务特性的基础上,8.0 增加了一个 DDL log 字典表,用来协调在
DDL 过程中,对数据字典,文件系统 和 事务系统的修改,做到原子性。

3. 升级

从 8.0.16 开始,对于系统表的修改,抛弃了 mysql_upgrade工具,使用在系统重启的时候,进 行升级。

4. 安全和账号管理

账号方面,从 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 权限,用于区分 系统账号还是普通账户,可以对用户 进行分类管理。

5. Auto increment 持久化

在 InnoDB 引擎中,新增了一个引擎私有的系统表 innodb_dynamic_metadata,自增值就保存 在这个表里,在对每张表进行修改 auto increment 值的时候,都使用 redo log 进行保护,在做
heckpoint 的时候,持久化到这个系统表中,保证下次重启后,auto increment 能够从持久化中恢 复出来,并且不受事务上下文回滚而影响。

6. 死锁检测

在高并发的情况下,InnoDB 引擎中对于事务锁的死锁检测,将是影响性能 scale 的重要因素,
8.0 后提供了一个参数innodb_deadlock_detecthttps://dev.mysql.com/doc/refman/8.0/en/innodb-parameters.html#sysvar_innodb_deadlock_detect,用来打开或者关闭引擎的死锁检测,在业 务能够明确相关风险的情况下,关闭死锁检测,能大幅提升并发能力。

7. 临时表

在 InnoDB 引擎中,用户创建的临时表将统一到 ibtmp 文件的临时表空间中; 对于系统运行过 程中产生内存临时表,8.0后启用了新的 TempTable 引擎,支持 blob 字段,功能上优于 memory ngine。

8. Lock

SELECT ... FOR SHARE 和 SELECT ... FOR UPDATE 新增了 NOWAIT 和SKIP LOCKED 语法,减少长时间和非必要的阻塞。

9. Instant add column

InnoDB 解决了长期困扰 DBA 的加字段要 copy 整张表数据的问题。现在可以快速的增加字段,只修改数据字典,而不用修改表中的记录本身。

10. 并行查询

InnoDB 目前支持在 clustered index 上进行并行查询,提供innodb_parallel_read_threadshttps://dev.mysql.com/doc/refman/8.0/en/innodb-parameters.html#sysvar_innodb_parallel_read_threads,参数控制session内的并行度。

11. Redo优化

Redo的写入一直是 InnoDB 高并发情况下的瓶颈,8.0 开始:

  • 用户线程可以并发的copy redo 日志到 log buffer中
  • 用户线程可以以更松散的方式把 dirty block 加入到脏块链表中
  • 独立的写线程完成 redo 的持久化

12. Json加强

在Json上,8.0 增加了更多的功能性,详见 MySQL 8.0 的 document。

13. Partial update on lob

InnoDB 继续优化 partial update on lob data,对于仅仅修改很少字节的 lob 字段,能够大幅 减少 undo data,并提升效率。

14. 优化器和对象相关

1) 支持 invisible index,方便用户和 DBA 调试 statement。
2)descending indexes,提升降序扫描的效率。 
3)Common table expressions,支持 with 语法完成。 
4)Window functions,增加大量窗口函数
5)Regular expression,重新设计了正则表达式的支持。

AliSQL 8.0 功能介绍

除了 MySQL 8.0 官方的特性以外,AliSQL 8.0 在新功能,性能提升,稳定性保证,可诊断性上 做了大量的改进:

1. 诊断

Top SQL:
AliSQL 在 statement 级别上,增加了新的性能诊断指标,方便更快更准确的量化 SQL 的开销:

效果如下所示:

表和索引统计

新增表和索引级别的统计:

InnoDB IO 统计

2. Sequence

AliSQL 8.0 增加对 Sequence 对象的支持,方便和高效的获取单调唯一值:

3. 大文件异步删除

InnoDB 大文件删除带来稳定性开销,所以 AliSQL 8.0 提供了异步删数据文件的机制:
参数设置:

展示临时文件列表:

4. 隐含主键

AliSQL 针对用户没有建 PK 的表,默认添加一个隐含主键,以加速 slave 端的 SQL apply。 查看方法:

5. 事务超时

AliSQL 新增 kill_idle_transaction_timeout 参数,以便对超时的事务连接进行 kill,防止事务长时间未提交带来的系统风险。

6. Rotate slow log

AliSQL 8.0 针对 slow log 收集过程中,对用户实例的影响,以及truncate带来的阻塞可能,提 供了rotate slow log table的功能,影响更小,更快捷,并保证零数据丢失的收集方式。

7. 审计日志

AliSQL 8.0 重新设计的 audit log 模块,提供了四种刷新策略,分别是:

提供适合不同业务模式的 audit log 配置供用户选择。

8. 安全特性

AliSQL 针对 SSL 链路,静态编译了OpenSSL 1.0 版本,目前支持到 TLSv1.2 版本。

9. 优化

AliSQL 针对 semi sync 和 MDL 进行了性能优化,提升了 semi sync 的性能,大幅减少了 MDL 锁阻塞的可能性。

本文作者:云攻略小攻

原文链接

本文为云栖社区原创内容,未经允许不得转载。

MySQL 8.0 技术详解的更多相关文章

  1. MySQL 执行计划explain详解

    MySQL 执行计划explain详解 2015-08-10 13:56:27 分类: MySQL explain命令是查看查询优化器如何决定执行查询的主要方法.这个功能有局限性,并不总会说出真相,但 ...

  2. 腾讯技术分享:GIF动图技术详解及手机QQ动态表情压缩技术实践

    本文来自腾讯前端开发工程师“ wendygogogo”的技术分享,作者自评:“在Web前端摸爬滚打的码农一枚,对技术充满热情的菜鸟,致力为手Q的建设添砖加瓦.” 1.GIF格式的历史 GIF ( Gr ...

  3. MySQL复制相关参数详解

    MySQL复制相关参数详解 作者:尹正杰  版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.复制相关系统变量 1>.server_id 是必须设置在master和每个slave上的唯一标 ...

  4. MySQL集群搭建详解

    概述 MySQL Cluster 是MySQL 适合于分布式计算环境的高实用.可拓展.高性能.高冗余版本,其研发设计的初衷就是要满足许多行业里的最严酷应用要求,这些应用中经常要求数据库运行的可靠性要达 ...

  5. mysql数据恢复,binlog详解

    个人博客:mysql数据恢复,binlog详解 binlog日志恢复数据,是挽救错误操作和数据损坏一根救命稻草,所以认识和使用binglog对于技术人员还是很有必要的 binlog一般用于 主从复制 ...

  6. 「视频直播技术详解」系列之七:直播云 SDK 性能测试模型

    ​关于直播的技术文章不少,成体系的不多.我们将用七篇文章,更系统化地介绍当下大热的视频直播各环节的关键技术,帮助视频直播创业者们更全面.深入地了解视频直播技术,更好地技术选型. 本系列文章大纲如下: ...

  7. 手游录屏直播技术详解 | 直播 SDK 性能优化实践

    在上期<直播推流端弱网优化策略 >中,我们介绍了直播推流端是如何优化的.本期,将介绍手游直播中录屏的实现方式. 直播经过一年左右的快速发展,衍生出越来越丰富的业务形式,也覆盖越来越广的应用 ...

  8. Python中操作mysql的pymysql模块详解

    Python中操作mysql的pymysql模块详解 前言 pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb几乎相同.但目前pymysql支持python3.x而后者不支持 ...

  9. PHP mysql与mysqli事务详解

    官方对PHP连接到MySQL数据库服务器的三种主要的API简介如下: http://php.net/manual/zh/mysqli.overview.php PHP mysql与mysqli事务详解 ...

随机推荐

  1. 【AHOI2013复仇】从一道题来看DFS及其优化的一般步骤和数组分层问题【转】

    http://www.cppblog.com/MatoNo1/archive/2012/09/23/191708.html —————————————————————————————————————— ...

  2. JavaScript-JQ初探实现自定义滚动条

    这是一个基本实现思路,如果有新手和我一样没什么事,喜欢瞎研究话,可以参考下. 一.Html <div class="scroll_con"> <div class ...

  3. javascript:void(0);用法及常见问题解析

    void 操作符用法格式: javascript:void (expression) 下面的代码创建了一个超级链接,当用户以后不会发生任何事.当用户链接时,void(0) 计算为 0,但 Javasc ...

  4. perfcurve.m

    function [X,Y,T,auc,optrocpt,subY,subYnames] = ... perfcurve(labels,scores,posClass,varargin) %PERFC ...

  5. ASP.NET 自定义服务器控件

    文章内容   本文通过创建一个最简单的服务器控件,演示开发服务器端控件的流程. 文章内容整理自MSDN的编程指南,原文地址在文章末尾的资源中. 本文创建一个简单的服务器控件,名为 RedLabel.  ...

  6. win下在虚拟机安装CentOS 7 Linux系统

    准备: CentOS 7下载地址(我下的是everthing版本):https://www.centos.org/download/ 一.首先下载安装虚拟机VMware 地址官网下载即可. 二.安装操 ...

  7. Vue. 之 npm安装Element

    Vue. 之 npm安装Element 前提: 相关运行环境以搭建完成,例如:Node.Npm等.    假如我的项目目录如下: D:\DISK WORKSPACE\VSCODE\CDS\cds-ap ...

  8. Mac 电脑如何卸载 node

    因为刚入手「 Mac 」很多淫技还不懂,在一次使用 npm install 的时候安装出错,提示为 npm 与 node 的版本有问题,所以就想着卸载重新装一个版本. 但是因为刚使用「 Mac 」所以 ...

  9. The 16th UESTC Programming Contest Final 游记

    心情不好来写博客. 为了满足ykk想要气球的愿望,NicoDafaGood.Achen和我成功去神大耍了一圈. 因为队名一开始是LargeDumpling应援会,然后队名被和谐,变成了学校的名字,顿时 ...

  10. small标签

    <small> 标签将旁注 (side comments) 呈现为小型文本. 免责声明.注意事项.法律限制或版权声明的特征通常都是小型文本.小型文本有时也用于新闻来源.许可要求. 对于由 ...