Mysql中怎么实现在线回收撤消表空间

  介绍

这期内容当中小编将会给大家带来有关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中怎么实现在线回收撤消表空间