Plan wykładu Spis treści 1 Przetwarzanie transakcyjne 1 1.1 Cechy transakcji................................. 2 1.2 Rozpoczęcie i zakończenie........................... 3 1.3 Punkty bezpieczeństwa............................. 3 2 Współbieżność 4 2.1 Anomalie.................................... 5 2.2 Izolacja transakcji................................ 5 2.3 Blokady..................................... 6 2.4 Zakleszczenia.................................. 7 2.5 Szeregowalność................................. 7 3 Podsumowanie 8 4 Źródła 8 Wprowadzenie Zmiany zachodzące w świecie rzeczywistym, a zmiany w bazie danych Niebezpieczeństwa związane z wprowadzaniem zmian Przykład problemów dla realizacji dostawy części od producenta do klienta: najpierw odjęto zamówioną liczbę części ze stanów magazynowych producenta, po czym nastąpiła awaria systemu, najpierw wstawiono do zamówień klienta odpowiednią liczbę zamówionych części, po czym nastąpiła awaria, prowadzono jednocześnie sprzedaż tej samej części do kilku innych klientów, utracono buforowane dane. 1 Przetwarzanie transakcyjne Transakcja Transakcja jest sekwencją logicznie powiązanych operacji na bazie danych, która przeprowadza bazę danych z jednego stanu spójnego w inny stan spójny. Typy operacji na bazie danych obejmują: odczyt i zapis danych oraz zakończenie połączone z akceptacją (zatwierdzeniem) lub wycofaniem transakcji. 1
Przykład BEGIN TRANSACTION; INSERT INTO zamowienia (nr_zam, l_sztuk, id_czesci) VALUES (1234, 1000, zab235); UPDATE stany_magazynu SET l_sztuk = l_sztuk - 1000 WHERE id_czesci LIKE zab235 ; COMMIT; 1.1 Cechy transakcji Własności ACID Atomicity - atomowość - zbiór operacji wchodzących w skład transakcji jest niepodzielny, to znaczy albo zostaną wykonane wszystkie operacje transakcji albo żadna. Consistency - spójność - transakcja przeprowadza bazę danych z jednego stanu spójnego do innego stanu spójnego. W trakcie wykonywania transakcji baza danych może być przejściowo niespójna. Transakcja nie może naruszać ograniczeń integralnościowych. Isolation - izolacja - transakcje są od siebie logicznie odseparowane. Transakcje oddziałują na siebie poprzez dane. Mimo współbieżnego wykonywania, transakcje widzą stan bazy danych tak, jak gdyby były wykonywane w sposób sekwencyjny. Durability - trwałość - wyniki zatwierdzonych transakcji nie mogą zostać utracone w wyniku wystąpienia awarii systemu. Zatwierdzone dane w bazie danych, w przypadku awarii, muszą być odtwarzalne. Podział transakcji Podział transakcji ze względu na porządek operacji: sekwencyjne, współbieżne; zależność operacji: zależne od danych, niezależne od danych; typ operacji: odczytu, aktualizujące dane. 2
1.2 Rozpoczęcie i zakończenie Rozpoczęcie transakcji Niejawnie: Wprowadzenie pierwszej poprawnej instrukcji w sesji użytkownika. Zakończenie poprzedniej transakcji. Jawnie: w niektórych systemach bazodanowych wydanie polecenia START TRANSACTION Zakończenie transakcji Jawnie: wydanie polecenia COMMIT - zatwierdzenie zmian, wydanie polecenia ROLLBACK - wycofanie zmian. Niejawnie: wylogowanie - zatwierdzenie zmian, wydanie polecenia DDL lub DCL - zatwierdzenie zmian, awaria systemu - wycofanie zmian. Zatwierdzenie transakcji Skutki zatwierdzenia transakcji: zwolnienie blokad, usunięcie punktów bezpieczeństwa, sprawdzenie odroczonych ograniczeń integralnościowych, trwały zapis zmian, widoczność zmian dla innych transakcji. Wycofanie transakcji Skutki wycofania transakcji: zwolnienie blokad, anulowanie zmian - stan bazy sprzed transakcji. 1.3 Punkty bezpieczeństwa Punkty bezpieczeństwa Tworzenie punktu bezpieczeństwa: SAVEPOINT nazwa_punktu; Usuwanie punktu bezpieczeństwa: 3
RELEASE SAVEPOINT nazwa_punktu; Wycofanie do punktu bezpieczeństwa: ROLLBACK TO SAVEPOINT nazwa_punktu; Punkty bezpieczeństwa - przykład UPDATE pracownicy SET placa = placa + 500 WHERE nr_akt = 8901; SAVEPOINT s1; UPDATE pracownicy SET dod_funkcyjny = 1.1*dod_funkcyjny WHERE nr_akt = 8902; SAVEPOINT s2; DELETE FROM pracownicy WHERE nr_akt = 9120; ROLLBACK TO SAVEPOINT s1; ROLLBACK; Punkty bezpieczeństwa - przykład DELETE FROM pracownicy WHERE nr_akt = 9120; SAVEPOINT s1; ALTER TABLE pracownicy RENAME COLUMN dod_funkcyjny TO placa_dod; 2 Współbieżność Spojność bazy danych Poziomy spójności w bazie danych: spójność polecenia - wszystkie dane, odczytywane przez pojedyncze polecenie, pochodzą z tego samego momentu w czasie - momentu rozpoczęcia wykonania polecenia, spójność transakcji - wszystkie polecenia, odczytujące w ramach pojedynczej transakcji dane z bazy danych, będą odczytywały stan z momentu rozpoczęcia transakcji. Zagrożenia spójności: awarie, działania użytkowników, współbieżny dostęp do danych. 4
Współbieżność Współbieżność równoczesny dostęp wielu transakcji do jednych i tych samych danych. Anomalie związane ze współbieżnym dostępem do danych: brudny odczyt utracona modyfikacja niepowtarzalny odczyt fantomy 2.1 Anomalie Anomalie Brudny odczyt (ang. dirty read) - system pozwala widzieć jednej transakcji niezatwierdzone zmiany wprowadzone przez drugą transakcję, które następnie zostają wycofane. Utracona modyfikacja (ang. lost update) - dwie transakcje równolegle przystępują do aktualizacji tych samych danych i zmiany, wprowadzone przez jedną z transakcji, zostają nadpisane przez zmiany z drugiej transakcji. Niepowtarzalny odczyt (ang. nonrepeatable read/fuzzy read) - wynik tego samego zapytania przeprowadzonego wielokrotnie w trakcie trwania transakcji jest różny (transakcja widzi zmiany wprowadzane przez drugą transakcję). Fantomy (ang. phantom read) - wynik tego samego zapytania przeprowadzonego wielokrotnie w trakcie trwania transakcji jest różny - powiększa się (transakcja widzi wiersze wprowadzane przez drugą transakcję). 2.2 Izolacja transakcji Poziomy izolacji transakcji Odczyt danych niezatwierdzonych (ang. read uncommitted) - zmiany, wprowadzone przez operacje w ramach aktywnej transakcji (jeszcze nie zatwierdzonej), są widoczne dla innych, równolegle realizowanych transakcji. Odczyt zatwierdzonych danych (ang. read committed) - zmiany, wprowadzone przez operacje w ramach transakcji, są widoczne dla innych transakcji dopiero po zatwierdzeniu transakcji. Powtarzalny odczyt (ang. repeatable read) - zapobiega anomalii niepowtarzalnego odczytu. Odczyt uszeregowany (ang. serializable) - serializacja na poziomie całej transakcji. Transakcja nie widzi zmian (zatwierdzonych i niezatwierdzonych) dokonywanych przez inne transakcje. Zmiany te są widoczne dopiero po jej zakończeniu. 5
Poziomy izolacji transakcji - eliminacja anomalii Dirty read Fuzzy read Phantom Read uncommitted + + + Read committed - + + Repeatable read - - + Serializable - - - Ustawienie poziomu izolacji transakcji Dla transakcji: SET TRANSACTION ISOLATION LEVEL {READ COMMITTED SERIALIZABLE}; Dla sesji: ALTER SESSION SET ISOLATION_LEVEL = {READ COMMITTED SERIALIZABLE}; Określenie trybu dostępu: SET TRANSACTION {READ WRITE READ ONLY}; 2.3 Blokady Blokada Blokada (ang. lock) - technika kontroli współbieżnego dostępu do danych polegająca na nałożeniu blokady na obiekt, który jest modyfikowany przez transakcję (w szczególności inne transakcje nie mogą go zmieniać). Blokady zakładane są automatycznie w momencie wydawania przez użytkownika poleceń modyfikacji danych lub ręcznie poprzez odpowiednie polecenia. Wyróżniamy: blokady wyłączne (ang. exclusive lock) blokady współdzielone (ang. shared lock) Ziarnistość blokad Ziarnistość blokad: kolumna wiersz strona dyskowa tabela baza danych 6
Nakładanie blokad Blokowanie wierszy: SELECT lista_wyrazen FROM tabela WHERE warunek_logiczny FOR UPDATE [OF <lista_atrybutów>] [NOWAIT]; Blokowanie tabel: LOCK TABLE nazwa_tabeli IN <tryb_blokowania> MODE [NOWAIT]; Tryby blokowania: ROW SHARE, ROW EXCLUSIVE, SHARE, SHARE ROW EXCLUSIVE, EXCLUSIVE. 2.4 Zakleszczenia Zakleszczenia Zakleszczenie (ang. deadlock) - stan, w którym dwie lub więcej równoległych transakcji znajduje się w stanie wzajemnego oczekiwania na uwolnienie blokady z potrzebnych zasobów, aby móc kontynuować działanie. System powinien wykryć blokadę i ją zlikwidować wyszukując cykl w grafie oczekiwań (ang. wait-for-graph) i wycofując jedną z należących do cyklu transakcji. Czas Transakcja 1 Transakcja 2 - - LOCK TABLE A IN EXCLUSIVE - MODE; - - - LOCK TABLE B IN EXCLUSIVE MODE; - - LOCK TABLE B IN EXCLUSIVE - MODE; wait - wait LOCK TABLE A IN EXCLUSIVE MODE; wait wait wait wait wait wait 2.5 Szeregowalność Szeregowalność Szeregowalność (ang. serializability) - kryterium poprawności kontroli współbieżności, mówiące, że transakcje realizowane równolegle są szeregowalne jeżeli wynik ich działania jest taki sam, jak w wypadku działania sekwencyjnego. Założenia: 7
Pojedyncze, sekwencyjne transakcje są poprawne. Wykonanie sekwencyjne pojedynczych transakcji w dowolnej kolejności daje poprawny i identyczny wynik. Realizacja współbieżna równoważna realizacji sekwencyjnej, dla tego samego zbioru transakcji, jest również poprawna i daje taki sam wynik. Protokół dwufazowego blokowania Protokół dwufazowego blokowania Zanim transakcja rozpocznie działanie na jakimś obiekcie zakłada na niego blokadę. Po zwolnieniu blokady transakcja nie może już nakładać nowych blokad. Twierdzenie dwufazowego blokowania Jeżeli wszystkie transakcje wypełniają protokół dwufazowego blokowania to wszystkie ich współbieżne realizacje są szeregowalne. 3 Podsumowanie Podsumowanie Transakcja to sekwencja atomowych operacji w bazie danych. Własności transakcji tworzą czwórkę ACID. Zagrożeniem spójności bazy danych są m.in. współbieżne operacje, realizowane na danych w bazie. Poziomy izolacji transakcji określają, jakie anomalie mogą wystąpić przy współbieżnym dostępie do danych. Blokady mogą ograniczać występowanie anomalii, ale również powodować zakleszczenia. Szeregowalność jako kryterium poprawności współbieżnej realizacji transakcji. 4 Źródła Źródła W wykładzie wykorzystano materiały: https://docs.oracle.com/cd/b13789_01/server.101/b10759/statements_9015. htm http://wazniak.mimuw.edu.pl/index.php?title=bazy_danych C. J. Date, Wprowadzenie do systemów baz danych, WNT - W-wa, (seria: Klasyka Informatyki), 2000 M. Lentner, Oracle 9i Kompletny podręcznik użytkownika, PJWSTK - W-wa, 2003 8