参考官方文档,记录了部分我关注的新特性。本文仅仅是大概记录而已,准确描述参考官方文档:
MySQL 8.0 Reference Manual
欢迎关注我的《深入理解MySQL主从原理 32讲 》,如下:
- 数据字典使用事务性存储引擎。以前版本数据字典存储在文件或者非事务引擎表中
参考第14节。 - 支持原子性DDL,进行原子性的数据库字典更新,
并且binlog的写入和DDL操作为同一个原子性事务。参考13.1.1节 - 升级过程,安装新版本后自动进行升级操作,而不需要执行mysql_upgarde.--upgrade
选项用于控制这个功能。 8.0.16 - 安全和账户管理
授权表现在是Innodb表,以前都是MyISAM这会活得以下好处:
- 同时更改多个用户的时候可能某些成功某些失败。没有原子性
- 现在有原子性要么都成功要么都失败。13.1.1
- 默认认证插件为caching_sha2_password,性能更好更安全 6.4.1.3
- 支持角色 6.2.10
- 资源管理器 8.12.5
- Innodb 增强
- 自增字段修改加入redo 持久化
- 如果修改的值大于自增则持久化
- innodb_deadlock_detect可以关闭死锁检测
- INFORMATION_SCHEMA.INNODB_CACHED_INDEXES可以查看缓存的数据
- 支持for update nowait操作
- innodb使用mysql的数据字典 14
- 临时表存放到ibtmp1目录
- 分区表使用native,支持online DDL
- mysql系统表和变量现在放到innodb tablespace中叫做mysql.ibd
- innodb_undo_log_truncate默认开启
- innodb_rollback_segments参数含义,从全局变为每个undo表空间
- innodb_max_dirty_pages_pct_lwm参数默认值修改为10
- innodb_max_dirty_pages_pct从75增加到90
- innodb_auto_lock_mode默认设置为2,自增锁降低
- innodb_dedicated_server参数加入,默认是OFF,开启用于自动配置一些参数,包含:
innodb_buffer_pool_size
innodb_log_file_size
innodb_flush_method
- INFORMATION_SCHEMA.INNODB_TABLESPACES_BRIEF视图可以查看表空间类型
- Innodb支持原子性DDL
- SDI加入Serialized dictionary information (SDI) ,除了临时文件和UNDO表空间,其他数据
文件都包含,SDI 数据是一个容易的表元数据,用于在数据字典损坏的情况下直接从表空间中
抽取元数据,是压缩格式JSON
- redo 记录优化
开启独占的redo写线程
用户线程将脏数据写入flush list使用relaxed order
新参数加入
innodb_log_wait_for_flush_spin_hwm:定义最大平均日志写入时间
innodb_log_spin_cpu_abs_lwm:定义最小CPU使用总数
innodb_log_spin_cpu_pct_hwm:定义最大CPU使用总数
这3个参数需要再研究
- innodb_log_buffer_size:可动态修改回收内存
- undo 日志对 small LOB data支持 8.0.12
- 瞬间增加字段支持,算法为ALGORITHM=INSTANT,优先使用INSTANT算法
- 新增temptable存储引擎用于参数internal_tmp_mem_storage_engine参数,允许的值包含
temptable 默认,memory是以前的。8.0.13支持blob数据类型 - 关闭参数innodb_buffer_pool_in_core_file
- 8.0.13用户建立的临时表和内部临时表存储在临时表空间中,当session断开的时候
ibtmp1将会释放,但是不会将磁盘空间反还给操作系统,新增参数 innodb_temp_tablespaces_dir
设置为#innodb_tmp 当session断开的时候将会截断然后将空间释放到pool中,反还给
操作系统。
- innodb_dedicated_server 可以动态分配部分参数 8.0.14
innodb_buffer_pool_size
innodb_log_file_size
innodb_flush_method
- innodb_parallel_read_threads参数并行进行聚集索引扫描用于优化check table性能
- 如果超过temptable_max_ram内存大小将会使用临时文件或者innodb 表,默认使用mmap进行映射文件使用 temptable_use_mmap进行控制。新增的临时表引擎temptable和老的memory作为对比老的还是tmp_table_size or max_heap_table_size的大值
- innodb_spin_wait_pause_multiplier 参数加入
- innodb_parallel_read_threads 参数控制并发执行
- 字符集变化
默认的字符集使用utf8mb4而不是latin1,包含新增的校验字符集utf8mb4_ja_0900_as_cs - 优化器增强
- 不可见索引
- 降序索引
- 函数索引
- 类型返回检测
比如c是一个TINYINT UNSIGNED 占用1字节最大255条件使用c < 256 恒成立,如果
c >= 255转换为c=255
- 8.0.16 半连接支持EXISTS子查询
- 8.0.17 反半连接支持not in/not EXISTS
- WITH AS语法支持
- 开窗函数
RANK(), LAG(), NTILE() - 配置管理端口
如果达到 max_connections设置连接管理端口进行管理
- 需要配置admin_address为IP值,默认不开启
- 需要配置admin_port端口默认33062
- 没有连接限制
- 需要SERVICE_CONNECTION_ADMIN权限
- 8.0.17 innodb归档支持
- 8.0.17 innodb克隆插件
- hostname支持上限从60到255
作者微信:gp_22389860