Paralelní přístup k databázi

Podobné dokumenty
Transakce a zamykání. Administrace MS SQL Serveru (NDBI039) Pavel Hryzlík

9. Transakční zpracování

Kapitola 13: Transakce. Koncept transakce. ACID vlastnosti

Transakce. Ing. Marek Sušický, RNDr. Ondřej Zýka

Architektura SW pro transakční zpracování se skládá ze 3 modulů: - manažer dat - rozvrhovač - manažer transakcí

Transakce a zamykání Jiří Tomeš

Transakční zpracování

DBS transakční zpracování

Transakční zpracování Bezpečnost databází. Vladimíra Zádová, KIN, EF TUL- DBS 1

Databáze II. 2. přednáška. Helena Palovská

Databázové systémy. transakce. Tomáš Skopal. * vlastnosti transakcí * rozvrhy

9. Transakční zpracování

Řízení souběžného přístupu k datům v systémech řízení báze dat

Databázovéa informačnísystémy NÁVRH IMPLEMENTACE 3 PARALELNÍ PROCESY V DATABÁZÍCH

Databáze I. 5. přednáška. Helena Palovská

Téma 11 Transakce a řízení souběhu

Zotavení z chyb. Databázové systémy

Databázové systémy. transakce. Tomáš Skopal. * uzamykací protokoly * alternativní protokoly * zotavení

Enterprise Java (BI-EJA) Technologie programování v jazyku Java (X36TJV)

Vlastnosti ACID. Příklad převodu peněz

PRŮBĚHOVÝ TEST Z PŘEDNÁŠEK

Zápisování dat do databáze

TÉMATICKÝ OKRUH TZD, DIS a TIS

Transakce Profinit. All rights reserved.

1. Databázové systémy (MP leden 2010)

UNICORN COLLEGE BAKALÁŘSKÁ PRÁCE

Databázové systémy I. 7. Přednáška

Kapitola 6: Omezení integrity. Omezení domény

10. Transakce, řízení konkurenčních přístupů.

10. Architektura klient/server a třívrstvá architektura

10. Architektura klient/server a třívrstvá architektura

IW3 MS SQL SERVER 2014

Paralelní programování a jeho dopad na databázové. Bc. Lukáš Juřina

Bc. David Gešvindr MSP MCSA MCTS MCITP MCPD

Kurz Databáze. Obsah. Dotazy. Zpracování dat. Doc. Ing. Radim Farana, CSc.

8.2 Používání a tvorba databází

Optimalizace dotazů a databázové transakce v Oracle

Databázové systémy úvod

01. Kdy se začala formovat koncept relačních databází (Vznik relačního modelu, první definice SQL)? a) 1950 b) 1960 c) 1970 d) 1980

Lekce 6 - Správa prostorových dat

InnoDB transakce, cizí klíče, neumí fulltext (a nebo už ano?) CSV v textovém souboru ve formátu hodnot oddělených čárkou

SQL - trigger, Databázové modelování

Databázové systémy. - SQL * definice dat * aktualizace * pohledy. Tomáš Skopal

Databáze II. 1. přednáška. Helena Palovská

Západočeská univerzita v Plzni Katedra informatiky a výpočetní techniky. 9. června krovacek@students.zcu.cz

Embedded SQL v C/C++ úvod. Administrace Oracle Kateřina Opočenská

Embedded SQL v C/C++ III - pole, struktury. Jindřich Vodrážka

Téma 12 Transakce, řízenísouběhu a obnova dat

Databáze I. 1. přednáška. Helena Palovská

Konzistentnost. Přednášky z distribuovaných systémů

4IT218 Databáze. 4IT218 Databáze

Distribuované transakce

Architektury paralelních počítačů II.

Příklad převodu peněz. Vlastnosti"ACID"

Zámky, transakce a izolační úrovně v SQL Serveru

8. Zpracování dotazu. J. Zendulka: Databázové systémy 8 Zpracování dotazu 1

Paralelní programování

J. Zendulka: Databázové systémy 8 Zpracování dotazu Podstata optimalizace zpracování dotazu

Marian Kamenický. Syntea software group a.s. marian.kamenicky. MFFUK Praha 2012/13

Návrh a tvorba WWW stránek 1/14. PHP a databáze

Použití databází na Webu

Text úlohy. Systémový katalog (DICTIONARY):

Struktura pamětí a procesů v DB Oracle. Radek Strnad

04 - Databázové systémy

Obsah. Kapitola 1 Hardware, procesory a vlákna Prohlídka útrob počítače...20 Motivace pro vícejádrové procesory...21

PL/SQL. Jazyk SQL je jazykem deklarativním, který neobsahuje procedurální příkazy jako jsou cykly, podmínky, procedury, funkce, atd.

Optimalizace plnění a aktualizace velkých tabulek. Milan Rafaj, IBM

Paralelní programování

Kapitola 4: SQL. Základní struktura

Transak ní zpracování I

Stromové struktury v relační databázi

Distanční opora předmětu: Databázové systémy Tématický blok č. 8: Transact SQL Autor: RNDr. Jan Lánský, Ph.D.

K čemu transakce. Spolehlivost. Transakce. Petr Tůma

FRED & PostgreSQL. CZ.NIC, z.s.p.o. Jaromír Talíř <jaromir.talir@nic.cz>

TSQL2. (aneb jak na to) Tomáš Janků

Úvod do databází. Modelování v řízení. Ing. Petr Kalčev

Fakulta elektrotechniky a informatiky Databázové systémy 2. Leden 2010 souhrn. Červené dobře (nejspíš), modré možná

DPKOM_10 Transakce 1

Databáze. Velmi stručný a zjednodušený úvod do problematiky databází pro programátory v Pythonu. Bedřich Košata

Obchodní akademie a Jazyková škola s právem státní jazykové zkoušky Jihlava

Verzování a publikace dat na webu za pomoci PostgreSQL

Úvod do databázových systémů

2. přednáška. Databázový přístup k datům (SŘBD) Možnost počítání v dekadické aritmetice - potřeba přesných výpočtů, např.

Činnost počítače po zapnutí

Databázové systémy, MS Access. Autor: Ing. Jan Nožička SOŠ a SOU Česká Lípa VY_32_INOVACE_1130_Databázové systémy, MS Access_PWP

BAKALÁŘSKÁ PRÁCE. Dung NGUYEN TIEN Výuková aplikace zpracování databázových transakcí

7. Integrita a bezpečnost dat v DBS

7. Integrita a bezpečnost dat v DBS

Jazyk SQL databáze SQLite. připravil ing. petr polách

Databázové systémy a SQL

Administrace Oracle - Správa zdrojů

Stored Procedures & Database Triggers, Tiskové sestavy v Oracle Reports

Temporální databáze. Jan Kolárik Miroslav Macík

Replikace je proces kopírování a udržování databázových objektů, které tvoří distribuovaný databázový systém. Změny aplikované na jednu část jsou

Analýza dat a modelování. Přednáška 3

Virtuální privátní databáze

Kubatova Y36SAP procesor - control unit obvodový a mikroprogramový řadič RISC Y36SAP-control unit 1

Deklarativní IO shrnutí minulé přednášky

Databázové systémy a SQL

Automatizace workflow a procesů

Transkript:

Paralelní přístup k databázi Motivační příklad: Bankovní převod 100,- Kč z účtu "A" na účet "B" a současný výběr 200 Kč z účtu "B". Transakce Hodnota A Hodnota B Stav účtu A Stav účtu B 1000,- 1000,- T1: čti A T1: 1000 T1: čti B T1: 1000 T1: uber 100 z A T1: 900 T1: přidej 100 k B T1: 1100 T1: zapiš stav A 900,- T2: čti B T2: 1000 T1: zapiš stav B 1100,- T2: uber 200 z B T2: 800 T2: zapiš stav B 800,- Výsledný stav 800,- 900,- Správně 900,- 900,- Při současném vykonávání transakcí by mohlo dojít k porušení konzistence databáze i když každá z transakcí by sama o sobě konzistenci zachovávala

Paralelní přístup k databázi Transakce: Vlastnost ACID: Atomicity: Consistency Isolation Durability transakce atomická - buď se podaří a provede se celá nebo nic - nelze vykonat jenčást transakce transakce - korektní transformace stavu - zachování invariant - integritních omezení (isolace = serializovatelnost). I když jsou transakce rozpracovány současně, výsledek je stejný, jako by byla vykonávána jedna po druhé po úspěšném ukončení transakce (commit) jsou změny stavu databáze trvalé a to i v případě poruchy systému - zotavení z chyb.

Paralelní přístup k databázi První zákonřízení paralelismu: Současné vykonávání transakcí nesmí zapříčinit selhání programu. Sériové provádění transakcí Další transakce nezačne dříve, než předchozí skončila. Bylo by postačujícímřešením v případě, že: všechny transakce krátké všechna data v paměti všechna data zpracována jediným procesorem

Paralelní přístup k databázi Serializovatelné provádění transakcí: Více transakcí rozpracovaných současně (vyšší propustnost systému) Ale výsledek stejný jako při sériovém provádění. Druhý zákonřízení paralelismu: Metodařízení paralelismu při současném vykonávání transakcí nesmí vést k nižší průchodnosti systému oproti sériovému vykonávání transakcí. Řešení serializovatelnosti: zamykání (locking) na různé úrovni granularity: zamykání celého systému (=> sériovost) jednotlivých tabulek Jednotlivých záznamů (vět) časové značky MVCC (multiversion concurrency control) predikátové zámky

Paralelní přístup k databázi Transakce = sekvence akcí read a write na objektech (insert a delete zatím nejuvažujme). čas Konsistentní stav databáze Dočasně nekonsistentní stav databáze Konsistentní stav databáze BOT A1 A2 A3... An COMMIT BOT A1 A2 A3 CHYBA ROLLBACK

Paralelní přístup k databázi Dvě akce read nad týmž objektem nemohou porušit konzistenci. Dvě akce write nad týmž objektem prováděné v rámci téže transakce netřeba uvažovat. Pokud by porušily konzistenci, je transakce nekorektní bez ohledu na paralelismus (porušeno C v ACID). Pouze akce typu read a write v rámci různých transakcí mohou porušit konzistenci.

Paralelní přístup k databázi Lost update T1 WRITE <o,1> Nezachová se. Jakoby T1 vůbec neběžela. T2 WRITE <o,2> T1 READ <o,2> Dirty read T2 WRITE <o,2> T1 READ <o,2> T1 přečetla dočasnou (ne committed) hodnotu T2 ROLLBACK <o,1> Unrepeatable read T1 READ <o,1> T2 WRITE <o,2> T1 READ <o,2> nereprodukovatelnéčtení Phantom problem Bude vysvětlen na následujícím slidu

Paralelní přístup k databázi Problém fantomu (Phantom problem) čas T1: BOT SELECT * FROM Table WHERE P SELECT * FROM Table WHERE P T2: BOT INSERT INTO Table VALUES (splňující P) UPDATE Table (tak, že vznikne věta splňující P)

Paralelní přístup k databázi Příklad LOST UPDATE: Transakce T 1 vybírá veškerý zůstatek z účtu A. Transakce T 2 připisuje 3% úroků na účet A. Příklad transakční historie neboli rozvrhu: Krok 1. 2. 3. 4. 5. 6. 7. 8. 9. T 1 BOT a 1 := 0 WRITE(A, a 1 ) COMMIT T 2 BOT READ(A, a 2 ) a 2 := a 2 * 1.03 WRITE(A, a 2 ) COMMIT

Paralelní přístup k databázi Příklad DIRTY READ: Transakce T 1 převádí 300,- Kč z účtu A na účet B. Transakce T 2 připisuje 3% úroků na účet A, který není v daném časovém okamžiku v konsistentním stavu. Příklad transakční historie neboli rozvrhu: Krok 1. ROLLBACK vrátí stav na začátek 2. transakce T1, tím ale přijdeme 3. o efekt transakce T2. To je problém transakce T2, že si přečetla 4. údaj, který ještě nebyl potvrzen (commited) 5. 6. 7. 8. T 1 READ(A, a 1 ) a 1 := a 1-300 WRITE(A, a 1 ) READ(B, b 1 ) READ selhal, proto: ROLLBACK T 2 READ(A, a 2 ) a 2 := a 2 * 1.03 WRITE(A, a 2 )

Paralelní přístup k databázi Příklad UNREPEATABLE READ: Transakce T 1 převádí 300,- Kč z účtu A na účet B. Transakce T 2 připisuje 3% úroků na účet A, který není v daném časovém okamžiku v konsistentním stavu. Příklad transakční historie neboli rozvrhu: Krok 1. 2. 3. 4. 5. 6. 7. 8 8. T 1 READ(A, a 1 ) a 1 := a 1 300 WRITE(A, a 1 ) T 2 READ(A, a 2 ) a 2 := a 2 * 1.03 WRITE(A, a 2 ) READ(B, Tb 2 přepsala 1 ) údaj, který má transakce T 1 načtený a hodlá s ním nadále pracovat -> T 1 bude pracovat s nekonzistentními b 1 := b 1 + daty! 300 WRITE(B, Proměnná b 1 ) a 1 neodpovídá stavu databáze. Kdybychom znovu provedli READ(A,a 1 ), byl by obsah proměnné a 1 jiný!

Paralelní přístup k databázi Příklad PHANTOM PROBLEM: V průběhu zpracování T 2 zavede T 1 do databáze nový údaj (větu), proto T 2 pro dva totožné dotazy poskytne dvě různé odpovědi. Příklad transakční historie neboli rozvrhu: Krok 1. 2. T 1 INSERT INTO Ucty VALUES (StavUctu, 1000) T 2 SELECT sum(stavuctu) FROM Ucty 3. SELECT sum(stavuctu) FROM Ucty

Paralelní přístup k databázi Lost update T1 WRITE <o,1> Nezachová se. Jakoby T1 vůbec neběžela. T2 WRITE <o,2> T1 READ <o,2> Dirty read T2 WRITE <o,2> T1 READ <o,2> T1 přečetla dočasnou (ne committed) hodnotu T2 ROLLBACK <o,1> Unrepeatable read T1 READ <o,1> T2 WRITE <o,2> T1 READ <o,2> nereprodukovatelnéčtení Phantom problem T1 SELECT predikát T2 INSERT o3 T1 SELECT predikát { o1, o2} { o1, o2}

Transakční historie (rozvrh transakcí) - posloupnost akcí několika transakcí, jež zachovává pořadí akcí, v němž byly prováděny. Historie (rozvrh) se nazývá sériová, pokud jsou všechny kroky jedné transakce provedeny před všemi kroky druhé transakce. Serializovatelá historie Sériová historie Krok T 1 T 2 T 1 T 2 1 2 BOT READ(A) BOT READ(A) 3 4 BOT READ(C) WRITE(A) READ(B) 5 WRITE(A) WRITE(B) 6 WRITE(C) COMMIT 7 8 9 READ(B) WRITE(B) COMMIT BOT READ(C) WRITE(C) 10 11 12 READ(A) WRITE(A) COMMIT READ(A) WRITE(A) COMMIT

Teorie SERIALIZOVATELNOSTI Nechť se transakce T i skládá z následujících elementárních operací: READ i (A) -čtení objektu A v rámci transakce T i WRITE i (A) - zápis (přepis) objektu A v rámci transakce T i ROLLBACK i - přerušení transakce T i COMMIT i - potvrzení transakce T i Jsou možné následující 4 případy: READ I (A) - READ J (A) READ I (A) - WRITE J (A) WRITE I (A) - READ J (A) WRITE I (A) - WRITE J (A) Není konflikt Konflikt Konflikt Konflikt Na pořadí nezávisí Pořadí má význam Pořadí má význam Pořadí má význam Zajímavé jsou navzájem konfliktní operace: Dvě historie H 1 a H 2 (na téže množině transakcí) jsou ekvivalentní, pokud jsou všechny konfliktní operace (nepřerušených) transakcí provedeny v témže pořadí. To znamená, že pro dvě ekvivalentní historie a uspořádání < H1 indukované historií H 1 a < H2 indukované historií H 2 platí: pokud p i a q j jsou konfliktní operace takové, že p i < H1 q j, musí platit také p i < H2 q j. Pořadí nekonfliktních operací není zajímavé.

Ne každá historie je serializovatelná: Neserializovatelá historie Krok T 1 T 2 Důvod: 1 2 3 4 5 BOT READ(A) WRITE(A) BOT READ(A) Transakce T 1 předchází transakci T 2 při zpracování objektu A, ale transakce T 2 předchází transakci T 1 při zpracování objektu B. 6 7 8 WRITE(A) READ(B) WRITE(B) Tato historie není proto ekvivalentní ani sériovému provedení transakcí v pořadí 9 10 11 READ(B) WRITE(B) COMMIT T 1 T 2 ani sériovému provedení transakcí v pořadí T 2 T 1. 12 COMMIT

Teorie serializovatelnosti (II) Příklad: Mějme historii H například se třemi transakcemi T 1, T 2, T 3 : w 2 (B) < r 1 (B); w 1 (A) < r 2 (A); w 2 (C) < r 3 (C); w 2 (A) < r 3 (A) Závislostní graf: T 2 T 1 T 1 T 2 T 2 T 3 T 2 T 3 T 1 T 2 T 3 Historie H je serializovatelná právě tehdy, když její závislostní graf nemá cykly.

Zamykání: 2 typy zámků: SLOCK: tzv. sdílený (Shared) zámek. XLOCK: tzv. výlučný (exclusive) zámek. Dobře formulovaná transakce Před každou operací READ se na daném DB objkektu uplatní zámek SLOCK, před každou operací WRITE se na daném DB objektu uplatní zámek XLOCK operace UNLOCK se na daném DB objektu může provést pouze tehdy, když je na daném DB objektu uplatněn zámek SLOCK/XLOCK každá operace SLOCK/XLOCK je v někdy v následujícím běhu transakce následována příslušnou akcí UNLOCK.

Kompatibilita zámků Existující zámek Není SLOCK XLOCK Požadovaný SLOCK OK OK Konflikt zámek XLOCK OK Konflikt Konflikt Legální historie: Každá historie dodržující kompatibilitu zámků je historií legální.

Akce a transakce Akce na objektech: Akce globální: READ, WRITE, XLOCK, SLOCK, UNLOCK BEGIN, COMMIT, ROLLBACK T' BEGIN T'' BEGIN SLOCK A SLOCK A XLOCK B READ A READ A XLOCK B WRITE B WRITE B COMMIT ROLLBACK Na další stránce se zbavme se operací COMMIT a ROLLBACK převedením na (z hlediska konzistence) ekvivaletní transakční model:

Jednoduchá transakce (simple transaction): 1) Obsahuje akce READ, WRITE, XLOCK, SLOCK a UNLOCK. 2) COMMIT se nahradí sekvencí příkazů UNLOCK A, pro každý objekt A, na nějž bylo v průběhu transakce aplikováno SLOCK A nebo XLOCK 3) ROLLBACK se nahradí sekvcencí akcí: WRITE A pro každý objekt A, na nějž T aplikovala akci WRITE A UNLOCK A pro každý objekt A, na nějž T aplikovala akci SLOCK A nebo XLOCK A T' SLOCK A T'' SLOCK A XLOCK B READ A READ A XLOCK B WRITE B WRITE B UNLOCK A WRITE (undo) B UNLOCK B UNLOCK A UNLOCK B

Dvoufázové transakce Všechny akce LOCK jsou provedeny před všemi akcemi UNLOCK. Fáze vzrůstu (growing phase) - během ní se provedou všechny akce LOCK Fáze poklesu (shrinking phase) - během ní se provedou všechny akce UNLOCK U dvoufázové transakce se fáze vzrůstu a fáze poklesu nepřekrývají počet uplatněných zámků čas Fáze vzrůstu Fáze poklesu

Transakce je serializovatelná (s výjimkou fantom problémů), práve když: je dobře formulovaná (všechny akce prokyty zámky) zamykat výhradně všechny data. jejichž obsah modifikuje (legální) je dvoufázová - neměla by uvolňovat zámky dříve než budou všechny zámky aplikovány výhradní zámky drží až do COMMIT/ROLLBACK

Stupně isolace (stále neuvažujeme fantomy náš zjednodušený model) Transakce Názvy Protokol zamykání 0 0 T nepřepisuje dirty data jiné transakce, je-li tato stupně 1 a více anarchie dobře formulován pro WRITE 1 1 T nemá lost updates browse dvoufázový pro XLOCK a dobře formulovaný pro WRITE 2 2 nemá lost updates a dirty reads * stabilita kursoru * dvoufázový pro XLOCK a dobře formulovaný 3 3 nemá lost updates, dirty reads a má repeatable reads isolovaná transakce serializovatelná opakovatelnéčtení dvoufázový a dobře formulovaný

Cursor char title[51], year[11], result[102, star_name[51]; EXEC SQL DECLARE CURSOR movie_cursor FOR SELECT title, CAST (year_released AS CHARACTER(10)) FROM movie_titles; while (/* cyklus pres jednotlive filemy */ ) { EXEC SQL FETCH NEXT FROM movie_cursor INTO :title, :year ;... }

Stabilita kursoru SQL databázové systémy obvykle implementují poněkud vylepšený protokol 2 nazývaný stabilita kursoru. Většina SQL databázových systémů aplikuje sdílený zámek na věty adresované nějakým kursorem => stabilita kursoru. Jedna z konkrétních implementací je popsána na stránce http://jazz.external.hp.com/training/sqltables/c5s38.html

Stabilita kurzoru Při operaci FETCH se provede: 1. Ukazatele ve zdrojových tabulkách kurzoru se posunou tak, že ukazují na dalšího kandidáta na záznam kurzoru 2. Záznamy, na něž ukazatele ve zdrojových tabulkách ukazují, se zamknou SLOCK zámkem 3. Ověří se, zda tento kandidát na záznam kurzoru (sestavený ze záznamů zdrojových tabulek, na něž momentálně ukazují ukazatele) opravdu patří do kursoru. 4. Pokud ne, uvolní se zámky záznamů zdrojových tabulek kurzoru a jde se na bod 1 5. Pokud ano, zůstanou příslušné záznamy zdrojových tabulek kurzoru, které se podílejí na aktuálním záznamu kurzoru, uzamčeny až do uzavření kurzoru. V případě, že v průběhu této transakce je daný záznam kurzoru modifikován, změní se u příslušných záznamů zdrojových tabulek kurzoru zámek z SLOCK na XLOCK. Podstatné je, že je-li nastaven stupeň isolovanosti tak, že zahrnuje stabilitu kurzoru, operace FETCH před přesunem na další záznam kurzoru neuvolňuje zámky aktuálních záznamů zdrojových tabulek kurzoru.

SET TRANSACTION ISOLATION LEVEL [ READ UNCOMMITTED] [ READ COMMITTED ] [ REPEATABLE READ ] [ SERIALIZABLE ] READ UNCOMMITTED - 1 browse - pro read-only transakce READ COMMITTED - stabilita kursoru (vylepšený 2 ) REPEATABLE READ - 3 bez ochrany fantomů SERIALIZABLE - 3 včetně ochany fantomů

Metoda časových značek Každá transakce obdrží při zahájeníčasovou značku (při 1 tiku za ms vystačí 32 bitů na 49 dní) Při přístupu transakce k objektu za účelem čtení dostane objekt nejvyšší značku ze všech časových značek transakcí, ježčtou daný objekt Při přístupu transakce k objektu za účelem zápisu dostane objekt časovou značku dané transakce Omezení: Transakce se značkou t nesmíčíst objekty se značkami tw > t. Následuje ROLLBACK Transakce se značkou t nesmí přepsat objekty se značkami tr > t. Následuje ROLLBACK Dvě transakce smějíčíst tentýž objekt v libovolném okamžiku Když chce transakce se značkou t přepsat objekt se značkou tw > t, musí počkat, až bude značka tw odstraněna.

Vzájemné uváznutí transakcí (deadlock) Krok 1 2 3 4 5 6 7 8 9 10 T 1 BOT LockX(A) Read(A) Write(A) LockX(B) T 2 BOT LockS(B) Read(B) LockS(A) T 1 musíčekat na T 2 T 2 musíčekat na T 1

Vzájemné uváznutí transakcí (deadlock) Graf vzájemného čekání: T 1 T 2 T 5 T 4 T 3 Odstranění cyklů strategie: Přerušovat co nejmladší transakci (ovlivnit co nejméně dalších transakcí) Přerušovat transakci s max. počtem zámků Nepřerušovat transakci, která byla již vícekrát přeruešena Přerušit transakci, která se účastní více cyklů

Ochrana před fantomy: Jediná spolehlivá ochrana jsou predikátové zámky. SELECT * FROM T Where P1() Predikát P1() se uloží do seznamu aktivních predikátových zámků. Chci paraleleně provést INSERT INTO T.... Musí se ověřit, zda náhodou vkládané věta nevyhovuje některému z aktivních predikátových zámků. Musí se ověřit, zda náhodou vkládané věta nevyhovuje některému z aktivních predikátových zámků. Pokud ano, konflikt. Predikátové zámky výpočetně i implementačně náročné. Výrobci DB systémů se jim vyhýbají.

Když ne predikátové zámky, co tedy? Časové značky MVCC multiversion Concurrency Control MVCC multiversion Concurrency Control Používáčasové značky Snapshot isolation Na začátku transakce se udělá snapshot databáze. Změny prováděné během transakce jsou vidět v této transakci, ale nikoliv v transakcích paralelních. Po skončení transkace se provede commit pouze tehdy, když updaty, které provedla, nejsou v konfliktu s updaty transakcí, které commitovaly poté, co jsme udělali snapshot.

ISO: READ UNCOMMITTED READ COMMITTED REPEATABLE READ SERIALIZABLE Postgre SQL READ COMMITTED READ COMMITTED SERIALIZABLE SERIALIZABLE READ COMMITED in PostreSQL: Snapshot se dělá na začátku SELECTU SERIALIZABLE in PostreSQL: Snapshot se dělá na začátku transakce.

PostgreSQL manuál sekce 12.2.2.1: Class 1 1 2 2 Value 10 20 100 200 Spustíme současně: Insert výsledku SELECT SUM(value) FROM mytab WHERE class = 1; do mytab Insert výsledku SELECT SUM(value) FROM mytab WHERE class==2; do mytab Jaký bude výsledek?