グローバルシステム変数 slave_transaction_retries
は、シングルスレッドまたはマルチスレッドレプリカ上の適用者スレッドが、停止前に失敗したトランザクションを自動的に再試行する最大回数を設定します。 InnoDB
デッドロックのために SQL スレッドがトランザクションの実行に失敗した場合、またはトランザクション実行時間が InnoDB
innodb_lock_wait_timeout
値を超えた場合、トランザクションは自動的に再試行されます。 トランザクションに、成功を妨げる一時的でないエラーがある場合、再試行されません。
slave_transaction_retries
のデフォルト設定は 10 です。これは、通常一時エラーで失敗したトランザクションが、アプライヤスレッドが停止する前に 10 回再試行されることを意味します。 変数を 0 に設定すると、トランザクションの自動再試行が無効になります。 マルチスレッドのレプリカでは、すべてのチャネルのすべてのアプライヤスレッドで、指定された数のトランザクション再試行を実行できます。 「パフォーマンススキーマ」テーブル replication_applier_status
の COUNT_TRANSACTIONS_RETRIES
カラムには、各レプリケーションチャネルで行われたトランザクション再試行の合計数が表示されます。
トランザクションを再試行するプロセスによって、レプリカまたはグループレプリケーショングループメンバーでラグが発生する可能性があります。これは、シングルスレッドまたはマルチスレッドのレプリカとして構成できます。 「パフォーマンススキーマ」テーブル replication_applier_status_by_worker
には、シングルスレッドまたはマルチスレッドレプリカでの適用者スレッドによるトランザクションの再試行に関する詳細情報が表示されます。 このデータには、アプライヤスレッドが最後のトランザクションの適用にかかった時間 (および現在進行中のトランザクションが開始された時間) と、元のソースおよび即時ソースでのコミット後の時間を示すタイムスタンプが含まれます。 データには、最後のトランザクションおよび現在進行中のトランザクションの再試行回数も表示され、トランザクションの再試行の原因となった一時エラーを識別できます。 この情報を使用して、トランザクションの再試行がレプリケーションラグの原因であるかどうかを確認し、再試行の原因となった失敗の根本原因を調査できます。