手记

【九月打卡】第21天 MySQL8.0 InnoDB增强

第一板块:玩转MySQL8.0新特性,6-1~6-6,董旭阳

第二,三板块:

  1. 自增变量持久化?

在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

第四板块:



0人推荐
随时随地看视频
慕课网APP