14.22.4 InnoDB 错误处理

以下各项描述InnoDB如何执行错误处理。 InnoDB有时仅回滚失败的语句,而其他时候回滚整个事务。

锁定 await 超时导致InnoDB仅回滚正在 await 锁定且遇到超时的单个语句。 (要使整个事务回滚,请使用--innodb-rollback-on-timeout选项启动服务器。)如果使用当前行为,请重试该语句;如果使用--innodb-rollback-on-timeout,请重试该事务。

死锁和锁定 await 超时在繁忙的服务器上都是正常的,应用程序必须意识到它们可能发生并通过重试来处理它们。您可以通过在事务期间第一次更改数据和提交之间进行尽可能少的工作来减少它们的可能性,因此将锁保持在最短的时间内,并且行的数量最少。有时,在不同 Transaction 之间分配工作可能是实用且有用的。

当由于死锁或锁定 await 超时而导致事务回滚时,它将取消事务中语句的影响。但是,如果 start-transaction 语句是START TRANSACTIONBEGIN语句,则回滚不会取消该语句。直到出现COMMITROLLBACK或导致隐式提交的某些 SQL 语句,其他 SQL 语句才成为事务的一部分。

在隐式回滚期间以及在执行显式ROLLBACK SQL 语句期间,SHOW PROCESSLISTState列中为相关连接显示Rolling back

首页