【转载】-MySQL+8.0数据库新特性及测试1

发布于:2021-09-18 11:12:22

目录
一、 概述
二、 Mysql 8.0特性
2.1 面向开发者特性

2.1.1 NoSQL 文档商店2.1.2 SQL2.1.3 JSON2.2 GIS(地理信息系统)2.3 字符集2.4 数据类型 Datatypes2.5 成本模型2.6 基于扩展正则表达式Regular Expressions2.7 运维自动化特性Dev Ops features2.8 可靠性 Reliability2.9 可观测性 Observability2.10 可管理性2.11 高可用性2.12 安全特性 Security features2.13 性能 Performance2.14 MySQL 8.0企业版2.15 MySQL 云服务2.16 其他特性 Other Features
三、 Mysql 8.0 innodb 增强特性
四、 Mysql8.0结构变化对比
五、 Mysql 8.0数据字典
六、 Mysql 8.0配置文件增强
七、 Mysql 8.0参数及变更
八、 mysql 8.0自适应参数( Automatic Configurations)
九、 MySQL 8.0中被废弃的特性
十、 MySQL 8.0被移除的功能
十一、 Mysql 8.0原子性 DDL
十二、 Mysql 8.0 NOWAIT 及 SKIP LOCKED
十三、 Mysql 8.0 Resource Group
13.1 什么是Resource Group13.2 资源组信息查看13.3 如何使用资源组13.4 使用资源组的限制13.5 总结
十四、 Mysql 8.0用户创建和角色管理
14.1 MySQL 用户管理MySQL8.0 的角色管理
十五、 MySQL 8.0 降序索引
十六、 What’s New With MySQL Replication in MySQL 8.0
16.1 Mysql 主备复制性能改进过程16.2 Mysql 8.0 复制性能提升16.3 总结
十七、 Mysql 8.0.12 快速加列功能(Instant Add Column)
17.1 各版本操作对比(单表 3000W)17.2 目前 MySQL 官方支持的操作17.3 监控17.4 当前版本中对 instant add column 有限制
十八、 Mysql 8.0 通用表空间
十九、 Mysql 8.0 基准压力性能测试
二十、 Mysql 8.0 主从延迟测试
二十一、 Msql 8.0 升级方案
二十二、 Mysql 8.0 Repliaction to Mysql 5.7
二十三、 Mysql 8.0 备份和恢复
二十四、 Mysql 8.0 监控
二十五、 Mysql 8.0 错误及 bug 修复

一、 概述

MySQL 8.0 正式版 8.0.11/8.0.12 已发布,官方表示 MySQL 8 要比 MySQL 5.7 快 2 倍,还带来了大量的改进和更快的性能!

二、 Mysql 8.0 特性

MySQL 8.0 数据库添加了 NoSQL 和许多新的增强功能:
1、 NoSQL 文档存储为开发人员提供了开发传统 SQL 关系应用程序和 NoSQL 无模式文档数据库应用程序的灵活性。这消除了对单独的 NoSQL 文档数据库的需要。
2、 SQL 窗口函数,公用表表达式,NOWAIT 和 SKIP LOCKED,降序索引,分组,正则表达式,字符集,成本模型和直方图。
3、 JSON 扩展语法,新功能,改进排序和部分更新。使用 JSON 表函数,您可以使用JSON 数据的 SQL 机制。
4、 GIS 地理支持。空间参考系统(SRS),以及 SRS 感知空间数据类型,空间索引和空间功能。
5、 可靠性 DDL 语句已变得原子性和崩溃安全,元数据存储在单个事务数据字典中
6、 可观察性 性能模式,信息模式,不可见索引,错误记录。
7、 可管理 性持久性配置变量,撤消表空间管理,重新启动命令和新建 DDL。
8、 高可用性 InnoDB 集群为您的数据库提供集成的本地 HA 解决方案。
9、 安全 OpenSSL 改进,新的默认身份验证,SQL 角色,分解超级特权,密码强度,授权。
10、性能 比 MySQL 5.7 快两倍。

2.1 面向开发者特性
MySQL 8.0 应面向 MySQL 开发人员的需求,带来了 SQL,JSON,公共表达式,地理信息系统等方面的特性,因为很多开发人员有存储 EmoJi 表情的需求,在新版本中 UTF8MB4成为默认的字符集。除此之外,还有对 Binary 数据类型按位操作,和改进对 IPV6 和 UUID函数的改进。

2.1.1 NoSQL 文档商店
MySQL 文档库为开发人员提供了开发传统 SQL 关系型应用程序和 NoSQL,无模式文档数据库应用程序的最大灵活性。这消除了对单独的 NoSQL 文档数据库的需要。MySQL 文档存储为无模式的 JSON 文档提供了多文档事务支持和完整的 ACID 合规性。

2.1.2 SQL
窗口函数
MySQL 8.0在 MySQL中提供了 SQL窗口函数。与分组集合函数类似,窗口函数对一组行进行一些计算,例如 COUNT或 SUM。但是,如果分组聚合将这组行集合到一行中,则窗口函数将为结果集中的每一行执行聚合。窗口函数有两种形式:用作窗口函数和专用窗口函数的 SQL聚合函数。
公用表表达式
MySQL 8.0在 MySQL中提供[递归]公用表表达式(CTE)。非递归 CTE可以解释为“改进的派生表”,因为它允许派生表被多次引用。递归 CTE是一组迭代构建的行:从最初的一组行开始,一个进程派生出新的行,然后将这些新的行重新输入到进程中,产生更多的行,等等,直到该过程不再生成行。
公用表表达式是一个命名的临时结果集,仅在单个 SQL语句(例如 SELECT,INSERT,UPDATE或 DELETE)的执行范围内存在。与派生表类似,CTE不作为对象存储,仅在查询执行期间持续。与派生表不同,CTE可以是自引用(递归 CTE,也可以在同一查询中多次引用。 此外,与派生表相比,CTE提供了更好的可读性和性能。CTE的结构包括名称,可选列列表和定义 CTE的查询。定义 CTE后,可以像 SELECT,INSERT,UPDATE,DELETE或 CREATE VIEW语句中的视图一样使用它。



MySQL Workbench 8.0中的 MySQL CTE和窗口函数



NOWAIT和 SKIP LOCKED(立即报错或者跳过锁持有的行)
MySQL 8.0在 SQL锁定子句中提供了 NOWAIT和 SKIP LOCKED选项。通常,当某行由于 UPDATE或 SELECT … FOR UPDATE而被锁定时,任何其他事务都必须等待才能访问该锁定的行。在某些使用情况下,如果行被锁定或忽略锁定行,则需要立即返回。使用NOWAIT 的锁定子句永远不会等待获取行锁。相反,查询将失败并显示错误。使用 SKIPLOCKED 的锁定子句永远不会等待获取列出的表上的行锁。相反,锁定的行将被跳过并且不会被读取。
降序索引(Descending Indexes)
MySQL 8.0 带来了对降序索引的支持。在 8.0降序索引中,数据被倒序组织,正向查找。而在之前的版本中,虽然支持创建降序排列的索引,但其实现方式是通过创建常见的正序索引,然后进行反向查找来实现的。一方面来说,正序查找要比逆序查找更快,另一方面来说,真正的降序索引在复合的 order by语句(即有 asc又有 desc)中,可以提高索引利用率,减少
filesort。
GROUPING(分组函数)
MySQL 8.0提供了 GROUPING(),SQL_FEATURE T433。GROUPING()函数将超级聚合行与常规分组行进行区分。GROUP BY扩展(如 ROLLUP)会生成超集合行,其中所有值的集合均由 null表示。使用 GROUPING()函数,您可以区分表示超常聚合行中所有值的集合的 null与常规行中的 NULL。
Optimizer Hints(优化器建议)
在 5.7版本中引入了新的优化器建议的语法,借助这个新的语法,优化器建议可以被用/+ /包裹起来直接放在 SELECT |INSERT | REPLACE | UPDATE | DELETE关键字的后面。在 8.0的版本中又加入了新的姿势。


8.0版本增加了 INDEX_MERGE和 NO_INDEX_MERGE,允许用户在单个查询中控制是否使用索引合并特性。8.0版本增加了 JOIN_FIXED_ORDER, JOIN_ORDER, JOIN_PREFIX,和 JOIN_SUFFIX,允许用户控制 join表关联的顺序。8.0版本增加了 SET_VAR,该优化器建议可以设定一个只在下一条语句中生效的的系统参数。

相对于之前的优化器建议和优化器特性开关参数,更倾向于推荐新形式的优化器建议,新形式的优化器建议可以在不侵入 SQL语句(指修改语句的非注释的业务部分)的情况下,注入查询语句的很多位置。与直接修改语句的优化器建议相比,新形势的优化器建议在 SQL语义上更加清晰。


2.1.3 JSON
MySQL 8.0增加了新的 JSON函数,并提高了排序和分组 JSON值的性能。JSON路径表达式中的范围的扩展语法
MySQL 8.0扩展了 JSON路径表达式中范围的语法。例如 SELECT JSON_EXTRACT(’[1,2,3,4,5]’,’$ [1至 3]’);结果为[2,3,4]。引入的新语法是 SQL标准语法的一个子集,在 SQL:2016,9.39 SQL / JSON路径语言中描述:语法和语义。
JSON表函数
MySQL 8.0增加了 JSON表函数,它使得 JSON数据可以使用 SQL机制。JSON_TABLE() 创建 JSON数据的关系视图。它将 JSON数据评估的结果映射到关系行和列。用户可以使用 SQL查询函数返回的结果为常规关系表,例如 join,project和 aggregate。
JSON聚合函数
MySQL 8.0 添加了聚合函数 JSON_ARRAYAGG() 来生成 JSON 数组和 JSON_OBJECTAGG(来生成 JSON对象。这使得将多行中的 JSON文档组合成 JSON数组或 JSON对象成为可能。
JSON合并函数
所述 JSON_MERGE_PATCH(函数实现的 JavaScript(和其他脚本语言)的由指定的语义 RFC7396,即,其由所述第二文档的优先级删除重复。例如,JSON_MERGE(’{“a”:1,“b”:2}’,’{“a”:3,“c”:4}’);#返回{“a”:3,“b”:2,“c”:4}。
JSON改进排序
MySQL 8.0通过使用可变长度的排序键为排序/分组 JSON提供了更好的性能。初步的基准测试显示,根据使用情况,分类的改进度提高了 1.2至 18倍。
JSON部分更新
MySQL 8.0增加了对 JSON_REMOVE(JSON_SET(和 JSON_REPLACE(函数的部分更新支持 。如果只更新 JSON文档的某些部分,希望向处理程序提供有关更改内容的信息,以便存储引擎和复制无需编写完整文档。

2.2 GIS(地理信息系统)
MySQL 8.0提供地理支持。这包括对空间参考系统(SRS)的元数据支持,以及 SRS感知空间数据类型,空间索引和空间函数。总而言之,8.0 版本可以理解地球表面的经纬度信息,而且可以在任意受支持的 5000个空间参照系中计算地球上任意两点之间的距离。
空间参照系 Spatial Reference System (SRS)
ST_SPATIAL_REFERENCE_SYSTEMS存在于 information schema 视图库中,提供了可供使用的 SRS坐标系统的名称。每个 SRS坐标系统都有一个 SRID编号。8.0版本支持 EPSG Geodetic Parameter Dataseset中的 5千多个坐标系统(包括立体模和 2D*面地球模型)
SRID 地理数据类型 SRID aware spatial datatypes
空间类的数据类型可以直接从 SRS坐标系统的定义中获取,例如:使用 SRID 4326定义进行建表: CREATE TABLE t1 (g GEOMETRY SRID 4326);。SRID是适用于地理类型的数据类型。只有同一 SRID的的数据才会被插入到行中。与当前 SRID数据类型的数据尝试插入时,会报错。未定义 SRID编号的表将可以接受所有 SRID编号的数据。8.0 版本增加了INFORMATION_SCHEMA.ST_GEOMETRY_COLUMNS视图,可以显示当前实例中所有地理信息的数据行及其对应的 SRS名称,编号,地理类型名称。
SRID 空间索引 SRID aware spatial indexes
在空间数据类型上可以创建空间索引,创建空间索引的列必须非空,例如: CREATETABLE t1 (g GEOMETRY SRID 4326 NOT NULL, SPATIAL INDEX(g));
创建空间索引的列必须具有 SRID数据标识以用于优化器使用,如果将空间索引建在没有 SRID数据标识的列上,将输出 waring信息。
SRID 空间函数 SRID aware spatial functions
8.0 增加了诸如 ST_Distance()和 ST_Length()等用于判断数据的参数是否在 SRS中,并计算其空间上的距离。到目前为止,ST_Distance 和其他的空间关系型函数诸如ST_Within,ST_Intersects,ST_Contains,ST_Crosses 都支持地理计算。其运算逻辑与行为参见SQL/MM Part 3 Spatial

2.3 字符集
MySQL 8.0使 UTF8MB4 成为默认字符集。UTF8MB4是网络中主要的字符编码,这一举措将使绝大多数 MySQL用户的生活更轻松。


默认的字符集从 latin1变为 utf8mb4 ,默认排序校对规则从 latin1_swedish_ci变为utf8mb4_800_ci_ai。utf8mb4同样也成为 libmysql,服务端命令行工具,server层的默认编码utf8mb4同样也成为 MySQL测试框架的默认编码排序校对规则的权重与大小写基于 Unicode委员会 16年公布的 Unicode 9.0.0版本。在以往的 MySQL版本中,latin1编码中的 21种语言的特殊大小写和排序校对规则被引入了 utf8mb4排序校对规则。例如:捷克语的排序校对规则变成了utf8mb4_cs_800_ai_ci。utf8mb4的 utf8mb4_ja_0900_as_cs排序校验规则对日语字符支持三级权重的排序。把 Unicode 9.0.0之前所有排序校验规则中的不填补变成填补字符,此举有利于提升字符串的一致性和性能。例如把字符串末尾的空格按照其他字符对待。之前的排序校验规则在处理这种情况时保留字符串原样。

2.4 数据类型 Datatypes
二进制数据类型的 Bit-wise操作 Bit-wise operations on binary data types
8.0版本扩展了 bit-wise操作(如 bit-wise AND等)的使用范围,使得其在所有 BINARY数据类型上都适用。在此之前只支持整型数据,若强行在二进制数据类型上使用 Bit-wise操作,将会隐式转换为 64位的 BITINT类型,并可能丢失若干位的数据。从 8.0版本之后,bit-wise操作可以在 BINARY和 BLOB类型上使用,且不用担心精确度下降的问题。
IPV6操作 IPV6 manipulation
8.0版本通过支持 BINARY上的 Bit-wise操作提升了 IPv6数据的可操作性。5.6版本中引 入 了 支 持IPv6地 址 和16位 二 进 制 数 据 的 互 相 转 换 的
INET6_ATON()和 INET6_NTOA()函数。但是直到 8.0之前,由于上一段中的问题都无法讲IPv6 转换函数和 bit-wise 操作结合起来。由于 INET6_ATON()可以正确的返回 128bit 的VARBINARY(16),如果想要将一个 IPv6 地址与网关地址进行比对,现在就可以使用 INET6_ATON(address)& INET6_ATON(network)操作。
UUID 操作 UUID manipulations
8.0 版本通过增加了三个新的函数(UUID_TO_BIN(), BIN_TO_UUID(), 和 IS_UUID())提升了 UUID 的可用性。 UUID_TO_BIN()可以将 UUID 格式的文本转换成VARBINARY(16), BIN_TO_UUID()则与之相反, IS_UUID()用来校验 UUID 的有效性。将UUID以 VARBINARY(16)的方式存储后,就可以使用实索引了。UUID_TO_BIN()函 数可以原本转换后的二进制值中时间相关位(UUID 生成时有间关联)移到数据的开 头,这样对索引来说更加友好而且可以减少在 B树中的随机插入,从而减少了耗时。









相关推荐

最新更新

猜你喜欢