第一板块:玩转MySQL8.0新特性,6-1~6-6,董旭阳
第二,三板块:
自增变量持久化?
在MySQL8.0之前的版本中,自增列计数器置于内存中,并不会持久化到磁盘,当数据库重启后, 会根据select max(id)+1 from xxx重新计算当前自增列值,这种现象在某些情况下会导致业务 主键冲突或者其他难以发现的问题。自增主键重启重置的问题很早就被发现Innodb autoincrement stats 重 启时丢失。在MySQL8.0版本中对AUTO_INCREMENT值进行持久化,每次值更改时,当前最大自动增量计数器值 将写入重做日志,并保存到每个检查点上的引擎专用系统表中,这些更改使当前最大自动增量计数器值在 服务器重新启动时保持不变。
2.禁止锁死检测
在MySQL8.0中引入了新的动态变量innodb_deadlock_detect用来禁用死锁检测。在高并发系统上, 当多线程同时在等待同一个锁时,死锁检测的速度会变慢。有的时候,禁用死锁检测可能更加高效, 并且在innodb_lock_wait_timeout发生死锁时,依赖于事务回滚的设置。该参数的默认值为ON, 即打开死锁检测。
3.跳过锁等待
InnoDB支持NOWAIT和SKIP LOCKED选项SELECT ... FOR SHARE以及SELECT ... FOR UPDATE锁定读取语句。 NOWAIT如果请求的行被另一个事务锁定,则会导致语句立即返回。 SKIP LOCKED从结果集中删除锁定的行。 select ... for update,select ... for share(8.0新增语法) 添加NOWAIT、SKIP LOCKED语法,跳过锁等待,或者跳过锁定。而之前的版本中,如果获取不到锁,会一直等待,直到innodb_lock_wait_timeout超时时间
4.系统表全部换成InnoDB表
mysql系统表和数据字典表现在在MySQL数据目录中InnoDB命名的单个表空间文件中创建mysql.ibd,并且系统 表全部换成事务型的innodb表,默认的MySQL实例将不包含任何MyISAM表,除非手动创建MyISAM表。以前 的版本中,这些表是InnoDB在mysql数据库目录中的各个表空间文件中创建的 。
5.新增inn0db_dedicated_server参数
MySQL8.0中通过新增参数innodb_dedicated_server,能够让InnoDB根据服务器上自动检测到的主机内存大小,自动配置innodb_buffer_pool_size,innodb_log_file_size,innodb_flush_method三个参数值,适用于在专用服务器上运行的MySQL服务器实例。
6.DDL原子化操作
该InnoDB存储引擎现在支持原子DDL,这保证了DDL操作要么完全提交或回滚,即使服务器在操作时停止。
7.默认字符集由latin1变成utf8mb4
默认字符集已从更改latin1为utf8mb4,并且utf8mb4字符集新增了几个新的排序规则,包括utf8mb4_ja_0900_as_cs,用于Unicode的第一个日语特定排序规则。
8.undo空间自动回收
innodb_undo_log_truncate参数在8.0.2版本默认值由OFF变为ON,默认开启undo日志表空间自动回收。 innodb_undo_tablespaces参数在8.0.2版本默认为2,当一个undo表空间被回收时,还有另外一个提供正常服务。 innodb_max_undo_log_size参数定义了undo表空间回收的最大值,当undo表空间超过这个值,该表空间被标记为可回收
9.redo&undo日志加密
该InnoDB表空间加密功能 支持重做日志的加密和撤消日志数据。从MySQL 8.0.13开始,静态InnoDB数据加密功能支持通用表空间。以前,只能对每个表的文件表空间进行加密。通过增加以下两个参数,用于控制redo、undo日志的加密。 innodb_undo_log_encrypt innodb_undo_log_truncate
第四板块: