Nazwa transakcji to opcjonalna etykieta nadawana w poleceniu BEGIN TRANSACTION, ułatwiająca analizę zagnieżdżeń.
Rola nazwy transakcji w poleceniu BEGIN TRANSACTION
Nazwa transakcji jest opcjonalnym identyfikatorem tekstowym przypisywanym transakcji podczas jej rozpoczęcia. W składni używanej przez Microsoft SQL Server można rozpocząć transakcję poleceniem BEGIN TRANSACTION, a następnie podać jej nazwę. Przykładowo zapis BEGIN TRANSACTION AktualizacjaMagazynu rozpoczyna transakcję oznaczoną etykietą AktualizacjaMagazynu. Sama nazwa nie zmienia sposobu blokowania danych, nie określa poziomu izolacji i nie zastępuje mechanizmów zatwierdzania ani wycofywania zmian.
Transakcja obejmuje logiczny ciąg operacji, który powinien zostać zakończony zatwierdzeniem przez COMMIT TRANSACTION albo wycofaniem przez ROLLBACK TRANSACTION. Etykieta pozwala odróżnić ten ciąg od innych transakcji wykonywanych w tej samej sesji lub przez inne połączenia. Jej znaczenie jest przede wszystkim organizacyjne i diagnostyczne. Nazwa może wskazywać funkcję wykonywanego fragmentu kodu, na przykład zapis zamówienia, korektę stanu magazynowego albo zmianę danych klienta.
Widoczność etykiety podczas wykonywania zapytań
Nazwa transakcji może być przydatna podczas analizowania aktywnego obciążenia serwera SQL Server. Informacje o bieżących sesjach, żądaniach i otwartych transakcjach są dostępne za pośrednictwem widoków dynamicznego zarządzania, między innymi sys.dm_exec_requests, sys.dm_exec_sessions oraz sys.dm_tran_active_transactions. W zależności od użytego widoku i kontekstu zapytania można sprawdzać identyfikator transakcji, czas jej rozpoczęcia, stan oraz powiązanie z sesją.
W praktyce sama nazwa nie zawsze pojawia się w każdym zestawieniu monitorującym. Narzędzie diagnostyczne musi odczytywać właściwe informacje z mechanizmów SQL Server, a osoba analizująca problem powinna rozróżnić nazwę transakcji od nazwy procedury składowanej, aplikacji, hosta lub loginu. Są to odrębne elementy informacji o wykonaniu. Nazwa transakcji nie jest również automatycznie komentarzem widocznym w tekście każdego wykonywanego zapytania.
Zagnieżdżone transakcje i ograniczenia nazewnictwa
W SQL Server kolejne wykonanie BEGIN TRANSACTION w ramach tej samej sesji zwiększa wartość licznika zagnieżdżenia transakcji, który można odczytać funkcją @@TRANCOUNT. Nie oznacza to utworzenia całkowicie niezależnych transakcji z osobnymi punktami zatwierdzenia. Pełne zatwierdzenie zmian następuje dopiero po odpowiednim zakończeniu zewnętrznego poziomu transakcji. Z tego powodu nazwy przypisane kolejnym poziomom nie powinny być interpretowane jako niezależne jednostki trwałości.
Wycofanie transakcji z podaną nazwą ma ograniczone znaczenie w porównaniu z użyciem punktu zapisu. W SQL Server nazwa użyta przy ROLLBACK TRANSACTION musi odpowiadać nazwie transakcji zewnętrznej; do częściowego cofania operacji służy SAVE TRANSACTION wraz z nazwanym punktem zapisu. To ważne rozróżnienie podczas projektowania procedur, ponieważ przypadkowe użycie ROLLBACK może wycofać cały zakres aktywnej transakcji, a nie tylko ostatni fragment pracy.
Wykorzystanie nazwy przy diagnostyce aplikacji
W aplikacji korzystającej z SQL Server warto nadawać transakcjom nazwy opisujące operację biznesową lub techniczną, ale bez umieszczania w nich danych użytkownika, haseł, tokenów czy pełnych treści rekordów. Stała i czytelna konwencja, na przykład ImportProduktow albo ZmianaStatusuZamowienia, ułatwia powiązanie długiego blokowania, zakleszczenia lub błędu zapisu z konkretnym fragmentem kodu. Nazwa powinna być krótka, jednoznaczna i zgodna z rzeczywistym zakresem operacji.
Podczas sprawdzania problemu należy prześledzić cały przepływ: miejsce rozpoczęcia transakcji, wykonane instrukcje modyfikujące dane, obsługę wyjątków oraz końcowe COMMIT lub ROLLBACK. Pozostawiona otwarta transakcja może utrzymywać blokady i opóźniać inne operacje, niezależnie od tego, czy została nazwana. Diagnostyka powinna więc obejmować zarówno etykietę, jak i stan sesji, czas trwania, oczekiwanie na zasób, poziom izolacji oraz wartość @@TRANCOUNT. Przy naprawie komputera, na którym działa lokalne oprogramowanie bazodanowe, analiza nazwy transakcji może pomóc ustalić, który moduł aplikacji rozpoczął operację, lecz nie zastępuje kopii zapasowej ani kontroli poprawności samej bazy.