一、Undo log的相关配置
1、innodb_undo_directory
MySQL InnoDB 存储引擎中用于配置 undo log 存储路径的参数。
SELECT tablespace_name,file_name from information_schema.files where file_type like 'undo log';
创建额外的撤销表空间
create undo tablespace tmp_undo_001 add datafile 'tmp_undo_001.ibu';
删除撤销表空间
alter undo tablespace tmp_undo_001 set inactive;
drop undo tablespace tmp_undo_001;
2、innodb_rollback_segments
innodb_rollback_segments
是 MySQL InnoDB 存储引擎中的一个系统变量,用于定义每个 undo 表空间中分配的回滚段数量。以下是关于该参数的详细信息:
-
作用
-
回滚段(rollback segment)是 InnoDB 中用于管理 undo log 的一种结构,每个回滚段可以支持一定数量的并发事务。
-
每个 undo 表空间和全局临时表空间都分配了
innodb_rollback_segments
指定数量的回滚段。
-
-
默认值与范围
-
默认值为 128,范围是 1 到 128。
-
-
并发事务能力
-
每个回滚段支持的事务数量取决于 InnoDB 的页面大小(innodb_page_size)和每个事务所需的 undo log 数量。
-
例如,对于 16KB 的页面大小,每个回滚段可以支持 1024 个 undo log slot。
-
-
优化建议
-
如果系统中存在高并发事务,可以适当增加 undo 表空间的数量(通过
innodb_undo_tablespaces
参数),以减少回滚段之间的锁竞争,从而提高并发性能。 -
通过调整
innodb_rollback_segments
和innodb_undo_tablespaces
参数,可以优化 InnoDB 的事务处理能力。
-
-
动态调整
-
innodb_rollback_segments
是一个动态变量,可以在运行时通过 SQL 命令进行调整。使用以下 SQL 命令来设置
innodb_rollback_segments
的值:SET GLOBAL innodb_rollback_segments = 128;
-
如果希望设置在 MySQL 重启后仍然有效,需要将设置写入 MySQL 的配置文件(通常是
my.cnf
)中:[mysqld] innodb_rollback_segments = 128
-
3、innodb_undo_log_encrypt
innodb_undo_log_encrypt
是 MySQL InnoDB 存储引擎中的一个系统变量,用于控制 undo log 数据的加密。undo log 数据加密适用于驻留在 undo 表空间中的 undo log。默认情况下,undo log 数据加密是禁用的。
启用 undo log 数据加密:在 MySQL 配置文件(通常是 my.cnf
)中添加以下内容:
[mysqld]
innodb_undo_log_encrypt = ON
4、innodb_max_undo_log_size
用于设置单个 Undo 表空间的最大大小。默认值:1 GB
5、innodb_undo_log_truncate
启用 innodb_undo_log_truncate
时,MySQL 会定期检查 Undo Log 表空间的大小。如果表空间的大小超过 innodb_max_undo_log_size
设置的阈值(默认为 1GB),MySQL 会尝试截断表空间,将其大小调整为初始大小(通常是 10MB)
6、innodb_purge_threads
参数作用
-
清理 Undo Log:Purge 线程负责将已提交事务的 Undo Log 记录从历史列表中移除,释放相关资源。
-
性能优化:合理配置 Purge 线程数量可以提高数据库的清理效率,减少磁盘空间占用。
默认值
-
默认值为 4(如果可用逻辑处理器数量大于 16)或 1(如果可用逻辑处理器数量小于等于 16)。
7、innodb_purge_rseg_truncate_frequency
参数作用
innodb_purge_rseg_truncate_frequency
是 MySQL 中的一个配置参数,用于控制 Purge 系统释放回滚段(Rollback Segment)的频率。具体来说,它决定了 Purge 线程每调用多少次会尝试释放回滚段,从而加速 Undo Log 表空间的截断(Truncate)操作。
默认值
默认值为 128,表示 Purge 线程每调用 128 次会尝试释放回滚段。