撤消日志是与单个读写事务关联的撤消日志记录的集合。撤消日志记录包含有关如何撤消事务对聚集索引 记录的最新更改的信息。如果另一个事务需要将原始数据视为一致读取操作的一部分,则未修改的数据将从撤消日志记录中检索。撤消日志存在于 撤消日志段中,而撤消日志段包含在 回滚段中。默认情况下,回滚段在物理上是 系统表空间的一部分,但它们也可以驻留在 撤消表空间中。有关详细信息,请参阅第 14.6.3.3 节,“撤消表空间”。
InnoDB
支持 128 个回滚段。该
innodb_rollback_segments
变量定义 所使用的回滚段数
InnoDB
。
一个回滚段支持的事务数取决于回滚段中的undo槽数和每个事务需要的undo日志数。回滚段中撤消槽的数量根据
InnoDB
页面大小而不同。
InnoDB 页面大小 | 回滚段中的撤消槽数(InnoDB 页面大小 / 16) |
---|---|
4096 (4KB) |
256 |
8192 (8KB) |
512 |
16384 (16KB) |
1024 |
事务最多分配两个撤消日志,一个用于以下操作类型中的一种:
根据需要分配撤消日志。例如,执行INSERT
、
UPDATE
和
DELETE
操作的事务分配有两个撤消日志。只执行
INSERT
操作的事务被分配一个单一的撤销日志。撤消日志从也分配给事务的回滚段分配给事务。
分配给事务的撤消日志在其持续时间内保持附加到事务。例如,分配给某个INSERT
操作的事务的撤消日志用于该事务执行的所有INSERT
操作。
考虑到上述因素,可以使用以下公式来估计InnoDB
能够支持的并发读写事务数。
InnoDB
在达到能够支持
的并发读写事务数之前,可能会遇到并发事务限制错误。当分配给事务的回滚段用完撤消槽时会发生这种情况。在这种情况下,请尝试重新运行事务。