ホームページ  >  に質問  >  本文

デッドロックが発生したときにプログラムを再帰的に呼び出すにはどうすればよいですか?

<p>私のジョブ「ストアド プロシージャ」は夜間に実行されます。時々行き詰まってしまいます。デッドロックを発見した場合、15分後に同じ処理を3回まで実行するコードを書きたいです。 </p> <p>今が午前 10 時だとします。次に、午前 10 時に実行し、デッドロックが見つかった場合は、午前 10 時 15 分にジョブを再度呼び出します。次に、「デッドロックの場合」午前 10 時 30 分に、次に「デッドロックの場合」午前 10 時 45 分にジョブを呼び出します。最後の実行でデッドロックが発生した場合は、ジョブを完全に終了します。 </p> <p>これが私がやったことです。 </p> <pre class="brush:php;toolbar:false;">totalTrys INT DEFAULT 0; を宣言します。 SQLEXCEPTION の終了ハンドラを宣言する 始める 診断条件の取得 1 @err_num = MYSQL_ERRNO; if(@err_num = 1213 AND totalTrys < 4) THEN SET totalTrys = totalTrys 1; SELECT SLEEP(900); Guardi.prod_update_guardi_accounts() を呼び出します。 終了 IF; END;</pre> <p>これは効率的なアプローチですか?デッドロックを解消するより良い方法はあるでしょうか? </p>
P粉060112396P粉060112396416日前482

全員に返信(1)返信します

  • P粉649990163

    P粉6499901632023-08-31 15:04:19

    私ならプロセス内にすべてを保持します。そうすれば、この動作に関連するすべてのコードが 1 か所に集まります。また、デッドロックは CALL ステートメントの実行を続行せずに実行した後に発生するのではありませんか?続行すれば、問題は解決されている可能性があり、何も待つ必要はありません。さらに、デッドロック後のトランザクションは、デッドロックが解決された後にのみ実行されます。

    あなたのコードに対する私のアプローチは次のとおりです:

    リーリー

    これはテストする必要があります: 未テストなので、タイプミスは不可能ではありません。

    返事
    0
  • キャンセル返事