系统变量的全局值replica_transaction_retries
(从MySQL 8.0.26)或slave_transaction_retries
(在MySQL 8.0.26之前)设置了应用程序线程在单线程或多线程副本上自动重试失败事务的最大次数。当SQL线程由于错误而无法执行事务时,事务将自动重试InnoDB
死锁,或者当事务的执行时间超过InnoDB
innodb_lock_wait_timeout
价值。如果事务存在阻止其成功的非临时错误,则不会重试事务。
的默认设置replica_transaction_retries
或slave_transaction_retries
为10,意味着在应用程序线程停止之前,具有明显临时错误的失败事务将被重试10次。将该变量设置为0将禁用事务的自动重试。在多线程副本上,可以在所有通道的所有应用程序线程上进行指定数量的事务重试。性能模式表replication_applier_status
中显示在每个复制区域通道上发生的事务重试的总数COUNT_TRANSACTIONS_RETRIES
列。
重试事务的过程可能会导致副本或Group Replication组成员的延迟,可以将其配置为单线程或多线程副本。性能模式表replication_applier_status_by_worker
显示应用程序线程在单线程或多线程副本上的事务重试的详细信息。该数据包括时间戳,显示应用程序线程从开始到结束应用上一个事务所花费的时间(以及当前正在进行的事务是何时启动的),以及在原始源和即时源上提交之后的时间。数据还显示了上一个事务的重试次数和当前正在进行的事务,并使您能够识别导致事务重试的短暂错误。您可以使用此信息查看事务重试是否是复制延迟的原因,并调查导致重试的失败的根本原因。