每次值更改时,当前最大自动增量计数器值将写入重做日志,并保存到每个检查点上的引擎专用系统表中。 这些更改使当前最大自动增量计数器值在服务器重新启动时保持不变。 另外:
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
很奇怪在8.0文档中提到,这是一个新的支持动态修改的系统变量。但是这个参数在5.7中就已经支持动态修改了,连官方文档关于该变量的说明都是一样的,有点尴尬。实际上是在5.7.15就引入该变量了。
该参数用来禁用死锁的检测的,因为在高峰期的数据库中检测死锁是非常昂贵操作。所以在系统非常繁忙的时候,可以暂时关闭死锁检测。
注:要配合innodb_lock_wait_timeout变量使用,用来控制事务获取某个资源可等待时间,默认50S,超过该时间会返回错误信息: ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction
新引入的表,用来查看每个索引在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表来查看具体的表名和索引名,如:
SELECT
tables.NAME AS table_name,
indexes.NAME AS index_name,
cached.N_CACHED_PAGES AS n_cached_pages
FROM
INFORMATION_SCHEMA.INNODB_CACHED_INDEXES AS cached,
INFORMATION_SCHEMA.INNODB_INDEXES AS indexes,
INFORMATION_SCHEMA.INNODB_TABLES AS tables
WHERE
cached.INDEX_ID = indexes.INDEX_ID
AND indexes.TABLE_ID = tables.TABLE_ID;
InnoDB的临时表现在将在共享临时表空间中创建,ibtmp1。
和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语句,但是后者还可以使用,是为了向后兼容,两者作用是相同的。
如:
DROP PARTITION和ALGORITHM=INPLACE一起使用,将删除分区的数据和分区.
DROP PARTITION和ALGORITHM=COPY或old_alter_table=ON一起使用,将删除分区,但是会将该分区中的数据移动到复合条件的分区中,不符合条件的数据将被删除.
意味着回滚段将在两个undo表空间中创建,而不是之前在默认的InnoDB系统表空间中.另外如果想要truncate udno日志,那么innodb_undo_tablespaces最小值是2.
新的命名方式是undo_NNN,以前是undoNNN,其中NNN是undo空间号.
innodb_rollback_segments在8.0版本中表示每个undo表空间中的回滚段数量,在此之前表示一个MySQL实例总的回滚段数量. 其中Innodb_available_undo_logs被移除.
可以通过ALTER TABLESPACE … RENAME来重命名表空间
新的系统变量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.
用于查看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 |
+-------+---------+---------------+-------+------------+
INFORMATION_SCHEMA.INNODB_TABLESPACES中ENCRYPTION列表示该表空间是否加密
在8.0.14版本中新增了参数innodb_buffer_pool_in_core_file可以动态修改,默认是启用.可以禁用来禁止缓冲池页被写入到核心文件中,从而减少核心文件的大小.
innodb_parallel_read_threads必须设置为1以上 默认值是4