SQL Server 2005 - zarządzanie współbieżności na stołach

głosy
1

Mam w aplikacji ASP.NET tego procesu:

  • Nawiązać połączenie
  • Zacznij transakcję
  • Wstawić do tabeli „loaddata” dużo wartości z klasą SqlBulkCopy z kolumny zawierającej konkretny LoadId.
  • Wywołania procedury składowanej:
    • czytaj tabeli „loaddata” dla konkretnego LoadId.
    • Dla każdej linii robi dużo obliczeń co oznacza czytanie dziesiątki tabel i zapisać wyniki do tymczasowego (#temp) tabeli (proces, który ostatnie kilka minut).
    • Usuwa linie w „LoadDate” dla konkretnego LoadId.
    • Gdy wszystko jest zrobione, zapisać wynik w tabeli wyników.
  • Popełnienia lub wycofać transakcji, jeśli coś się nie powiedzie.

Moim problemem jest to, że jeśli mam 2 użytkowników, że rozpoczęcie procesu, drugi będzie musiał czekać, że poprzedni zakończył (ponieważ wkładka wydaje się umieścić wyłączną blokadę na stole) i moja aplikacja czasami spada w limit czasu (i użytkownicy nie są zadowoleni czekać :)).

Szukam sposobu, aby móc mieć użytkowników, że robi wszystko, równolegle, ponieważ nie ma interakcji, z wyjątkiem ostatniego: Pisanie wynik. Myślę, że to, co mnie blokuje to wkładki / usuwa w tabeli „loaddata”. Sprawdziłem inne poziomy izolacji transakcji, ale wydaje się, że nic nie może mi pomóc.

Jaki byłby idealnym byłoby, aby móc zdjąć blokadę wyłączności na stole „loaddata” (jest to możliwe, aby wymusić SQLSERVER tylko zablokować wiersze i nie tabeli?), Gdy wkład jest gotowy, ale bez zakończenia transakcji.

Jakieś sugestie?

Utwórz 09/12/2008 o 14:38
źródło użytkownik
W innych językach...                            


3 odpowiedzi

głosy
1

jeśli jesteś pewien, że nie ma problemu z operacji cioncurrent wyjątkiem ostatniej części, dlaczego nie rozpocząć transakcję tuż przed tych ostatnich wypowiedzi, cokolwiek oni na to, że nie wymagają izolacji), i zobowiązać się natychmiast po ich sukces .. Następnie wszystkie góry operacje odczytu nie blokują się nawzajem ...

Odpowiedział 09/12/2008 o 15:24
źródło użytkownik

głosy
1

Spójrz w górę zbioru transakcji IZOLACJA LEVEL READ popełnionych zrzutu książek online.

Odpowiedział 09/12/2008 o 15:04
źródło użytkownik

głosy
1

Transakcje powinny obejmować małe i szybkie wykonywanie kawałki SQL / kodu. Mają tendencję do być realizowane w różny sposób na różnych platformach. Będą blokować tabel, a następnie rozwiń blokadę jako modyfikacje rosną więc blokowanie innych użytkowników z kwerend lub aktualizowania tego samego wiersza / strony / tabeli.

Dlaczego nie zapomnieć transakcję i obsługiwać błędy przetwarzania w inny sposób? Czy Twój integralność danych naprawdę są zabezpieczone przez transakcję, czy można zrobić bez niego?

Odpowiedział 09/12/2008 o 14:43
źródło użytkownik

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more