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.
COMMITlub ROLLBACKw rozsądnym czasie albo b) tak ustawić, aby ci sami ludzie nie zawsze chcieli tego samego wiersza w tym samym czasie.