10bet网址
MySQL 8.0参考手册
相关的文档10bet官方网站 本手册下载
PDF (Ltr)- 41.6 mb
PDF (A4)- 41.7 mb
手册页(TGZ)- 262.2 kb
手册页(邮政编码)- 372.2 kb
信息(Gzip)- 4.0 mb
信息(邮政编码)- 4.0 mb
本手册节选

15.6.6 Undo日志

撤消日志是与单个读写事务关联的撤消日志记录的集合。撤消日志记录包含关于如何撤消事务对的最新更改的信息聚集索引记录。如果另一个事务需要将原始数据视为一致读操作的一部分,则从撤消日志记录检索未修改的数据。Undo日志存在于undo日志部分,它们包含在内部回滚段.回滚段驻留在撤消表空间而在全局临时表空间

位于全局临时表空间中的Undo日志用于修改用户定义临时表中的数据的事务。这些撤消日志不会被重新记录,因为崩溃恢复不需要它们。它们仅用于服务器运行时的回滚。这种类型的撤销日志可以避免重做日志I/O,从而提高性能。

有关undo日志的静态数据加密的信息,请参见Undo日志加密

每个undo表空间和全局临时表空间各自最多支持128个回滚段。的innodb_rollback_segments变量定义回滚段的数量。

回滚段支持的事务数取决于回滚段中的撤消槽位数和每个事务所需的撤消日志数。回滚段中的undo槽位数目根据不同的实例而不同InnoDB页面大小。

InnoDB页面大小 回滚段中Undo slot的个数(InnoDB Page Size / 16)
4096 (4 kb) 256
8192 (8 kb) 512
16384 (16 kb) 1024
32768 (32 kb) 2048
65536 (64 kb) 4096

一个事务最多分配四个撤销日志,以下操作类型各一个:

  1. 插入对用户定义表的操作

  2. 更新而且删除对用户定义表的操作

  3. 插入对用户定义临时表的操作

  4. 更新而且删除对用户定义临时表的操作

根据需要分配Undo日志。例如,执行的事务插入更新,删除对常规表和临时表的操作需要分配四个撤销日志。只执行的事务插入对常规表的操作需要一个撤消日志。

在常规表上执行操作的事务被分配来自指定的撤消表空间回滚段的撤消日志。对于执行临时表操作的事务,将从指定的全局临时表空间回滚段中分配undo日志。

分配给事务的撤消日志将在事务持续期间附加到该事务。例如,分配给事务的撤消日志插入对普通表的操作用于所有插入事务对常规表执行的操作。

根据上面描述的因素,可以使用以下公式估计并发读写事务的数量InnoDB是能够支撑的。

请注意

在达到并发读写事务的数量之前,可能会遇到并发事务限制错误InnoDB是能够支撑的。当分配给事务的回滚段用尽撤消槽位时,就会发生这种情况。在这种情况下,请尝试重新运行事务。

当事务对临时表执行操作时,并发读写事务的数量InnoDB分配给全局临时表空间的回滚段的数量受到限制,默认为128。

  • 如果每个事务执行插入一个更新删除操作时,表示并发读写事务的个数InnoDB能够支撑的是:

    (innodb_page_size / 16) * innodb_rollback_segments * undo表空间的数量
  • 如果每个事务执行一个插入而且一个更新删除操作时,表示并发读写事务的个数InnoDB能够支撑的是:

    (innodb_page_size / 16 / 2) * innodb_rollback_segments * undo tablespace的数量
  • 如果每个事务执行一个插入操作临时表时,并发读写事务的个数即为InnoDB能够支撑的是:

    (innodb_page_size / 16) * innodb_rollback_segments
  • 如果每个事务执行一个插入而且一个更新删除操作临时表时,并发读写事务的个数即为InnoDB能够支撑的是:

    (innodb_page_size / 16 / 2) * innodb_rollback_segments