• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • 撤消日志

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

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

    有关撤消日志的静态数据加密的信息,请参阅撤消日志加密。

    每个撤消表空间和全局临时表空间分别支持最多128个回滚段。该innodb_rollback_segments变量定义回滚段的数量。

    回滚段支持的事务数取决于回滚段中的撤消插槽数和每个事务所需的撤消日志数。

    回退段中撤消插槽的数量根据InnoDB页面大小而有所不同。

    InnoDB页面大小回滚段中的撤消插槽数(InnoDB页面大小/ 16)
    4096(4KB)256
    8192(8KB)512
    16384(16KB)1024
    32768(32KB)2048
    65536(64KB)4096

    一个事务最多可以分配四个撤消日志,以下每种操作类型都可以分配一个:

    1. INSERT用户定义表上的操作
    2. UPDATEDELETE用户定义表上的操作
    3. INSERT用户定义的临时表上的操作
    4. UPDATEDELETE用户定义的临时表上的操作

    撤消日志根据需要分配。例如,对常规表和临时表执行INSERTUPDATEDELETE操作的事务需要完全分配四个撤消日志。仅对INSERT常规表执行操作的事务需要单个撤消日志。

    从分配的撤消表空间回滚段中分配了对常规表执行操作的事务的撤消日志。从已分配的全局临时表空间回滚段中分配了对临时表执行操作的事务的撤消日志。

    分配给事务的撤消日志在其持续时间内一直与事务相关。例如,为INSERT常规表上的操作分配给事务的撤消日志用于该事务INSERT在常规表上执行的所有操作。

    给定上述因素,可以使用以下公式来估计InnoDB能够支持的并发读写事务数。

    注意

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

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

    • 如果每个事务执行任一种或一种或操作,并发读-写事务的数目即能够支持的是:INSERTUPDATEDELETEInnoDB

      (innodb_page_size / 16) * innodb_rollback_segments * number of undo tablespaces
      
    • 如果每个交易执行和一个或操作,即并发读-写事务的数目是能够支持的是:INSERTUPDATEDELETEInnoDB

      (innodb_page_size / 16 / 2) * innodb_rollback_segments * number of undo tablespaces
      
    • 如果每个事务INSERT在临时表上执行操作,InnoDB则可以支持的并发读写事务数为:

      (innodb_page_size / 16) * innodb_rollback_segments
      
    • 如果每个交易执行和一个或操作上的临时表,并发读写的事务的数目是能够支持的是:INSERTUPDATEDELETEInnoDB

      (innodb_page_size / 16 / 2) * innodb_rollback_segments
      

    上篇:重做日志