Tomasz Zadora programuję
Temat: Strategia unikania deadlocków
Myślę o takiej strategii unikania deadlocków jak: ustalenie priorytetu blokowania (SHARED/EXCLUSIVE) pojedynczych rekordów lub zakresu w tabelach.Tworzymy kontrolera kolejności blokowania tabel InnoDB: dla każdej tabeli w bazie ustalamy pewien priorytet liczbowy, powiedzmy, że czym wyższa liczba tym wcześniej tabela powinna być blokowana / ma pierszeństwo przed tymi z niższa liczbą (lub odwrotnie - nie ważne).
Po starcie transakcji dla absolutnie każdego zapytania SQL tworzącego lock (shared/exclusive) wysyłamy do kontrolera informacje o tym wraz z nazwą tabeli która będzie zablokowana, jeżeli próbujemy blokować w nieodpowiedniej kolejności kontroler zgłasza błąd.
Takie rozwiązanie teoretycznie wg. dokumentacji MySQL powinno gwarantować, że nigdy nie wystąpi deadlock - co najwyżej może spowodować timeout w oczekiwaniu na uzyskanie locka.
Zgadza się, czy nadal jest jakaś możliwość wystąpienia deadlock-a ?Tomasz Zadora edytował(a) ten post dnia 01.07.11 o godzinie 23:03