出現死鎖時如何遞歸呼叫程式?
P粉060112396
2023-08-30 22:10:39
<p>我的作業「預存程序」整夜運行。我時不時地陷入僵局。我想編寫一個程式碼,如果發現死鎖,它將在 15 分鐘後執行相同的過程最多 3 次。 </p>
<p>假設現在時間是上午 10 點。然後在上午 10 點運行它,如果發現死鎖,則在上午 10:15 再次調用該作業,然後在上午 10:30“如果死鎖”,然後在上午 10:45“如果死鎖”。如果最後一次執行死鎖,則完全終止作業。 </p>
<p>這是我所做的。 </p>
<pre class="brush:php;toolbar:false;">DECLARE totalTrys INT DEFAULT 0;
DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN
GET DIAGNOSTICS CONDITION 1
@err_num = MYSQL_ERRNO;
if(@err_num = 1213 AND totalTrys < 4) THEN
SET totalTrys = totalTrys 1;
SELECT SLEEP(900);
CALL guardi.prod_update_guardi_accounts();
END IF;
END;</pre>
<p>這是一種有效的方法嗎?除了消除死鎖之外還有更好的方法嗎? </p>
我會將所有內容保留在過程中:然後與此行為相關的所有程式碼都位於一個位置。另外:死鎖不會跟隨您的 CALL 語句的執行而不是繼續執行嗎?如果繼續進行,那麼問題可能已經解決了,那麼我們就什麼都不等待了。此外,死鎖後的交易只會在死鎖解決後執行。
我對您的程式碼的處理方法是:
您必須對此進行測試:未經測試,因此拼字錯誤並非不可能。