Mam tabelę w serwerze SQL, który jest CRUD-ed równocześnie przez procedury przechowywanej uruchomione jednocześnie w różnych sesjach:Czy dodanie kolumny tożsamości klucza głównego może rozwiązać problemy z zakleszczeniem?
|----------------|---------|
| <some columns> | JobGUID |
|----------------|---------|
Procedura przebiega następująco:
- Wygeneruj identyfikator GUID.
- wstawić kilka rekordów do wspólnego stołu opisanego powyżej, oznaczając je GUID od kroku 1.
- wykonać kilka aktualizacji na wszystkich rekordów z kroku 2.
- Wybierz rekordy od kroku 3 jako wyjście SP.
Każdy select/insert/update/delete oświadczenia w procedurze przechowywanej ma WHERE JobGUID = @jobGUID
klauzuli, więc procedura działa tylko z zapisów on wprowadził na punkcie 2. Czasami jednak, gdy ta sama procedura przechowywana biegnie równolegle w różnych połączeniach na wspólnym stole występują zakleszczenia. Oto wykres zakleszczenia z SQL Server Profiler:
Blokada eskalacja nie występują. Próbowałem dodać wskazówki blokujące do wszystkich instrukcji DML i/lub zawijając treść procedury w transakcji i używając różnych poziomów izolacji, ale to nie pomogło. Nadal ta sama blokada RID na współdzielonej tabeli.
Po tym odkryłem, że tabela udostępniona nie ma klucza głównego/kolumny tożsamości. I raz dodałem go, zakleszczenia wydaje się, że zniknął:
alter table <SharedTable> add ID int not null identity(1, 1) primary key clustered
Kiedy usunąć kolumnę klucza podstawowego, że zakleszczenia są z powrotem. Kiedy dodaję to z powrotem, nie mogę odtworzyć tego impasu.
Pytanie brzmi, czy kolumna z kluczem głównym jest w stanie rozwiązać zakleszczenia, czy jest to tylko zbieg okoliczności?
Aktualizacja: jak @Catcall sugeruje, próbowałem stworzenia naturalnego środowiska klastrowego klucza podstawowego na istniejących kolumn (bez dodawania kolumny tożsamości), ale nadal złowione tego samego impasu (oczywiście, tym razem był to klucz blokada zamiast blokady RID).
jest kolumna GUID indeksowane? –
@MartinSmith: Tak, ma nieunikalny indeks nieklastrowy. –
Na jakim poziomie izolacji transakcji działają SP? –