W moim rozumieniu zaznaczenie nie jest blokowane i nie powinno być przyczyną impasu.
Za każdym razem, gdy wstawiasz/aktualizujesz/lub usuwasz wiersz, uzyskuje się blokadę. Aby uniknąć zakleszczenia, należy upewnić się, że współbieżne transakcje nie aktualizują wiersza w kolejności, która może spowodować zakleszczenie. Ogólnie rzecz biorąc, aby uniknąć impasu musisz uzyskać blokadę zawsze w tej samej kolejności nawet w innej transakcji (np. zawsze najpierw tabela A, potem tabela B).
Ale jeśli w ramach jednej transakcji wstawisz tylko jedną tabelę, ten warunek jest spełniony, a to zwykle nie powinno prowadzić do impasu. Czy robisz coś innego w transakcji?
Zakleszczenie może się jednak zdarzyć, jeśli brakuje indeksów . Gdy wiersz jest wstawiony/zaktualizowany/usuń, baza danych musi sprawdzić ograniczenia relacyjne, to znaczy upewnić się, że relacje są spójne. W tym celu baza danych musi sprawdzić klucze obce w powiązanych tabelach. To może skutkować uzyskaniem innej blokady niż wiersz, który jest modyfikowany. Upewnij się więc, że zawsze masz indeks na kluczach obcych (i oczywiście kluczach podstawowych), w przeciwnym razie może to spowodować blokadę tabeli zamiast blokady wiersza . Jeśli nastąpi blokada tabeli, rywalizacja o blokady jest wyższa, a prawdopodobieństwo zakleszczenia wzrasta.
Nie jestem pewien, co dokładnie dzieje się w twoim przypadku, ale może to pomaga.