#### 17.5.1.32 复制重试和超时

[](<>)[](<>)[](<>)[](<>)

系统变量的全局值[`replica_transaction_retries`](replication-options-replica.html#sysvar_replica_transaction_retries)（来自 MySQL 8.0.26）或[`slave_transaction_retries`](replication-options-replica.html#sysvar_slave_transaction_retries)（在 MySQL 8.0.26 之前）设置单线程或多线程副本上的应用程序线程在停止之前自动重试失败事务的最大次数。当 SQL 线程因为`InnoDB`死锁，或者当事务的执行时间超过`InnoDB` [`innodb_lock_wait_timeout`](innodb-parameters.html#sysvar_innodb_lock_wait_timeout)价值。如果事务具有阻止其成功的非临时错误，则不会重试。

默认设置为[`replica_transaction_retries`](replication-options-replica.html#sysvar_replica_transaction_retries)要么[`slave_transaction_retries`](replication-options-replica.html#sysvar_slave_transaction_retries)是 10，这意味着在应用程序线程停止之前重试具有明显临时错误的失败事务 10 次。将该变量设置为 0 将禁用事务的自动重试。在多线程副本上，可以在所有通道的所有应用程序线程上进行指定次数的事务重试。性能模式表[`复制应用程序状态`](performance-schema-replication-applier-status-table.html)显示在每个复制通道上发生的事务重试总数，在`COUNT_TRANSACTIONS_RETRIES`柱子。

重试事务的过程可能会导致副本或组复制组成员的延迟，该组成员可以配置为单线程或多线程副本。性能模式表[`replication_applier_status_by_worker`](performance-schema-replication-applier-status-by-worker-table.html)显示应用程序线程在单线程或多线程副本上重试事务的详细信息。此数据包括时间戳，显示应用程序线程从开始到结束应用最后一个事务（以及当前正在进行的事务何时开始），以及在原始源和直接源上提交之后的时间。该数据还显示了最后一个事务和当前正在进行的事务的重试次数，并使您能够识别导致事务重试的瞬时错误。您可以使用此信息来查看事务重试是否是复制滞后的原因，并调查导致重试的失败的根本原因。
