| Termin | Definicja |
|---|---|
| SNAPSHOT | SNAPSHOT to poziom izolacji transakcji oparty na wersjonowaniu wierszy, eliminujący blokady odczytu. Snapshot jako poziom izolacji transakcji w SQL ServerSNAPSHOT to poziom izolacji transakcji dostępny w Microsoft SQL Server, oparty na wersjonowaniu wierszy. Transakcja działająca w tym trybie odczytuje dane z punktu w czasie ustalonego przy rozpoczęciu transakcji, a niekoniecznie z chwili wykonania każdego pojedynczego zapytania. Dzięki temu kolejne odczyty tych samych wierszy w ramach jednej transakcji mogą zwrócić spójny obraz danych, nawet gdy inne transakcje w międzyczasie zatwierdzają zmiany. W standardowym modelu blokowania odczyt może oczekiwać na zakończenie operacji modyfikującej dane. Przy izolacji SNAPSHOT odczyt korzysta z wcześniejszej wersji wiersza i zasadniczo nie zakłada blokad odczytu, które zatrzymywałyby równoległe modyfikacje. Nie oznacza to jednak całkowitego braku blokad w silniku. SQL Server nadal stosuje blokady związane z zapisem, zatwierdzaniem transakcji, strukturami metadanych oraz innymi elementami kontroli współbieżności. Włączenie i użycie mechanizmuObsługa poziomu SNAPSHOT musi zostać włączona na poziomie konkretnej bazy danych. Służy do tego ustawienie Po aktywowaniu opcji sesja może wybrać izolację poleceniem SNAPSHOT należy odróżnić od opcji Wersje wierszy, spójność i konflikty zapisuGdy transakcja modyfikuje wiersz, SQL Server zachowuje informacje potrzebne do odtworzenia jego wcześniejszego stanu. Wersje wierszy są przechowywane w magazynie wersji, którego lokalizacja zależy od konfiguracji SQL Server; w typowej konfiguracji wykorzystuje się bazę Izolacja SNAPSHOT zapewnia spójność odczytu, ale nie rozwiązuje wszystkich problemów współbieżności. Jeżeli transakcja SNAPSHOT odczyta wiersz, a następnie inna transakcja zmieni ten sam wiersz i zatwierdzi zmianę, pierwsza transakcja może otrzymać konflikt aktualizacji, gdy spróbuje zapisać nieaktualną wersję. SQL Server zgłasza w takiej sytuacji błąd konfliktu aktualizacji, powszechnie identyfikowany numerem 3960. Aplikacja musi wtedy obsłużyć wyjątek, wycofać transakcję i ewentualnie ponowić całą operację po ponownym odczycie danych. Ważne jest także właściwe zarządzanie czasem trwania transakcji. Otwarte transakcje obejmujące długie operacje, oczekiwanie na użytkownika albo komunikację z innym systemem mogą zwiększać ilość przechowywanych wersji i obciążenie magazynu wersji. Przy analizie problemów należy sprawdzić czas trwania transakcji, aktywność sesji, wykorzystanie Znaczenie dla diagnostyki komputerów i baz danychW środowisku korzystającym z SQL Server nieprawidłowe działanie SNAPSHOT może objawiać się pozornie sprzecznymi wynikami zapytań, błędami aktualizacji albo wzrostem zajętości W przypadku problemu z aplikacją należy ustalić, czy odczyt ma być spójny dla całej transakcji, czy tylko dla pojedynczych instrukcji. Wybór SNAPSHOT wpływa na sposób obsługi retry, wymagania dotyczące magazynu wersji i zachowanie kodu wykonującego aktualizacje. Przydatne jest rejestrowanie identyfikatora transakcji, czasu rozpoczęcia, czasu zakończenia, rodzaju operacji oraz numeru błędu SQL Server. Takie dane pozwalają odtworzyć kolejność zdarzeń i stwierdzić, czy przyczyną jest konflikt zapisu, zbyt długa transakcja, niewłaściwa konfiguracja bazy czy błąd w logice aplikacji. Diagnostyka powinna obejmować także sprawdzenie planów wykonania i zakresu skanowanych danych, ponieważ szerokie zapytania zwiększają czas utrzymywania transakcji. Zmiana poziomu izolacji bez analizy logiki zapisu może usunąć część oczekiwania na blokady, ale jednocześnie ujawnić konflikty, których aplikacja wcześniej nie obsługiwała. Dlatego SNAPSHOT należy traktować jako element całego modelu transakcyjnego SQL Server, a nie jako przełącznik gwarantujący automatyczne przyspieszenie każdej operacji. |