OLTP Przetwarzanie Transakcyjne



Podobne dokumenty
przykłady problemów; realizacja dostaw części od producenta do klienta:

1 Przetwarzanie transakcyjne Cechy transakcji Rozpoczęcie i zakończenie Punkty bezpieczeństwa... 3

BAZY DANYCH. Transakcje. opracowanie: Michał Lech

Transakcje. (c) Instytut Informatyki Politechniki Poznańskiej

Bazy danych. Andrzej Łachwa, UJ, /15

Bazy danych 2. Wykład 6 Transakcje

Plan ćwiczenia. Rozdział 17. zarządzania współbieżnością. Dostęp współbieżny a dostęp spójny. Spójność bazy danych

Ustawienie na poziomie sesji (działa do zmiany lub zakończenia sesji zamknięcia połączenia).

Bazy danych 9. SQL Klucze obce Transakcje

Plan ćwiczenia. Rozdział 17 Zarządzanie współbieżnością. Dostęp współbieżny a dostęp spójny. Spójność bazy danych

Transakcje jednocześnie ACID

Wykład V. Indeksy. Struktura indeksu składa się z rekordów o dwóch polach

Zarządzanie transakcjami

Izolacje transakcji oraz anomalie. Robert A. Kłopotek Wydział Matematyczno-Przyrodniczy. Szkoła Nauk Ścisłych, UKSW

Oracle PL/SQL. Paweł Rajba.

Bazy danych. Dr inż. Paweł Kasprowski

Wykłady z przedmiotu Podstawy baz danych Transakcje dr hab. prof. nadzw. Tadeusz Antczak. Transakcje

Właściwości transakcji

Ćwiczenie 9 współbieŝność

Wykłady z przedmiotu Podstawy baz danych Transakcje dr hab. prof. UŁ. Tadeusz Antczak. Transakcje

Wykład 8. SQL praca z tabelami 5

Bazy danych wykład dziewiaty Transakcje. Konrad Zdanowski ( Uniwersytet Kardynała Stefana Bazy danych Wyszyńskiego, wykładwarszawa)

070 TRANSAKCJE. Prof. dr hab. Marek Wisła

Rozdział 17. Zarządzanie współbieżnością zadania dodatkowe

Bazy danych 9. Klucze obce Transakcje

Bazy danych 9. Klucze obce Transakcje. P. F. Góra

Przechowywanie danych

PRZESTRZENNE BAZY DANYCH WYKŁAD 2

Blaski i cienie wyzwalaczy w relacyjnych bazach danych. Mgr inż. Andrzej Ptasznik

Wprowadzenie do projektowania i wykorzystania baz danych. Katarzyna Klessa

3 Przygotowali: mgr inż. Barbara Łukawska, mgr inż. Maciej Lasota

Rozdział 1 Wprowadzenie do baz danych. (c) Instytut Informatyki Politechniki Poznańskiej 1

Plan wykładu. Przykład. Wprowadzenie BAZY DANYCH. Transakcje Hurtownie danych

Iwona Milczarek, Małgorzata Marcinkiewicz, Tomasz Staszewski. Poznań,

Administracja i programowanie pod Microsoft SQL Server 2000

Internetowe bazy danych

Bazy danych i systemy zarzadzania

Podstawy języka SQL - dokończenie TRANSAKCJE 1

Bazy danych 6a. Transakcje. P. F. Góra

1 Zaznacz poprawne stwierdzenia dotyczące grup plików (filegroup) możemy określić do której grupy plików trafi

SQL Server i T-SQL w mgnieniu oka : opanuj język zapytań w 10 minut dziennie / Ben Forta. Gliwice, Spis treści

Microsoft SQL Server Podstawy T-SQL

Tadeusz Pankowski

Bazy danych 7. Klucze obce Transakcje. P. F. Góra

Zarządzanie obiektami bazy danych Oracle11g

Transakcje Wykład z bazy danych dla studen

Pojęcie bazy danych. Funkcje i możliwości.

Wprowadzenie do projektowania i wykorzystania baz danych Relacje

Bazy danych i usługi sieciowe

Podstawy języka T-SQL : Microsoft SQL Server 2016 i Azure SQL Database / Itzik Ben-Gan. Warszawa, Spis treści

Oracle11g: Wprowadzenie do SQL

I. Język manipulowania danymi - DML (Data Manipulation Language). Polecenia INSERT, UPDATE, DELETE

Sprawdzenie poziomu izolacji transakcji (w aktualnym połączeniu):

Systemy GIS Tworzenie zapytań w bazach danych

SZKOLENIE: Administrator baz danych. Cel szkolenia

Bazy danych - Materiały do laboratoriów VIII

Podstawowe pojęcia dotyczące relacyjnych baz danych. mgr inż. Krzysztof Szałajko

Rozdział 17. Zarządzanie współbieżnością zadania

Wielowersyjne metody synchronizacji transakcji

Bazy Danych. C. J. Date, Wprowadzenie do systemów baz danych, WNT - W-wa, (seria: Klasyka Informatyki), 2000

Przykłady najlepiej wykonywać od razu na bazie i eksperymentować z nimi.

Język SQL. Rozdział 9. Język definiowania danych DDL, część 2.

Typy tabel serwera MySQL

I. Techniki wielowersyjne sterowania współbieżnością

PLAN WYKŁADU BAZY DANYCH PODSTAWOWE KWESTIE BEZPIECZEŃSTWA OGRANICZENIA DOSTĘPU DO DANYCH

Adam Cankudis IFP UAM

System plików warstwa fizyczna

System plików warstwa fizyczna

System plików warstwa fizyczna

Język SQL. Rozdział 10. Perspektywy Stosowanie perspektyw, tworzenie perspektyw prostych i złożonych, perspektywy modyfikowalne i niemodyfikowalne.

BAZY DANYCH Cz III. Transakcje, Triggery

Oracle PL/SQL. Paweł Rajba.

Bazy danych Transakcje

Ile rekordów będzie zawierała tabela przy założeniu, że na początku była pusta?

Wprowadzenie (1) Przetwarzanie transakcyjne. Wprowadzenie (2) Problemy przygotowania aplikacji

Bazy danych w sterowaniu

Modelowanie hierarchicznych struktur w relacyjnych bazach danych

15. Funkcje i procedury składowane PL/SQL

Ogólny plan przedmiotu. Strony WWW. Literatura BAZY DANYCH. Materiały do wykładu:

Transakcyjne przetwarzanie danych

E.14 Bazy Danych cz. 18 SQL Funkcje, procedury składowane i wyzwalacze

Wyzwalacze. do automatycznego generowania wartości kluczy głównych. Składnia instrukcji tworzacej wyzwalacz

E.14 Bazy Danych cz. 15 SQL Transakcyjne przetwarzanie danych

Instrukcja podwaja zarobki osób, których imiona zaczynają się P i dalsze litery alfabetu zakładamy, że takich osbób jest kilkanaście.

Wyzwalacz - procedura wyzwalana, składowana fizycznie w bazie, uruchamiana automatycznie po nastąpieniu określonego w definicji zdarzenia

Wykład :45 BD-1 W_3

Obsługa błędów w SQL i transakcje. Obsługa błędów w SQL

Autor: Joanna Karwowska

Bazy danych 6. Klucze obce. P. F. Góra

Bazy danych i usługi sieciowe

Kopie bezpieczeństwa NAPRAWA BAZ DANYCH

Indeksowanie w bazach danych

PODSTAWY BAZ DANYCH. 11. Transakcje. 2009/ Notatki do wykładu "Podstawy baz danych"

Relacyjne bazy danych. Podstawy SQL

Bazy danych. Bazy danych. Podstawy języka SQL. Dr inż. Paweł Kasprowski.

Laboratorium nr 4. Temat: SQL część II. Polecenia DML

Przykład 3 Zdefiniuj w bazie danych hurtownia_nazwisko przykładową funkcję użytkownika fn_rok;

Paweł Rajba

Przykładowa baza danych BIBLIOTEKA

Transkrypt:

ZTB: OLTP Przetwarzanie Transakcyjne 1 Zaawansowane Technologie Bazodanowe Wykład p.t. OLTP Przetwarzanie Transakcyjne

ZTB: OLTP Przetwarzanie Transakcyjne 2 Pojęcie transakcji w bazach danych Transakcje Przetwarzanie danych w bazach danych może mieć charakter transakcyjny. Oznacza to, że baza przeprowadzana jest z jednego stanu stabilnego do innego, nowego stanu stabilnego. Takie przetwarzanie określa się jako On-Line Transactional Processing (OLTP). Transakcja logicznie niepodzielny ciag operacji na bazie danych. Transakcja to grupa kolejnych instrukcji SQL (i wewnętrznego języka programowania) realizowanych w formie sekwencji przez pojedynczego użytkownika lub aplikację. Transakcja jest jednostką logiczną i może składać się z jednej lub wielu instrukcji SQL. Transakcja kończy się sukcesem albo porażka. Porażka powoduje anulowanie transakcji (i wszystkich jej efektów cząstkowych). Transakcja zaczyna się instrukcją BEGIN [TRANSACTION WORK], Transakcję zatwierdza się instrukcją COMMIT [WORK], Transakcję anuluje się instrukcją ROLLBACK. Transakcja może zakończyć się porażką w przypadku: awarii systemu, przerwania połączenia, niemożności kontynuowania operacji (np. brak miejsca na dysku), niestabilności (niespójności) stanu końcowego (niespełnione więzy integralności).

ZTB: OLTP Przetwarzanie Transakcyjne 3 Przykład transakcji Transakcja operacja przelewu User ID User ID 1234.00 +1234.00 Rysunek 1: Przykład transakcji: przelew pomiędzy kontami Przykładowa kolejność transakcji: UPDATE Tab_Accounts SET Account = Account - 1234.00 WHERE ID = User_ID_1; UPDATE Tab_Accounts SET Account = Account + 1234.00 WHERE ID = User_ID_2;

ZTB: OLTP Przetwarzanie Transakcyjne 4 Zasady realizacji transakcji w bazach danych Transakcje zasady Zasady realizacji transakcji: SZBD automatycznie rozpoczyna transakcję po jej uruchomieniu, gdy nie jest aktywna inna transakcja, blokująca jej realizację, Jeżeli transakcja kończy się sukcesem, to zostaje zatwierdzona (ang. committed). Jeżeli transakcja nie może być zrealizowana, to zostaje odrzucona (ang. aborted). Transakcja odrzucona zostaje wycofana (ang. rolled back; czynność wycofywania określa się jako rollback) do stanu sprzed jej rozpoczęcia. Transakcja zatwierdzona nie może być wycofana. Transakcja może prowadzić do utraty danych (np. UPDATE, DELETE). Transakcje mogą być tylko do odczytu (nie powodują potrzeby blokowania danych). W trakcie transakcji można opóźniać kontrolę ograniczeń (SET CONSTRAINTS MODE). Transakcje mogą określać poziom izolacji blokady nałożonej na dane (SET TRANSACTION); standard SQL-92 (ISO) określa cztery poziomy izolacji: READ UNCOMMITTED, READ COMMITTED, READ REPETABLE, SERIALIZABLE.

ZTB: OLTP Przetwarzanie Transakcyjne 5 Zasady realizacji transakcji ACID Zasady ACID przetwarzania transakcyjnego Współczesne (wielodostępne) SZBD umożliwiają jednoczesne przetwarzanie wielu transakcji (np. systemy rezerwacji miejsc, systemy bankowe, etc.). Poprawność i kompletność realizacji transakcji gwarantuje moduł zarządzania transakcjami. Obowiązują cztery poniższe zasady ACID: Atomicity (atomiczność, niepodzielność) wykonywana jest albo cała transakcja (od początku do końca, albo żaden jej element nie może zostać zeralizowany (nie jest dopuszczalna realizacja częściowa; wszystko albo nic ). Consistency (spójność) baza danych musi zachować spójność, dane po wykonaniu transakcji muszą być zgodne z nałożonymi ograniczeniami; transakcja przeprowadza bazę ze stanu stabilnego do nowego stanu stabilnego. Isolation (izolacja, niezależność) transakcje są wykonywane niezależnie od siebie. Jeżeli dwie lub więcej transakcji jest przetwarzanych jednocześnie, nie mogą/nie powinny one wzajemnie na siebie oddziaływać; w wyniku jednoczesnego ich przetwarzania nie może się zdarzyć nic, co nie zdarzyłoby się, gdyby były one przetwarzane po kolei. Durability (trwałość) po zakończeniu transakcji jej wynik nie może zostać utracony (np. z powodu awarii systemu). Blokady: Realizacja zasad izolacji (zasadnicza idea) polega na blokowaniu dostępu do pewnych elementów bazy danych podczas realizacji transakcji (np. tabel). Granulacja blokad: SZBD wprowadzają różne poziomy blokowania; rodzaj i rozmiary blokowanych elementów mogą być różne (np. blokady na poziomie rekordów, bloków na dysku, plików, relacji).

ZTB: OLTP Przetwarzanie Transakcyjne 6 Zasady realizacji transakcji ACID Zasady ACID objaśnienie szczegółowe niepodzielność (ang. atomicity) - każda transakcja jest traktowana jednostkowo, jeśli chociaż jedno z poleceń objęte pojedynczą transakcją zakończy się niepowodzeniem to wynikiem takiej transakcji będzie operacja odrzucenia (wycofania) wszystkich dotychczasowych zmian przeprowadzonych w ramach tej transakcji - i odwrotnie - aby transakcja zakończyła się sukcesem to wszystkie operacje wchodzące w skład transakcji muszą się zakończyć powodzeniem. Należy w tym przypadku uwzględnić różnorodność przyczyn, jakie mogą spowodować niemożność wykonania danych operacji na rekordach: błędy w składni kwerend (zgłaszanie wyjątków), awarie baz danych, systemu operacyjnego czy sprzętu; w komercyjnych, wysokowydajnych serwerach bazodanowych każda z tych ewentualności musi zostać odpowiednio rozpatrzona i obsłużona na wypadek wystąpienia usterki, spójność (ang. consistency) - podczas przeprowadzania transakcji nie może dochodzić do sytuacji naruszania zdefiniowanych przez administratora więzów integralności oraz pod żadnym pozorem nie mogą zostać wpisane błędne dane (zły format, nieodpowiednie typy danych, brak wartości domyślnych). Jeżeli taka sytuacja będzie miała miejsce w momencie realizacji któregokolwiek z kroków danej transakcji to taka transakcja musi zostać unieważniona (należy zapewnić tzw. spójny stan bazy danych). Należy zdawać sobie jednak sprawę z tego, że nawet najbardziej restrykcyjnie zdefiniowane więzy integralności w schemacie bazy danych nie ustrzegą przed popełnianymi nierzadko błędami ludzkimi (np. błędy wynikające z nieprawidłowego zaimplementowania algorytmu obliczającego pewne istotne wartości, które w kolejnym etapie biorą bezpośredni udział w realizacji danej transakcji),

ZTB: OLTP Przetwarzanie Transakcyjne 7 niezależność (ang. isolation) - zapewnienie wzajemnego odseparowania wielu transakcji od siebie w sytuacji gdy są one wykonywane równocześnie i skutki zakończenia którejkolwiek z nich mogą bezpośrednio wpływać na stan reszty równolegle wykonywanych transakcji. Wbrew pozorom jest to właściwość, która przysparza cały szereg potencjalnych problemów, które muszą zostać rozwiązane przez programistów implementujących dany system bazodanowy. Zagadnieniom niezależności transakcji (z zakresu współbieżności programowania) poświęcony jest podrozdział 4.2 niniejszej pracy, trwałość (ang. durability) - pewność, że wszystkie dane, które uległy zmianie podczas zakończonej pomyślnie transakcji nie zostaną w żaden sposób utracone. Praktyczna realizacja tej własności w bazach danych to systemy automatycznej archiwizacji i replikacji (backup) oraz zapisu logów transakcyjnych, pozwalających na natychmiastowe odtworzenie - w razie awarii systemu - ostatniego, spójnego stanu bazy danych.

ZTB: OLTP Przetwarzanie Transakcyjne 8 Problemy z wielodostępem: czytanie brudnopisu Dirty Read brudny odczyt pracownicy=# select * from tab_pobory ; id_prac pobory ---------+--------- 707 1234.00 UPDATE tab_pobory SET pobory=pobory+432 -- WHERE ID_prac= 707 ; BEGIN COMMIT: T T1 SQL T1 View T2 View No DR T2 View 1 BEGIN WORK 1234.00 1234.00 1234.00 2 SET pobory=pobory+432 3 1666.00 1666.00 1234.00 4 COMMIT WORK 1666.00 1666.00 1666.00 BEGIN ROLLBACK: T T1 SQL T1 View T2 View No DR T2 View 1 BEGIN WORK 1666.00 1666.00 1666.00 2 SET pobory=pobory-432 3 1234.00 1234.00 1666.00 4 ROLLBACK WORK 5 1666.00 1666.00 1666.00

ZTB: OLTP Przetwarzanie Transakcyjne 9 Przykład transakcji równoczesnych Transakcje dirty read Rysunek 2: Przykład transakcji równoczesnych i problemu niepowtarzalnych odczytów

ZTB: OLTP Przetwarzanie Transakcyjne 10 Problemy z wielodostępem niepowtarzalne odczyty Non-Repeatable Read odczyt nie dajacy się powtórzyć pracownicy=# select * from tab_pobory ; id_prac pobory ---------+--------- 707 1234.00 UPDATE tab_pobory SET pobory=pobory+432 -- WHERE ID_prac= 707 ; BEGIN COMMIT: T T1 SQL T1 View T2 View No NRR T2 View 1 BEGIN WORK (BEGIN WORK) (BEGIN WORK) 2 1234.00 1234.00 1234.00 3 SET pobory=pobory+432 4 1666.00 1234.00 1234.00 5 COMMIT WORK 1666.00 1666.00 1234.00 6 COMMIT WORK COMMIT WORK 7 BEGIN WORK BEGIN WORK 8 SELECT pobory 1666.00 1666.00 1666.00 BEGIN ROLLBACK: zmiany nie są widoczne (brak czytania z brudnopisu). Transakcja T2 widzi zmiany wykonane i zatwierdzone przez T1, pomimo, że sama się nie zakończyła. W trakcie realizacji T2 widzialne zmiany mogą następować wielokrotnie (wiele transakcji wykonuje COMMIT).

ZTB: OLTP Przetwarzanie Transakcyjne 11 Przykład transakcji równoczesnych Transakcje non-repeatable-read Rysunek 3: Przykład transakcji równoczesnych i problemu niepowtarzalnych odczytów

ZTB: OLTP Przetwarzanie Transakcyjne 12 Problemy z wielodostępem: odczyty widmo Phantom odczyty widmo pracownicy=# select * from tab_pobory ; id_prac pobory ---------+--------- 707 1234.00 UPDATE tab_pobory SET pobory=pobory+432 -- WHERE ID_prac= 707 ; INSERT INTO tab_pobory VALUES ( 710,1234.00); BEGIN COMMIT: T T1 SQL T1 View T2 SQL T2 View No Phantom 1 BEGIN WORK BEGIN WORK 2 1234.00 1234.00 1234.00 3 pobory+432 4 1666.00 1234.00 1234.00 5 INSERT (1234.00) 6 1666.00 1234.00 1234.00 7 COMMIT WORK 8 1666.00 1234.00 1666.00 9 COMMIT WORK 10 SELECT pobory 1666.00 SELECT pobory 1666.00 1666.00 11 1234.00 1234.00 1666.00

ZTB: OLTP Przetwarzanie Transakcyjne 13 Problemy z wielodostępem: utracona aktualizacja Lost Update utracona aktualizacja pracownicy=# select * from tab_pobory ; id_prac pobory ---------+--------- 707 1234.00 UPDATE tab_pobory SET pobory=pobory+432 -- WHERE ID_prac= 707 ; UPDATE tab_pobory SET pobory=pobory+234 -- WHERE ID_prac= 707 ; BEGIN COMMIT: T T1 SQL T1 View T2 SQL T2 View 1 BEGIN WORK BEGIN WORK 2 1234.00 1234.00 3 SELECT pobory 1234.00 SELECT pobory 1234.00 4 pobory+432 1666.00 1234.00 5 COMMIT WORK 1666.00 1234.00 6 1666.00 (1234.00/1666.00) 7 1666.00 pobory+234 8 COMMIT WORK 9 1486.00 1468.00

ZTB: OLTP Przetwarzanie Transakcyjne 14 Problemy z wielodostępem: utracona aktualizacja Lost update rozwiazanie Proste rozwiązanie problemu polega na zblokowaniu wyszukiwania rekordów do modyfikacji i samej modyfikacji w jednej instrukcji. Obowiązuje to jednak wszystkich użytkowników/aplikacje. pracownicy=# BEGIN WORK; BEGIN pracownicy=# SELECT * FROM tab_pobory; id_prac pobory ---------+--------- 707 1234.00 (1 row) pracownicy=# UPDATE tab_pobory pracownicy-# SET pobory=pobory+432.00 pracownicy-# WHERE pobory=1234; UPDATE 1 pracownicy=# COMMIT; COMMIT pracownicy=# select * from tab_pobory ; id_prac pobory ---------+--------- 707 1666.00 (1 row) pracownicy=# UPDATE tab_pobory pracownicy-# SET pobory=pobory+432.00 pracownicy-# WHERE pobory=1234; UPDATE 0 Jak widać, ponowna próba modyfikacji rekordów nie powiodła się.

ZTB: OLTP Przetwarzanie Transakcyjne 15 Poziomy izolacji Isolation Levels Standard SQL definiuje cztery poziomy izolacji: READ UNCOMMITTED odczyt niezatwierdzony, READ COMMITTED odczyt zatwierdzony, REPEATABLE READ odczyt dający się powtórzyć, SERIALIZABLE odczyt uszeregowany. Przypomnijmy najważniejsze problemy współdziałania transakcji na wspólnym obszarze pamięci: Dirty read: pierwsza transakcja modyfikuje rekord(y), a druga czyta zmodyfikowane dane zanim zmiana została zachowana przez COMMIT; jeśli pierwsza transakcja zostanie wycofana, to druga z nich przeczytała dane, które nie istnieją. Non-Repeatable read: pierwsza transakcja czyta dane, a druga usuwa je lub modyfikuje i zatwierdza przez COMMIT; teraz pierwsza (niezakończona) transakcja czytajac ponownie te dane (tym samym zapytaniem) otrzyma inne wartości, Phantom: pierwsza transakcja odczytuje/modyfikuje dane spełniające pewien predykat; druga transakcja równolegle wstawia/modyfikuje rekordy, tak, że nowe rekordy spełniają dany predykat następne wykonanie tego samego zapytania przez pierwsza transakcję da inny wynik (rekordy wstawiane przez drugą transakcję nie zostały obsłużone przez pierwszą).

ZTB: OLTP Przetwarzanie Transakcyjne 16 Poziomy izolacji Isolation Levels objaśnienie READ UNCOMMITTED - jest najniższym poziomem izolacji transakcji, nie zabezpiecza przed żadnym z wymienionych wcześniej problemów (nawet przed problemem odczytu niepewnych danych!) co rzecz jasna automatycznie eliminuje możliwość zastosowania tego poziomu w profesjonalnych implementacjach systemów, bowiem musimy mieć absolutną pewność, że nikt oprócz nas nie korzysta w danej chwili z bazy danych. Co jednak robić w przypadku gdy nie ma możliwości podwyższenia poziomu niezależności (np. archiwalne instancje systemów)? Można zastosować tzw. techniki optymistyczne, które polegają na każdorazowym porównaniu owej wartości - w momencie gdy dochodzi do zmiany wartości rekordu w transakcji - z wartością poprzednią (poprzez klauzulę WHERE), co oczywiście wymaga istnienia bufora przechowującego poprzedni stan wartości. Należy zdawać sobie jednak sprawę z obniżenia wydajności całego systemu wobec zastosowania optymistycznych transakcji (istotne wartości opóźnień w przypadku dużej ilości przetwarzanych transakcji), READ COMMITTED - w wielu systemach relacyjnych baz danych jest to domyślny poziom niezależności transakcji, w pełni zabezpiecza przed problemem dirty reads, nieskuteczny jednak w eliminowaniu fantomów i problemu niepowtarzalności danych. Pozwala transakcjom na zakładanie lub zwalnianie blokad na poziomie rekordu, nad którym aktualnie dokonują modyfikacji. Żadna transakcja nie otrzyma dostępu do danego rekordu (sekcji krytycznej) dopóki transakcja, która blokadę taką założyła nie zwolni współdzielonych zasobów.

ZTB: OLTP Przetwarzanie Transakcyjne 17 REPEATABLE READ - jeden z najwyższych poziomów izolacji, nie zabezpiecza jedynie przed fantomami, w wielu zastosowaniach zupełnie wystarczający. Pozwala transakcjom na zakładanie i zwalnianie blokad na wszystkie bieżąco przetwarzane wiersze co sprawia, że nawet wielokrotne odwołanie się do tego samego zestawu danych w obrębie tej samej transakcji spowoduje wygenerowanie identycznych rezultatów. SERIALIZABLE - najwyższy poziom niezależności, oznacza całkowitą izolację transakcji nawzajem od siebie. W efekcie otrzymujemy rodzaj kolejki, w której znajdują się zlecone do wykonania transakcje, które w sposób sekwencyjny zostają następnie wykonane w określonym porządku, co może w sposób znaczący obniżyć wydajność serwera bazy danych. Oczywiście nic nie stoi na przeszkodzie aby można było wykonać równolegle kilka transakcji, jeśli tylko nie korzystają one podczas wykonania z tych samych zasobów, jednak utrata szybkości działania systemu w porównaniu z innymi poziomami izolacji jest zawsze zauważalna, należy z rozwagą stosować ten tryb pracy.

ZTB: OLTP Przetwarzanie Transakcyjne 18 Definiowanie poziomu izolacji Poziomy izolacji POZIOM IZOLACJI Dirty read Non-Repeatable Phantom READ UNCOMMITTED TAK TAK TAK READ COMMITTED NIE TAK TAK REPETABLE READ NIE NIE TAK SERIALIZABLE NIE NIE NIE Do definiowania poziomu izolacji transakcji służy instrukcja: SET TRANSACTION { ISOLATION LEVEL {READ UNCOMMITTED READ COMMITTED REPETABLE READ SERIALIZABLE } { READ ONLY READ WRITE } { DIAGNOSTICS SIZE ilosc warunkow }}; W PostgreSQL: SET TRANSACTION [ ISOLATION LEVEL { READ COMMITTED SERIALIZABLE } ] [ READ WRITE READ ONLY ] SET SESSION CHARACTERISTICS AS TRANSACTION [ ISOLATION LEVEL { READ COMMITTED SERIALIZABLE } ] [ READ WRITE READ ONLY ] READ COMMITTED zezwolenie na odczyt danych zatwierdzonych przed rozpoczęciem instrukcji wewnątrz transakcji; możliwe odczyty nie dające się powtórzyć (i fantomy). Jest to poziom domyślny (ang. default). SERIALIZABLE zezwolenie na odczyt danych zatwierdzonych przed wykonaniem pierwszej instrukcji DML (SE- LECT/INSERT/DELETE/UPDATE/FETCH/COPY_TO) w obrębie transakcji.

ZTB: OLTP Przetwarzanie Transakcyjne 19 Blokady i ograniczenia Blokady Izolacja transakcji jest realizowana za pomocą blokowania dostępu do danych: blokada współdzielona (ang. shared mode) pozwala innym czytać dane (bez aktualizacji), blokada wyłączna (ang. exclusive mode) nie pozwala na dostęp do danych (nawet odczyt). Blokady mogą być jawne lub niejawne. Niejawne blokady są stosowne automatycznie w trakcie wykonywania instrukcji. Jawne blokady definiuje się instrukcją LOCK TABLE oraz SELECT... FOR UPDATE. Blokady mogą być na poziomie: wybranych wierszy: FOR UPDATE, tabeli: LOCK TABLE <table>. SELECT 1 FROM <table> WHERE <cond> Ograniczenia Ograniczenia (ang. constraints) mogą być sprawdzane: bezpośrednio po wykonaniu instrukcji lub, po zakończeniu transakcji (tzw. opóźnianie ograniczeń). W PostgreSQL do wymuszanie opóźnienia w FK: DEFERRABLE. CREATE TABLE tab_pobory (ID_prac char(5) NOT NULL, Pobory numeric(8,2), CONSTRAINT tab_pobory_fk FOREIGN KEY(ID_prac) REFERENCES prac(id_prac) ON UPDATE CASCADE DEFERRABLE );

ZTB: OLTP Przetwarzanie Transakcyjne 20 Zakleszczenia Zakleszczenia Zakleszczenie może mieć miejsce jeżeli dwie transakcje rywalizują o dostęp do tych samych niepodzielnych (blokowany dostęp) zasobów. Przykład schematu zakleszczenia: T1 BEGIN UPDATE pobory SET pobory=1234 WHERE ID_prac= 707 ; UPDATE pobory SET pobory=1234 WHERE ID_prac= 710 ; T2 BEGIN UPDATE pobory SET pobory=1234 WHERE ID_prac= 710 ; UPDATE pobory SET pobory=1234 WHERE ID_prac= 707 ; PostgreSQL automatycznie wykrywa zakleszczenia i je eliminuje. Zmiany wykonane w eliminowanej sesji są tracone.

ZTB: OLTP Przetwarzanie Transakcyjne 21 PostgreSQL zarzadzanie transakcjami Przeglad instrukcji BEGIN WORK TRANSACTION rozpoczęcie transakcji. COMMIT WORK TRANSACTION zatwierdzenie transakcji. SELECT 1 FROM <table> WHERE <condition> FOR UPDATE blokowanie wierszy tablicy wewnątrz transakcji. LOCK TABLE <table> blokowanie dostępu do tablicy. LOCK TABLE <table> IN <lockmode> MODE blokowanie dostępu do tablicy. Parametr <lockmode> może przybierać siedem nastepujących wartości: ACCESS SHARE ROW SHARE ROW EXCLUSIVE SHARE UPDATE EXCLUSIVE SHARE SHARE ROW EXCLUSIVE EXCLUSIVE ACCESS EXCLUSIVE Opis: http://www.postgresql.org/docs/8.3/static/ explicit-locking.html

ZTB: OLTP Przetwarzanie Transakcyjne 22 Charakterystyki PostgreSQL i zalecenia Charakterystyki PostgreSQL PostgreSQL domyślnie pracuje w trybie chained oznacza to, że instrukcje są autozatwierdzane natychmiast po wykonaniu (tzw. niejawne transakcje każda instrukcja jest osobną transakcją), BEGIN WORK przełącza w tryb transakcyjny, aż do wystąpienia COMMIT lub ROLLBACK, Zakończenie transakcji ROLLBACK pozwala na bezpieczne eksperymentowanie, PostgreSQL nie dopuszcza trybu czytania z brudnopisu (ang. dirty read), w PostgreSQL można używać skrótów: BEGIN, COMMIT, ROLLBACK, w PostgreSQL nie wolno zagnieżdżać transakcji (brak save points), PostgreSQL stosuje 7 (8) typów blokad. PostgreSQL automatycznie wykrywa zakleszczenia i je eliminuje. Zalecenia dotyczące stosowania transakcji transakcje powinny być małe! kończymy, gdy tylko jest to możliwe, nie utrzymywać transakcji podczas dialogu z użytkownikiem, aplikacje powinny przetwarzać dane w tej samej kolejności.

ZTB: OLTP Przetwarzanie Transakcyjne 23 SAVEPOINTS Granularyzacja transakcji punkty kontrolne W zaawansowanych systemach bazodanowych możliwa jest wieloetapowa kontrola transakcji z wykorzystaniem tzw. savepoints. Rozważmy przykład przelewu pomiędzy kontami: BEGIN WORK; UPDATE accounts SET balance = balance-100.00 WHERE name = Alice ; UPDATE branches SET balance = balance-100.00 WHERE name = (SELECT branch_name FROM accounts WHERE name= Al UPDATE accounts SET balance = balance+100.00 WHERE name = Bob ; UPDATE branches SET balance = balance+100.00 WHERE name = (SELECT branch_name FROM accounts WHERE name= Bo... COMMIT; Przy zastosowaniu punktów kontrolnych savepoint możliwy jest podział transakcji na etapy: BEGIN; UPDATE accounts SET balance = balance - 100.00 WHERE name = Alice ; SAVEPOINT my_savepoint; UPDATE accounts SET balance = balance + 100.00 WHERE name = Bob ; -- oops... forget that and use Wally s account ROLLBACK TO my_savepoint; UPDATE accounts SET balance = balance + 100.00 WHERE name = Wally ; COMMIT;

ZTB: OLTP Przetwarzanie Transakcyjne 24 Multiversion Concurrency Control, MVCC MVCC in PostgreSQL W systemie PostgreSQL zastosowano mechanizm o nazwie Multiversion Concurrency Control, MVCC. Jego idea polega na zapewnieniu każdej transakcji stabilnego obrazu danych z pewnej chwili, niezależnie od stanu aktualnego (ang. snapshots). PostgreSQL od wersji 8.1 wspiera wszystkie poziomy niezależności transakcji (ale realizuje tylko dwa!) oraz system blokad na poziomie tabel oraz wierszy. Zastosowany mechanizm MVCC ma w swoich założeniach zmniejszyć - do niezbędnego minimum - proces użycia blokad. Zasada działania MVCC jest stosunkowo prosta, model zakłada możliwość istnienia kilku wersji tego samego rekordu w tabeli co z kolei wynika z fizycznego sposobu reprezentacji wierszy w systemie. W PostgreSQL każdy rekord w tabeli posiada dodatkowe, ukryte atrybuty (kolumny), które to decydują o aktualnym stanie danego wiersza. Z punktu widzenia problemu przetwarzania transakcyjnego istotne są cztery kolumny (wartości): X min - numer transakcji, w której dany wiersz został stworzony (poleceniem INSERT), C min - numer polecenia SQL w bieżącej transakcji, który utworzył rekord, X max - numer transakcji, w której dany wiersz został usunięty (poleceniem DELETE), jeśli wiersz nie jest usunięty to pole przyjmuje wartość 0, C max - numer polecenia SQL w bieżącej transakcji, który usunął wiersz.

ZTB: OLTP Przetwarzanie Transakcyjne 25 Użytkownik, który w danym momencie przegląda tabelę ma dostęp tylko do następujących wierszy: x min bieżący numer transakcji, x max = 0, x max bieżący numer transakcji. Niestety, miarę upływu czasu taka tabela z nieaktualnymi wierszami zaczyna się szybko rozrastać, co w konsekwencji - szczególnie przy intensywnym użyciu poleceń języka DML - doprowadzi do znacznego spadku wydajności bazy danych. Dlatego też w PostgreSQL istnieje wykraczające poza standardy SQL narzędzie/polecenie - VACUUM które dokonuje przeglądu wierszy w tabeli i całkowitego usunięcia rekordów, dla których wartość x max jest mniejsza od najstarszej transakcji w systemie.

ZTB: OLTP Przetwarzanie Transakcyjne 26 Blokady w PostgreSQL W PostgreSQL możliwe jest także jawne zakładanie blokad na tabele oraz wiersze (dostępnych jest szereg różnych trybów pracy, ich pełna lista znajduje się poniżej). Każdy z tych trybów blokowania danych to blokowanie na poziomie tabeli 1 (nawet jeśli w nazwie pojawia się słowo kluczowe ROW). Możemy skorzystać z następujących trybów: ACCESS SHARE (AS) - jest to blokada zakładana automatycznie np. przy wykonywaniu polecenia typu SELECT, umożliwia odczyt danych w każdej chwili, uniemożliwia dokonywanie modyfikacji, ROW SHARE (RS) - zarezerwowany dla poleceń SELECT... FOR UPDATE i SELECT... FOR SHARE, dodatkowo blokuje tabele powiązane ze sobą więzami integralności, ROW EXCLUSIVE (RX) - domyślny tryb blokad dla poleceń modyfikujących dane w tabelach - INSERT, UPDATE oraz DELETE, blokuje także zależne tabele, SHARE UPDATE EXCLUSIVE (SUX) - stosowany jedynie w momencie wywołania polecenia VACUUM, zabezpiecza przed niezsynchronizowanymi zmianami w schemacie bazy danych, SHARE (S) - zabezpiecza przed niekontrolowanymi zmianami danych w tabeli (przydatny np. w momencie zakładania indeksu na kolumnę), SHARE ROW EXCLUSIVE (SRX) - blokada wiersza tabeli przed wszelkimi modyfikacjami, możliwy odczyt danych, EXCLUSIVE (X) - odczyt danych z tabeli jest możliwy wyłącznie w obrębie trwającej transakcji, ACCESS EXCLUSIVE (AX) - całkowita blokada tabeli na czas trwania danej transakcji, jako jedyny tryb oferuje możliwość blokady odczytu danych z tabeli poleceniem typu SELECT. 1 Pomijając wyrażenia typu SELECT... FOR UPDATE, gdzie blokowane są bezpośrednio wiersze

ZTB: OLTP Przetwarzanie Transakcyjne 27 W PostgreSQL istnieje możliwość założenia kilku blokad na daną tabelę jednocześnie, są jednak pewne ograniczenia (wzajemnie wykluczające się tryby), pełne zestawienie znajduje się w poniższej tabeli: Tablica 1: Blokady w PostgreSQL. AS RS RX SUX S SRX X AX AS + + + + + + + - RS + + + + + + - - RX + + + + - - - - SUX + + + + - - - - S + + - - + - - - SRX + + - - - - - - X + - - - - - - - AX - - - - - - - - PostgreSQL

ZTB: OLTP Przetwarzanie Transakcyjne 28 Literatura 1. Thomas Connolly, Carolyn Begg: Systemy baz danych. Praktyczne metody projektowania, implementacji i zarządzania. RM, Warszawa 2004 (tom 2, rodz. 19). 2. Richard Stones, Neil Matthew: Bazy danych i PostgreSQL. Helion, Gliwice 2001. 3. John C. Worsley, Joshua D. Drake: PostgreSQL. Praktyczny przewodnik. Helion/O Reilly, Gliwice, 2002. 4. http://www.postgresql.org/docs/8.3/interactive/ index.html