Jak nadawać priorytety transakcjom?

0

Załóżmy, że jest jeden serwer MS SQL i kilka klientów, mam wpływ na to, każdy klient normalnie rozpoczyna transakcję na poziomie read uncommited, wykonuje jakieś czynności (odczyt lub modyfikacje) i zatwierdza transakcję. W ramach transakcji mogę zaimplementować dodatkowe polecenia/zapytania SQL.

Są dwa różne programy-klienty i wiem, które czynności w jednym i drugim uruchamiają się bardzo często, jednocześnie i zdarza się deadlock. Generalnie, to serwer sam sobie wybierze, którą transakcję wysofa i do tego klienta zwraca komunikat błędu mniej więcej "transaction wad deadlocked".

Załóżmy, że nie jest możliwe, ani nie jest opłacalne prerobienie systemu komputerowego w kontekście czynnosci. Ktoś popełnił błąd projektowy, zaimplementował, jak zaimplementował i zdarza się, że sa takie dwie transakcje, które uruchomione jednocześnie stwarzają ryzyko deadlock i ten deadlock się zdarza.

Jeżeli ma to znaczenie, to program klienta jest tworzony w C# w .NET.

W jaki sposób można nadawać priorytety transakcjom? Mam na myśli mniej więcej coś takiego, że przy otwieraniu transakcji nadają jakiś numer, który wskazuje wysokość priorytetu. Jeżeli dojdzie do zakleszczenia transakcji o różnych priorytetach, to mogę być pewien, że serwer SZDB wywali transakcję o niższym priorytecie.

Inaczej mówiąc, mam dwie transakcję, które mogę uruchomić jednocześnie. Jak to zrobić (jakie polecenia SQL wysłać z klienta), żebym to ja decydował, którą transakcję SZBD wycofa w razie ich ewentualnego zakleszczenia, a nie serwer wg własnych algorytmów?

1 użytkowników online, w tym zalogowanych: 0, gości: 1