Обработка тупиковой ситуации innoDB

Я обнаружил тупик при попытке получить блокировку; попробуйте перезапустить ошибку транзакции в моих таблицах InnoDB. Вот запрос:

UPDATE views 
SET visit_cnt = visit_cnt + 1 
WHERE visit_day = DATE(NOW()) 
AND article_id = '4838'

Этот запрос также запускает это через триггер ON UPDATE:

UPDATE articles 
SET views = views + 1 
WHERE id = NEW.article.id

Вот как я пытался это исправить:

$attempts_left = 5;
do
{
    mysql_query ($query);

    // if we found a deadlock, we will try this query 4 more times   
    if (mysql_errno () == 1213) { // 1213 - deadlock error
        $deadlocked = true;
        $attempts_left --;
    }
    else{
        $deadlocked = false;
    }
}
while($deadlocked && $attempts_left > 0);

Мой вопрос: это единственный способ справиться с тупиковой ситуацией? Я имею в виду, что это довольно уродливо, и время от времени случаются тупики. Есть ли какой-либо рекомендуемый способ исправить взаимоблокировки?

7
задан Zimbabao 15 March 2011 в 18:19
поделиться