这期内容当中小编将会给大家带来有关Mysql中怎么实现在线回收撤消表空间,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。
<强> 1 Mysql5.6 强>
<强> 1.1相关参数强>
Mysql 5.6增加了参数innodb_undo_directory, innodb_undo_logs和innodb_undo_tablespaces这3个参数,可以把undo日志从ibdata1移出来单独存放。
- <李>
innodb_undo_directory:指定单独存放撤消表空间的目录,默认为。(即datadir),可以设置相对路径或者绝对路径。该参数实例初始化之后虽然不可直接改动,但是可以通过先停库,修改配置文件,然后移动撤销表空间文件的方式去修改该参数。
李>默认参数:
mysql>, show variables like & # 39; %撤销% & # 39;; + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + |,Variable_name ,,,,, |, Value | + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + | |,innodb_undo_directory 还以为;只,| |,innodb_undo_logs ,,, |, 128, | | |,innodb_undo_tablespaces 0,, | + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +
- <李>
innodb_undo_tablespaces:指定单独存放的撤消表空间个数,例如如果设置为3,则撤消表空间为undo001, undo002, undo003,每个文件初始大小默认为10 m。该参数我们推荐设置为大于等于3,原因下文将解释。该参数实例初始化之后不可改动
李>实例初始化是修改innodb_undo_tablespaces:
mysql_install_db ……——innodb_undo_tablespaces 美元,ls … undo001 undo002  undo003
- <李>
innodb_rollback_segments:默认128个。每个回滚段可同时支持1024个在线事务。这些回滚段会平均分布到各个撤消表空间中。该变量可以动态调整,但是物理上的回滚段不会减少,只是会控制用到的回滚段的个数。
<强> 1.2使用强>
初始化实例之前,我们只需要设置innodb_undo_tablespaces参数(建议大于等于3)即可将undo日志设置到单独的撤消表空间中。如果需要将undo日志放到更快的设备上时,可以设置innodb_undo_directory参数,但是一般我们不这么做,因为现在SSD非常普及.innodb_undo_logs可以默认为128不变。
undo日志可以存储于ibdata之外。但这个特性依然鸡肋:
- <李>
首先你必须在安装实例的时候就指定好独立撤消表空间,在安装完成后不可更改。
李> <李>撤销tablepsace的空间id必须从1开始,无法增加或者删除撤销表空间。
李> <强> 1.3大事务测试强>
mysql>, create table test.tbl (, id int  primary key auto_increment,, name varchar (200)); Query 好吧,,0,rows affected (0.03,秒) mysql>, start 事务; Query 好吧,,0,rows affected (0.00,秒) mysql>, insert into  test.tbl(名字),值(重复(& # 39;1 & # 39;00)); Query 好吧,,1,row affected (0.00,秒) mysql>, insert into  test.tbl(名字),select name 得到test.tbl; Query 好吧,,1,row affected (0.00,秒) 记录:1,重复:,0,警告:0 … mysql>, insert into  test.tbl(名字),select name 得到test.tbl; Query 好吧,,2097152,rows affected (24.84,秒) 记录:,2097152,重复:,0,警告:0 mysql>,提交; Query 好吧,,0,rows affected (7.90, sec)
观察undolog已经开始膨胀了!事务提交后空间也没有回收。
,美元du -sh 撤销* 10 m undo001 69 m undo002 10M undo003
2 Mysql5.7
5.7引入了在线truncate undo tablespace
2.1 相关参数
必要条件:
innodb_undo_tablespaces:最少有两个,这样一个在清理的时候可以使用另一个,该参数实例初始化之后不可改动
innodb_rollback_segments:回滚段的个数,总会有一个回滚段分配给系统表空间,32个保留给临时表空间。所以如果想使用undo表空间的话,这个值要至少为33。例如使用两个undo表空间,这个值就配35。如果设置多个undo表空间,系统表空间中的回滚段会变成非活跃状态。
Mysql中怎么实现在线回收撤消表空间