Późno spotykałem się z wieloma kłótniami dotyczącymi blokowania wierszy. Tabela rywalizacji wydaje się być konkretną tabelą.
Tak się zwykle dzieje -
- Deweloper 1 rozpoczyna transakcję z ekranu interfejsu Oracle Forms
- Deweloper 2 rozpoczyna kolejną transakcję z innej sesji przy użyciu tego samego ekranu
Po około 5 minutach interfejs wydaje się nie reagować. Sprawdzanie sesji pokazuje rywalizację o blokadę wiersza. „Rozwiązaniem”, które wszyscy rzucają, jest zabijanie sesji: /
Jako programista baz danych
- Co można zrobić, aby wyeliminować kontrowersje związane z blokadą wierszy?
- Czy byłoby możliwe dowiedzieć się, który wiersz procedury przechowywanej powoduje te blokowania wierszy
- Jaka byłaby ogólna wytyczna w celu ograniczenia / uniknięcia / wyeliminowania problemów związanych z kodowaniem?
Jeśli to pytanie wydaje się zbyt otwarte / niewystarczające, prosimy o edycję / powiadomienie - zrobię co w mojej mocy, aby dodać dodatkowe informacje.
Tabela, o której mowa, zawiera wiele wstawek i aktualizacji. Powiedziałbym, że jest to jedna z najbardziej obciążonych tabel. SP jest dość skomplikowany - dla uproszczenia - pobiera dane z różnych tabel, zapełnia je tabelami roboczymi, wiele operacji arytmetycznych występuje na stole roboczym, a wynik tabeli roboczej jest wstawiany / aktualizowany do danej tabeli.
Wersja bazy danych to Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 64-bit. Przepływ logiki jest wykonywany w tej samej kolejności w obu sesjach, transakcja nie jest otwarta zbyt długo (a przynajmniej tak mi się wydaje ), a blokady pojawiają się podczas aktywnego wykonywania transakcji.
Aktualizacja: Liczba wierszy tabeli jest większa niż się spodziewałem, około 3,1 miliona wierszy. Ponadto po śledzeniu sesji stwierdziłem, że kilka instrukcji aktualizacji do tej tabeli nie korzysta z indeksu. Dlaczego tak jest - nie jestem pewien. Kolumna, do której odwołuje się klauzula where, jest indeksowana. Obecnie odbudowuję indeks.
COMMIT
lub ROLLBACK
w rozsądnym czasie albo b) tak ustawić, aby ci sami ludzie nie zawsze chcieli tego samego wiersza w tym samym czasie.