0
我有工作「存儲過程」運行過夜。我偶爾會陷入僵局。如果發現死鎖,我想編寫一個代碼,在15分鐘之後執行相同的過程,直到3次。如何在存在死鎖的情況下遞歸調用過程?
假設現在的時間是上午10點。然後在上午10點運行,如果發現死鎖,請在上午10:15再次致電作業,然後在上午10:30「如果已鎖定」,則在上午10:45「如果已鎖定」。如果上次運行死鎖,則完全終止作業。
這是我所做的。
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;
這是一個有效的方法嗎?除了消除死鎖之外,還有更好的方法嗎?
你必須添加一個循環 –
如果我將totalTrys和一個參數傳遞給過程? – Jaylen
你可以做到這一點,但是這部分不在這裏:) –