MySQL 8.0.21 版本已于昨日发布(dev.mysql.com),开始对一些术语如 Master / Slave 等做了替换 。下面是来自官方团队对此版本的重点功能解读 。
更详细的内容请参考:InnoDB添加全局禁用 redo log 功能的配置项(WL#13795)
https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-21.html
支持动态启停 redo log,可使数据库写入速度更快,服务也更容易崩溃并丢失整个实例数据 。
ALTER INSTANCE ENABLE|DISABLE INNODB REDO_LOG;
主要适用在加载初始数据时,首先禁用 redo log,加载数据,再次开启 。表空间文件名验证变为可选项(WL#14008)
通过参数 --innodb-validate-tablespace-paths (ON|OFF) 可决定是否开启表空间文件名验证功能 。在 HDD 系统中扫描表空间开销很大,在我们知道用户不会频繁移动文件的情况下,可以通过跳过验证减少启动时间 。即使该参数设置为 OFF,依然可以使用 ALTER TABLESPACE 语法 。
锁系统的优化(WL#10314)
以往用单个闩锁保护保护所有队列的访问,扩展性很差,队列管理成为瓶颈,因此引入更细化的闩锁方法 。将每个表和每一行都可以视为资源,并且事务可以请求对资源的访问权限 。锁系统将 GRANTED 和 WAITING 的请求都存在一个队列中 。为了允许队列并发操作,提供了一种安全快速锁定队列的方式 。
将所有的 InnoDB 表空间限定为已知的目录 (WL#13065)
将表空间文件的位置限定在已知目录(datadir, innodb_data_home_dir, innodb_directories, and innodb_undo_directory) 。目的是限制可以在任何位置创建文件从而导致恢复过程出现意外的情况 。
Undo DDL 支持 ACID (WL#11819)
改进 Undo 表空间性能和安全性,可对 Undo 表空间自动截断 。对 Undo 表空间的 CREATE / TRUNCATE 操作都被记录到 redo log 。优点是避免了之前解决方案在 Undo 截断过程中需要两个检查点,这些检查点可能阻塞系统 。此修改还修复了几个影响到 Undo 的命令:CREATE、DROP 和 TRUNCATE 。
JSON添加 JSON_VALUE 函数(WL#12228)
目的是简化 JSON 值的索引创建,可以从给定的 JSON 值中获取指定位置的值,并作为指定类型返回 。
SELECT JSON_VALUE('{"name": "Evgen"}', '$.name')
以 VARCHAR(512) 返回的无引号字符串 Evgen,并带有 JSON 的默认排序规则 。SELECT JSON_VALUE('{"price": 123.45}', '$.price' RETURNING DECIMAL(5,2))
以 DECIMAL(5,2) 返回 123.45 。SQL DDLCREATE TABLE…AS SELECT 语句成为原子语句(WL#13355)
以往此举作为两个不同的事务执行(CREATE TABLE 和 SELECT INTO)进行处理,结果在某些情况下,已经提交 CREATE TABLE 但回滚了 SELECT INTO 。目前解决了此问题并顺便修复了(Bug#47899) 。
优化器引入了新的优化器参数以禁用限制优化(WL#13929)
prefer_ordering_index 默认开启,新的开关控制优化,存在限制子句时从非排序索引切换到分组依据和排序依据的排序索引 。
半联接和单表 UPDATE / DELETE (WL#6057)
以往单表的快速查询绕过了优化器并直接执行,从而使得这些语句无法从更高级的优化(半联接)中受益 。
// 以往以下两句用不到 semijoin,较慢UPDATE t1 SET x=y WHERE z IN (SELECT * FROM t2); DELETE FROM t1 WHERE z IN (SELECT * FROM t2);//以下语句可以用到,较快SELECT x FROM t1 WHERE z IN (SELECT * FROM t2);
优化后,以上 SQL 语句像其它查询一样通过优化器和执行器 。不再需要在 UPDATE / DELETE 语句中添加无关表(多表 UPDATE / DELETE 可以使用 semijoin) 。此外可在语句上执行 EXPLAIN FORMAT = TREE 和 EXLPAIN ANALYZE 。目前解决了此问题并顺便修复了(Bug#96423)和(Bug##35794) 。组复制降低缓存参数的最小值(WL#13979)
group_replication_message_cache_size 从 1 GB 降低到 128 MB 。这使 DBA 可以减少 XCom 缓存的大小,以便 InnoDB Cluster 可以成功地部署在具有少量内存(例如 16GB)和良好网络连接的主机上 。
指定可以通过哪些端点恢复流量(WL#13767)
用于指定在分布式恢复期间用于组复制的 IP 和端口 。目的是控制网络基础架构中流量的恢复,例如:出于稳定性或安全性原因 。
以 C++ 编译 XCom (WL#13842)
由于 C++ 的高级功能和更丰富的标准库,加速未来的发展 。
将重要的 GP 日志消息分类为系统消息(WL#13769)
将某些组复制日志消息重新分类为系统消息 。始终记录系统消息,而与服务器日志级别无关 。目的是确保 DBA 可以观察组中的主要事件 。
开启组复制语句以支持凭据作为参数(WL#13768)
推荐阅读
- 关于mysql外部访问报错的问题
- MySQL-多种数据类型详述
- 在MySQL中怎样进行跨库查询?
- MySQL慢查询日志的配置与使用
- 知乎 Hive Metastore 实践:从 MySQL 到 TiDB
- MySQL 数据库性能优化,看这篇就够了
- mysql界面工具navicat premium的使用
- 第08期:有关 MySQL 字符集的注意事项
- linux终端mysql用户操作只看这篇够了
- 为什么我们要从MySQL迁移到TiDB?