Serwisanci dostępni teraz · czynne całą dobę, także w weekendy i świętaWarszawa i okolice · dojazd bezpłatny
Darmowa diagnoza laptopa
Darmowa diagnoza laptopa
Dojazd do klienta bezpłatnie
Dojazd do klienta bezpłatnie
Laptopy zastępcze bezpłatnie
Laptopy zastępcze bezpłatnie
Odbiór i zwrot sprzętu bezpłatnie
Odbiór i zwrot sprzętu bezpłatnie

TRANSACTION

Termin Definicja
TRANSACTION

TRANSACTION to blok poleceń traktowany jako jedna niepodzielna operacja bazodanowa.

Cztery własności, które musi spełniać blok transakcyjny

Transakcja gwarantuje niepodzielność, spójność, izolację i trwałość zmian. W SQL Server otwiera ją BEGIN TRANSACTION, zatwierdza COMMIT, a wycofuje ROLLBACK. Dopóki nie padnie zatwierdzenie, wszystkie modyfikacje istnieją tylko w obrębie sesji i w dzienniku transakcji. Klasyczny przykład to przesunięcie towaru między magazynami: zdjęcie stanu z jednego i dopisanie do drugiego muszą albo wykonać się razem, albo wcale. Liczbę otwartych poziomów pokazuje zmienna @@TRANCOUNT, a to właśnie jej niedopilnowanie odpowiada za większość zagadkowych blokad — zagnieżdżone BEGIN podnosi licznik, ale tylko zewnętrzny COMMIT faktycznie zapisuje zmiany.

Poziomy izolacji i cena, jaką się za nie płaci

Domyślny poziom READ COMMITTED nie pozwala czytać danych niezatwierdzonych, ale dopuszcza sytuację, w której to samo zapytanie w jednej transakcji zwróci dwa różne wyniki. SERIALIZABLE eliminuje ten efekt kosztem długo trzymanych blokad zakresowych, a READ UNCOMMITTED, znany z popularnej wskazówki NOLOCK, w ogóle nie czeka na cudze zmiany i potrafi zwrócić wiersz, który za chwilę zniknie, albo policzyć ten sam rekord dwukrotnie. Bezpieczniejszym kompromisem bywa włączenie wersjonowania wierszy READ_COMMITTED_SNAPSHOT, przy którym czytający nie blokują piszących — trzeba jednak przewidzieć miejsce w bazie tempdb, bo tam trafiają wersje wierszy.

Zakleszczenia, spuchnięty dziennik i porzucone transakcje

Trzy awarie wracają w firmach najczęściej. Pierwsza to zakleszczenie: dwie sesje sięgają po te same tabele w odwrotnej kolejności, silnik zabija tańszą i użytkownik dostaje błąd 1205 z informacją o wybraniu jego procesu jako ofiary. Druga to plik dziennika rosnący aż do zapełnienia dysku, gdy baza pracuje w trybie odzyskiwania FULL, a nikt nie wykonuje kopii samego dziennika — sam COMMIT nie zwalnia miejsca. Trzecia to transakcja otwarta i porzucona przez zawieszoną aplikację albo przerwaną sesję pulpitu zdalnego; blokady żyją dalej, a reszta użytkowników widzi zamrożony program. Pomaga tu ustawienie SET XACT_ABORT ON, dzięki któremu błąd wykonania automatycznie wycofuje całą transakcję zamiast zostawiać ją w stanie zawieszonym.

Odblokowywanie bazy, gdy firma stoi

Takie zgłoszenia mają zawsze charakter pilny, bo zablokowana baza oznacza wstrzymaną sprzedaż. Sprawdzamy aktywne sesje i łańcuch oczekiwań, ustalamy transakcję blokującą, oceniamy skutki jej wycofania i dopiero wtedy działamy. Potem szukamy przyczyny: brakującego indeksu wymuszającego skanowanie i eskalację blokad, źle ustawionego limitu czasu w aplikacji albo błędnej obsługi zatwierdzeń. Serwisujemy bazy SQL Server pod Subiekta, WAPRO i Comarch przez całą dobę, więc pomoc nie zależy od tego, czy awaria wypadła w nocy.

+48 22 100 48 29Zadzwoń teraz · serwisant w 1 godzinę