文章目录

  • 6.1. auto-increment
  • 6.2.innodb_deadlock_detect
  • 6.3. INFORMATION_SCHEMA.INNODB_CACHED_INDEXES
  • 6.4. 临时表
  • 6.5. SELECT ... FOR SHARE 和SELECT ... FOR UPDATE语句支持NOWAIT、SKIP LOCKED
  • 6.6. 本地分区API支持ALTER TABLE…ADD PARTITION, DROP PARTITION, COALESCE PARTITION, REORGANIZE PARTITION,和REBUILD PARTITION,也可以与ALGORITHM={COPY|INPLACE}和LOCK一起使用.
  • 6.7. 8.0版本开始mysql系统表和数据字典表是在MySQL数据目录中的一个名为mysql.ibd的InnoDB表空间文件中创建。 以前,这些表是在mysql数据库目录中的单个InnoDB表空间文件中创建的。
  • 6.8. UNDO表空间的新特性
    • 6.8.1. undo表空间的数量可以通过变量innodb_undo_tablespaces动态修改
    • 6.8.2. innodb_undo_log_truncate默认启用
    • 6.8.3. innodb_undo_tablespaces默认值从0变为了2
    • 6.8.4. undo表空间文件命名
    • 6.8.5. innodb_rollback_segments
    • 6.8.6. innodb_undo_logs移除,由innodb_rollback_segments代替
  • 6.9. 影响缓冲池预刷新和刷新行为的配置的默认值已变化
  • 6.10. 重命名表空间
  • 6.11. 新innodb_dedicated_server
  • 6.12. INFORMATION_SCHEMA.INNODB_TABLESPACES_BRIEF
  • 6.13. MySQL自带的zlib library版本从1.2.3升级到1.2.11
  • 6.14. redo新特性
  • 6.15. 在8.0.12版本中ALTER TABLE支持ALGORITHM=INSTANT
  • 6.16. MySQL 8.0.13支持普通表空间的加密
  • 6.17. innodb_buffer_pool_in_core_file
  • 6.18. MySQL 8.0.14, InnoDB 支持并行索引读
  • 6.19. CREATE TABLESPACE中ADD DATAFILE字句是可选了

6.1. auto-increment

每次值更改时,当前最大自动增量计数器值将写入重做日志,并保存到每个检查点上的引擎专用系统表中。 这些更改使当前最大自动增量计数器值在服务器重新启动时保持不变。 另外:

  • 服务器重新启动不再取消表指定的AUTO_INCREMENT值。 如果将自动递增计数器初始化为特定值,或者将自动递增计数器值更改为更大的值,则新的值将在服务器重新启动时保持不变。
  • 在ROLLBACK操作之后立即重新启动服务器不再导致重用已分配给回滚事务的自动增量值。
  • 如果将AUTO_INCREMENT列值修改为大于当前最大自动增量值的值(例如,在UPDATE操作中),则新值将保持不变,并且后续INSERT操作将从新的值开始分配自动增量值。
    更多信息请查看:

https://dev.mysql.com/doc/refman/8.0/en/innodb-auto-increment-handling.html
https://dev.mysql.com/doc/refman/8.0/en/innodb-auto-increment-handling.html#innodb-auto-increment-initialization

6.2.innodb_deadlock_detect

很奇怪在8.0文档中提到,这是一个新的支持动态修改的系统变量。但是这个参数在5.7中就已经支持动态修改了,连官方文档关于该变量的说明都是一样的,有点尴尬。实际上是在5.7.15就引入该变量了。
该参数用来禁用死锁的检测的,因为在高峰期的数据库中检测死锁是非常昂贵操作。所以在系统非常繁忙的时候,可以暂时关闭死锁检测。
注:要配合innodb_lock_wait_timeout变量使用,用来控制事务获取某个资源可等待时间,默认50S,超过该时间会返回错误信息: ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction

6.3. INFORMATION_SCHEMA.INNODB_CACHED_INDEXES

新引入的表,用来查看每个索引在InnoDB缓冲池中缓存的索引页数。

改表只有三列:

  • SPACE_ID:表空间ID

  • INDEX_ID:索引的唯一标识符

  • N_CACHED_PAGES: InnoDB缓冲池中缓存的索引页数
    如:

    mysql> SELECT * FROM INFORMATION_SCHEMA.INNODB_CACHED_INDEXES WHERE INDEX_ID=65/G
    *************************** 1. row ***************************
    SPACE_ID: 4294967294
    INDEX_ID: 65
    N_CACHED_PAGES: 45

可以结合INNODB_INDEXES 和INNODB_TABLES表来查看具体的表名和索引名,如:

SELECTtables.NAME AS table_name,indexes.NAME AS index_name,cached.N_CACHED_PAGES AS n_cached_pages
FROMINFORMATION_SCHEMA.INNODB_CACHED_INDEXES AS cached,INFORMATION_SCHEMA.INNODB_INDEXES AS indexes,INFORMATION_SCHEMA.INNODB_TABLES AS tables
WHEREcached.INDEX_ID = indexes.INDEX_IDAND indexes.TABLE_ID = tables.TABLE_ID;

6.4. 临时表

InnoDB的临时表现在将在共享临时表空间中创建,ibtmp1。

6.5. SELECT … FOR SHARE 和SELECT … FOR UPDATE语句支持NOWAIT、SKIP LOCKED

和Oracle一样,NOWAIT就是如果访问的资源被另外一个事务锁住,那么会立即返回错误信息不会等待。SKIP LOCKED就是跳过锁住的行,返回剩余的其他行数据。
具体如下:
/# 会话1:

mysql> CREATE TABLE t (i INT, PRIMARY KEY (i)) ENGINE = InnoDB;
mysql> INSERT INTO t (i) VALUES(1),(2),(3);
mysql> START TRANSACTION;
mysql> SELECT * FROM t WHERE i = 2 FOR UPDATE;
+---+
| i |
+---+
| 2 |
+---+

/# 会话2:

mysql> START TRANSACTION;
mysql> SELECT * FROM t WHERE i = 2 FOR UPDATE NOWAIT;
ERROR 3572 (HY000): Do not wait for lock.

/# 会话3:

mysql> START TRANSACTION;
mysql> SELECT * FROM t FOR UPDATE SKIP LOCKED;
+---+
| i |
+---+
| 1 |
| 3 |
+---+

注:SELECT … FOR SHARE 取代了SELECT … LOCK IN SHARE MODE语句,但是后者还可以使用,是为了向后兼容,两者作用是相同的。

6.6. 本地分区API支持ALTER TABLE…ADD PARTITION, DROP PARTITION, COALESCE PARTITION, REORGANIZE PARTITION,和REBUILD PARTITION,也可以与ALGORITHM={COPY|INPLACE}和LOCK一起使用.

如:

DROP PARTITION和ALGORITHM=INPLACE一起使用,将删除分区的数据和分区.
DROP PARTITION和ALGORITHM=COPY或old_alter_table=ON一起使用,将删除分区,但是会将该分区中的数据移动到复合条件的分区中,不符合条件的数据将被删除.

6.7. 8.0版本开始mysql系统表和数据字典表是在MySQL数据目录中的一个名为mysql.ibd的InnoDB表空间文件中创建。 以前,这些表是在mysql数据库目录中的单个InnoDB表空间文件中创建的。

6.8. UNDO表空间的新特性

6.8.1. undo表空间的数量可以通过变量innodb_undo_tablespaces动态修改

6.8.2. innodb_undo_log_truncate默认启用

6.8.3. innodb_undo_tablespaces默认值从0变为了2

意味着回滚段将在两个undo表空间中创建,而不是之前在默认的InnoDB系统表空间中.另外如果想要truncate udno日志,那么innodb_undo_tablespaces最小值是2.

6.8.4. undo表空间文件命名

新的命名方式是undo_NNN,以前是undoNNN,其中NNN是undo空间号.

6.8.5. innodb_rollback_segments

innodb_rollback_segments在8.0版本中表示每个undo表空间中的回滚段数量,在此之前表示一个MySQL实例总的回滚段数量. 其中Innodb_available_undo_logs被移除.

6.8.6. innodb_undo_logs移除,由innodb_rollback_segments代替

6.9. 影响缓冲池预刷新和刷新行为的配置的默认值已变化

  • innodb_max_dirty_pages_pct_lwm现在默认值是10,之前默认值还是0,也就是不启用预刷新缓冲池.当缓冲池中的脏页超过10%就会启用预刷新,从而提升性能一致性.
  • innodb_max_dirty_pages_pct默认值从75增大到90,表示:缓冲池中的脏页比例不能超过该值,允许缓冲池更高的脏页比例.

6.10. 重命名表空间

可以通过ALTER TABLESPACE … RENAME来重命名表空间

6.11. 新innodb_dedicated_server

新的系统变量innodb_dedicated_server,默认不启用.如果启用了,则可以根据操作系统的内存大小来自动配置下面三个变量的大小:

  • innodb_buffer_pool_size
    内存大小 变量大小
    < 1G 128* MiB (the innodb_buffer_pool_size default)
    <= 4G 内存* 0.5
    > 4G 内存* 0.75

  • innodb_log_file_size
    内存大小 变量大小
    < 1G 48MiB (the innodb_log_file_size default)
    <= 4G 128MiB
    > 4G 512MiB
    <= 16GB 1024MiB
    > 16GB 2048MiB

  • innodb_flush_method
    windows默认值 unbuffered
    unix默认值 fsync
    windows支持的值 unbuffered
    normal
    unix支持的值 fsync
    O_DSYNC
    littlesync
    nosync
    O_DIRECT
    O_DIRECT_NO_FSYNC

当启用了innodb_dedicated_server, innodb_flush_method将设置为O_DIRECT_NO_FSYNC.如果O_DIRECT_NO_FSYNC设置不可用,将使用innodb_flush_method默认值.
注:Linux系统不要使用O_DIRECT_NO_FSYNC,如果数据文件大小变化将会造成操作系统HUNG.

6.12. INFORMATION_SCHEMA.INNODB_TABLESPACES_BRIEF

用于查看innodb表空间的相关信息,name,path,flag,space type等.

mysql> SELECT * FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_BRIEF WHERE SPACE = 7;
+-------+---------+---------------+-------+------------+
| SPACE | NAME    | PATH          | FLAG  | SPACE_TYPE |
+-------+---------+---------------+-------+------------+
| 7     | test/t1 | ./test/t1.ibd | 16417 | Single     |
+-------+---------+---------------+-------+------------+
  • SPACE:表空间ID
  • NAME:表空间名称.对于一个表一个表空间来说,名称就是schema/table_name
  • PATH:数据文件路径.如果数据文件不再MySQL数据文件目录下,那么会显示绝对路径,否则显示相对路径.
  • FLAG: A numeric value that represents bit-level information about tablespace format and storage characteristics.
  • SPACE_TYPE:表空间类型
    General表示Innodb普通表空间
    Single表示一个表一个表空间
    System表空间Innodb系统表空间

6.13. MySQL自带的zlib library版本从1.2.3升级到1.2.11

6.14. redo新特性

  • User threads can now write concurrently to the log buffer without synchronizing writes.
  • User threads can now add dirty pages to the flush list in a relaxed order.
  • A dedicated log thread is now responsible for writing the log buffer to the system buffers, flushing system buffers to disk, notifying user threads about written and flushed redo, maintaining the lag required for the relaxed flush list order, and write checkpoints.
  • innodb_log_buffer_size动态修改

6.15. 在8.0.12版本中ALTER TABLE支持ALGORITHM=INSTANT

6.16. MySQL 8.0.13支持普通表空间的加密

INFORMATION_SCHEMA.INNODB_TABLESPACES中ENCRYPTION列表示该表空间是否加密

6.17. innodb_buffer_pool_in_core_file

在8.0.14版本中新增了参数innodb_buffer_pool_in_core_file可以动态修改,默认是启用.可以禁用来禁止缓冲池页被写入到核心文件中,从而减少核心文件的大小.

6.18. MySQL 8.0.14, InnoDB 支持并行索引读

innodb_parallel_read_threads必须设置为1以上 默认值是4

6.19. CREATE TABLESPACE中ADD DATAFILE字句是可选了

MySQL 8新特性--InnoDB相关新特性相关推荐

  1. 《MySQL技术内幕:InnoDB存储引擎》第2版笔记

    第1章 MySQL体系结构和存储引擎 1.1 定义数据库和实例 在MySQL数据库中,数据库文件可以是fm.MYD.MYI.ibd结尾的文件. MySQL数据库由后台线程以及一个共享内存区组成. My ...

  2. 【MySQL 第18章_MySQL8其它新特性】

    第18章_MySQL8其它新特性 1. MySQL8新特性概述 1.1 MySQL8.0 新增特性 1. 更简便的NoSQL支持 2.更好的索引 3. 更完善的JSON支持 4. 安全和账户管理 5. ...

  3. Oracle 21C 新特性:数据泵相关新特性汇总

    墨墨导读:本文来自墨天轮用户"JiekeXu"投稿,墨天轮主页:https://www.modb.pro/u/434,本文分享Oracle 21c 新特性:数据泵相关新特性汇总. ...

  4. mysql 5.6 fulltext_InnoDB 5.6 新特性之一:FullTEXT Indexes[1.简单介绍]

    先来看一条SQL语句:SELECT * FROM aa where acol like '%like_normal%'; 当我们使用Innodb时,无论如何对这条语句进行优化,都是无意义的:有的人会说 ...

  5. MySQL · 引擎特性 · InnoDB 崩溃恢复过程

    在前面两期月报中,我们详细介绍了 InnoDB redo log 和 undo log 的相关知识,本文将介绍 InnoDB 在崩溃恢复时的主要流程. 本文代码分析基于 MySQL 5.7.7-RC ...

  6. MySQL · 引擎特性 · InnoDB 事务子系统介绍

    前言 在前面几期关于InnoDB Redo和Undo实现的铺垫后,本节我们从上层的角度来阐述InnoDB的事务子系统是如何实现的,涉及的内容包括:InnoDB的事务相关模块,如何实现MVCC及ACID ...

  7. mysql innodb redolog_MySQL · 引擎特性 · InnoDB redo log漫游(转)

    前言 InnoDB 有两块非常重要的日志,一个是undo log,另外一个是redo log,前者用来保证事务的原子性以及InnoDB的MVCC,后者用来保证事务的持久性. 和大多数关系型数据库一样, ...

  8. MySQL 引擎特性 · InnoDB Buffer Pool

    前言 用户对数据库的最基本要求就是能高效的读取和存储数据,但是读写数据都涉及到与低速的设备交互,为了弥补两者之间的速度差异,所有数据库都有缓存池,用来管理相应的数据页,提高数据库的效率,当然也因为引入 ...

  9. mysql8+新语法_MySQL8.0新特性

    无意中发现MySQL的版本已经更新到8.0了,了解一下不同的地方 数据字典 新增了事务型的数据字典,用来存储数据库对象信息 之前,字典数据是存储在元数据文件和非事务型表中的 账号权限管理 添加了对 & ...

最新文章

  1. 中国互联网+固体饮料行业商业模式创新与投资机会深度研究报告
  2. 多维分析中的 UV 与 PV
  3. 多喜临门,BCH币价应声上涨
  4. Integer装箱和拆箱 以及扔玻璃球的题目
  5. 日本依靠储能系统解决光伏消纳问题
  6. SpringMVC _Controller认识(1)
  7. [云炬创业管理笔记]第十章商业计划书答辩测试2
  8. PL/SQL Developer连接Oracle 11g在Win8 64位系统下乱码
  9. mysql begin end 用法_数据库:Mysql中“select ... for update”排他锁分析
  10. python圈出车牌字符_Python+OpenCV实现车牌字符分割和识别
  11. 064 import和from...import
  12. 力软部署oracle,力软敏捷开发框架
  13. 分销商城系统源码开发
  14. HTML网页背景特效和鼠标点击特效
  15. 内部投资回报率IRR
  16. BurpSuite工具-HTTP协议详解部分(不懂就查系列)
  17. Latex论文写作各种小问题
  18. win10系统找不到telnet服务器,win10系统找不到Telnet服务的解决教程
  19. Python基于PHP+MySQL的个人网页设计与实现
  20. MYSQL压力测试工具

热门文章

  1. OSChina 周二乱弹 ——永远不要得罪一只猫
  2. CSDN网友就寝时间调查报告
  3. R478规划及实施—理想丰满、现实骨感
  4. 微课堂V2 v4.6.9
  5. Invalid prop: type check failed for prop centered. Expected Boolean, got String with value true
  6. Educoder——Java循环与分支语句编程练习
  7. 【小应用】使用TensorFlow目标检测模型和OpenCV分析足球比赛
  8. 互联网晚报 | iPhone 15 Pro Max预计售价2万块;周杰伦起诉网易不正当竞争;腾讯定性微信QQ故障为一级事故...
  9. Lenovo G480笔记本安装OS X Mavericks 10.9,升级10.9.1,驱动安装,DSDT修改全过程
  10. cv2.resize函数报错:error: (-215:Assertion failed) func != 0 in function ‘cv::hal::resize‘