CREATE UNDO TABLESPACE/DROP UNDO TABLESPACEinnodb_directories参数定义可识别的路径或默认的数据目录下innodb_page_size的值配置,默认16K,初始文件大小为10M,8.0.23 之后Undo表空间初始大小为16M,默认扩展大小单位为16Mshow variables like ‘%truncate%’;
+————————————–+——-+
| Variable_name| Value |
+————————————–+——-+
| innodb_purge_rseg_truncate_frequency | 128 |
| innodb_undo_log_truncate | ON|
+————————————–+——-+
show variables like ‘%segment%’;
+——————————-+———–+
| Variable_name | Value |
+——————————-+———–+
| innodb_rollback_segments| 128 |
| innodb_segment_reserve_factor | 12.500000 |
+——————————-+———–+
innodb_undo_log_truncate— 控制是否自动做UNDO的truncate收缩操作,默认为ON,只有为ON时,下面2个参数才生效
innodb_max_undo_log_size— 控制UNDO做truncate收缩操作的阈值,当UNDO达到该值时才出发收缩操作
innodb_purge_rseg_truncate_frequency
— Batch UNDO清理的次数,默认最大值128,也就是128次后才会触发一次UNDO的truncate,而每次清理的undo page由innodb_purge_batch_size参数决定,innodb_purge_batch_size默认为300,也就是300*128个UNDO小批次清理后才会触发UNDO表空间的truncate(也就是UNDO表空间的收缩)操作
innodb_undo_tablespaces — 控制生成的UNDO表空间的数量,默认2个,在8.0对该参数做了废弃,但并未提供其他参数控制UNDO数量,当前依旧可以使用该参数做UNDO表空间数量配置,通常建议配置为3(手工收缩UNDO时需要至少3个UNDO表空间)
innodb_rollback_segments— UNDO表空间回滚段的数量,默认为最大值128
CREATE UNDO TABLESPACE
DROP UNDO TABLESPACE
ALTER UNDO TABLESPACE xxxx SET ACTIVE
ALTER UNDO TABLESPACE xxxx SET INACTIVE
— 可以用前面的命令查看创建后的状态
— 可以将已有的UNDO表示为inactive(也可理解为UNDO表空间收缩)
— PS:设置为INACTIVE的表空间的STATE为empty,表示这个表空间不包含任何事务回滚数据,且表空间也收缩为默认大小
ALTER UNDO TABLESPACE undo_003 SET INACTIVE;
— 可以将inactive的UNDO转为active
ALTER UNDO TABLESPACE innodb_undo_001 SET ACTIVE;
— 可以将inactive的UNDO表空间进行删除
— PS:默认以innodb_开头初始化的undo表空间不可被删除
DROP UNDO TABLESPACE innodb_undo_001;
ERROR: 3119 (42000): InnoDB: Tablespace names starting with `innodb_` are reserved.
— 非系统默认的UNDO在inactive后可被删除
ALTER UNDO TABLESPACE undo_003 SET ACTIVE;
Query OK, 0 rows affected (0.0030 sec)
PS:通常对表空间做收缩前最简单避免性能的方式是提前创建一个UNDO表空间,收缩完后再删除或一直保留均可
— 使用该命令查看UNDO truncate的次数及耗时等信息
SELECT NAME,SUBSYSTEM,COUNT,STATUS,COMMENT
FROM INFORMATION_SCHEMA.INNODB_METRICS
WHERE NAME LIKE ‘%truncate%’;
UNDO LOGS包含的是事务最后一次修改的聚簇索引记录(MySQL是聚簇索引表,也就是包含了一行完整的记录)
- 当innodb_page_size 为16KB默认值时,undo 的slot槽为1024个
- 16KB*1024/16=1024个槽
UNDO一共有以下4中日志类型
并发公式: (innodb_page_size / 16) * innodb_rollback_segments * number of undo tablespaces
并发公式:(innodb_page_size / 16 / 2) * innodb_rollback_segments * number of undo tablespaces
并发公式: (innodb_page_size / 16) * innodb_rollback_segments
并发公式:(innodb_page_size / 16 / 2) * innodb_rollback_segments
https://dev.mysql.com/doc/refman/8.0/en/innodb-undo-logs.html
https://dev.mysql.com/doc/refman/8.0/en/innodb-undo-tablespaces.html
到此这篇关于MySQL8.0 Undo Tablespace管理详解的文章就介绍到这了,更多相关MySQL8.0 Undo Tablespace内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!