Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Współbieżność to możliwość używania tych samych danych w tym samym czasie przez dwie transakcje, a zwiększona izolacja transakcji zwykle zmniejsza współbieżność. Jest to spowodowane tym, że izolacja transakcji jest zazwyczaj realizowana poprzez blokowanie wierszy, a gdy blokowana jest większa liczba wierszy, można ukończyć mniej transakcji bez tymczasowego zablokowania przez zablokowane wiersze. Chociaż zmniejszona współbieżność jest ogólnie akceptowana jako kompromis dla wyższych poziomów izolacji transakcji niezbędnych do utrzymania integralności bazy danych, może to stać się problemem w interaktywnych aplikacjach z dużą aktywnością odczytu/zapisu, która korzysta z kursorów.
Załóżmy na przykład, że aplikacja wykonuje instrukcję SQL SELECT * FROM Orders. Wywołuje funkcję SQLFetchScroll , aby przewijać zestaw wyników i umożliwia użytkownikowi aktualizowanie, usuwanie lub wstawianie zamówień. Gdy użytkownik zaktualizuje, usunie lub wstawi zamówienie, aplikacja zatwierdzi transakcję.
Jeśli poziom izolacji jest Powtarzalny odczyt, transakcja może — w zależności od sposobu implementacji — zablokować każdy wiersz zwracany przez funkcję SQLFetchScroll. Jeśli poziom izolacji jest Serializowalny, transakcja może zablokować całą tabelę Zamówienia. W obu przypadkach transakcja zwalnia blokady tylko wtedy, gdy zostanie zatwierdzona lub wycofana. Jeśli więc użytkownik poświęca dużo czasu na odczytywanie zamówień i bardzo mało czasu na aktualizowanie, usuwanie lub wstawianie, transakcja może łatwo zablokować dużą liczbę wierszy, co czyni je niedostępnymi dla innych użytkowników.
Jest to problem, nawet jeśli kursor jest tylko do odczytu, a aplikacja umożliwia użytkownikowi odczytywanie tylko istniejących zamówień. W takim przypadku aplikacja zatwierdza transakcję i zwalnia blokady, gdy wywołuje klasę SQLCloseCursor (w trybie automatycznego zatwierdzania) lub SQLEndTran (w trybie zatwierdzania ręcznego).
Ta sekcja zawiera następujące tematy.