MySQL 8.0 技术详解

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_detect:https://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 模块,提供了四种刷新策略,分别是:
image
提供适合不同业务模式的 audit log 配置供用户选择。

8. 安全特性

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

9. 优化

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


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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/518840.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

解决:Error response from daemon: manifest for xxx:latest not found: manifest unknown...

在使用docker 拉去最新的镜像时,会提示如下错误: 这里错误的意思是docker需要我们指定下载镜像的版本号。 但是我们想下载最新的版本号,该如何得知最新的版本号呢? 我们可以登录docker hub:https://hub.docker.com/…

牛客网SQL篇刷题篇(3-10)

https://www.nowcoder.com/ta/sql 1.inner join 和left join (1)在表中存在至少一个匹配时,INNER JOIN 关键字返回行。 SELECT *** FROM A INNER JOIN B ON 条件 注释:INNER JOIN 与 JOIN 是相同的。 (2&#…

技术三板斧:关于技术规划、管理、架构的思考

阿里妹导读:实践需要理论的指导,理论从实践中来。作为技术工程师,要不断地从事件中反思经验、总结规律,才能避免踏入同一个坑,才能更高效地完成 KPI ,甚至是晋升。今天的文章来自阿里巴巴高级技术专家毕啸&…

让服务器突破性能极限 阿里云神龙论文入选计算机顶会ASPLOS

疫情肆虐,全球多个科技领域盛会宣布改为线上举办,计算机领域顶会 ASPLOS也不例外。 日前,ASPLOS 2020公布了计算机界最新科技成果,其中包括阿里云提交的名为《High-density Multi-tenant Bare-metal Cloud》的论文,该…

自动化日志收集及分析在支付宝 App 内的演进

背景 结合《蚂蚁金服面对亿级并发场景的组件体系设计》,我们能够通盘了解支付宝移动端基础组件体系的构建之路和背后的思考,本文基于服务端组建体系的大背景下,着重探讨“自动化日志手机与分析”在支付宝 App 内的演进之路。 支付宝移动端技…

牛客网SQL篇刷题篇(16-23)

https://www.nowcoder.com/ta/sql 1.SQL嵌套查询 https://www.cnblogs.com/glassysky/p/11559082.html (1)什么是嵌套查询 .   嵌套查询的意思是,一个查询语句(select-from-where)查询语句块可以嵌套在另外一个查询块的where子句中&…

突破性能极限——阿里云神龙最新ASPLOS论文解读

作者 | 阿里云神龙团队责编 | 徐威龙封图| CSDN 下载于视觉中国日前,ASPLOS 2020公布了计算机界最新科技成果,其中包括阿里云提交的名为《High-density Multi-tenant Bare-metal Cloud》的论文,该论文阐述了阿里云自研的神龙服务器架构如何解…

1分钟 搭建xxl-job任务调度中心

文章目录一、前提环境1. 安装java环境2. 安装maven打包环境3. docker安装mysql二、搭建xxl-job 服务端(源码)三、搭建xxl-job 服务端(docker)四、常见异常解决方案4.1. docker中mysql容器的ip怎样获取?4.2. xxl-job 连…

Schedulerx2.0分布式计算原理最佳实践

1. 前言 Schedulerx2.0的客户端提供分布式执行、多种任务类型、统一日志等框架,用户只要依赖schedulerx-worker这个jar包,通过schedulerx2.0提供的编程模型,简单几行代码就能实现一套高可靠可运维的分布式执行引擎。 这篇文章重点是介绍基于…

一个优秀的可定制化Flutter相册组件,看这一篇就够了

背景 在做图片、视频相关功能的时候,相册是一个绕不开的话题,因为大家基本都有从相册获取图片或者视频的需求。最直接的方式是调用系统相册接口,基本功能是满足的,一些高级功能就不行了,例如自定义UI、多选图片等。 …

牛客网SQL篇刷题篇(24-31)

https://www.nowcoder.com/ta/sql 1.NOT IN NOT IN运算符允许从结果集中排除特定值的列表。 2.sql子查询 https://www.cnblogs.com/fzxey/p/10896244.html#where%E5%AD%90%E6%9F%A5%E8%AF%A2 子查询就是将一个查询(子查询)的结果作为另一个查询&…

最近看Kafka源码,着实被它的客户端缓冲池技术优雅到了

作者 | 犀牛饲养员责编 | 徐威龙封图| CSDN 下载于视觉中国最近看kafka源码,着实被它的客户端缓冲池技术优雅到了。忍不住要写篇文章赞美一下(哈哈)。注:本文用到的源码来自kafka2.2.2版本。背景当我们应用程序调用kafka客户端 pr…

相信坚持的力量,我的程序员打怪升级之路

我是来自阿里云-云通信技术团队的玄照,2015年底进入阿里,刚渡过三年醇,正迈向五年陈的路上。个人兴趣爱好广泛,静的、动的,音乐、游戏、电影、运动都比较喜欢。 玄照,阿里云高级技术专家 程序生涯启航 第…

牛客网SQL篇刷题篇(32-37)

https://www.nowcoder.com/ta/sql 1.sql group_contact()、concat()、concat_ws函数 https://blog.csdn.net/qq_36250202/article/details/99308824 eg:将employees表的所有员工的last_name和first_name拼接起来作为Name,中间以一个空格区分 SELECT CONCAT(las…

支付宝工程师如何搞定关系数据库的“大脑”——查询优化器

前言 查询优化器是关系数据库系统的核心模块,是数据库内核开发的重点和难点,也是衡量整个数据库系统成熟度的“试金石”。 查询优化理论诞生距今已有四十来年,学术界和工业界其实已经形成了一套比较完善的查询优化框架(System-R 的 Bottom-…

SpringBoot2 集成 xxl-job任务调度中心

接上一篇: 搭建xxl-job任务调度中心 https://gblfy.blog.csdn.net/article/details/113809843 文章目录一、SpringBoot 配置1. maven依赖2. 执行器配置 application.yml3. 执行器组件配置4. 部署执行器项目二、xxl-job任务调度中心2.1. 执行器管理2.2. 任务管理三、…

HelloWorld

HelloWorld 创建一个Java文件 文件后缀名为.javaHello.java 编写代码 public class Hello{public static void main(String[] args){System.out.print("Hello, world!");} }编译java文件 javac Hello.java会多出一个Hello.class 文件 运行class文件 java Hell…

运行Java程序时 Tomcat出错 显示端口被占用

解决方法:命令提示符(管理员) 输入netstat -ano | findstr 8080 检查8080端口有哪些进程 输入taskkill -pid 11728 -f 关闭11728的进程

从开源小白到 Apache Member,我的成长之路

我们走过的每一步路,都会留下印记,越坚实,越清晰。 近日,Apache 软件基金会(ASF)官方 Blog 宣布全球新增 40 位 Apache Member,张乎兴有幸成为其中一位。 目前,全球共有771位 ASF …

当你打开天猫的那一刻,推荐系统做了哪些工作?

当年打开天猫的那一刻,它为你完成了华丽的变身,成为世上独一无二的“天猫”,这就是智能推荐的力量。今天,来自阿里巴巴搜索推荐事业部的算法工程师陈启伟为你介绍天猫如何玩转首页个性化推荐,揭开搜索推荐的神秘面纱。…