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

Podobné dokumenty
Transakce Profinit. All rights reserved.

Transakce a zamykání Jiří Tomeš

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

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

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

Paralelní přístup k databázi

9. Transakční zpracování

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

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

Kapitola 13: Transakce. Koncept transakce. ACID vlastnosti

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

Optimalizace dotazů a databázové transakce v Oracle

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

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

9. Transakční zpracování

Principy operačních systémů. Lekce 7: Obrana proti deadlocku

Databázové systémy Cvičení 5.2

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

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

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

Zkušební test. 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

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

2. blok část B Základní syntaxe příkazů SELECT, INSERT, UPDATE, DELETE

7. Integrita a bezpečnost dat v DBS

7. Integrita a bezpečnost dat v DBS

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

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

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

Databáze I. Přednáška 4

Databáze 2011/2012 SQL DDL (CREATE/ALTER/DROP TABLE), DML (INSERT/UPDATE/DELETE) RNDr.David Hoksza, Ph.D.

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

Zápisování dat do databáze

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

Transakční zpracování

Informační systémy 2008/2009. Radim Farana. Obsah. Jazyk SQL

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

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

Databázové systémy úvod

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

Databázové systémy II. KIV/DB2 LS 2007/2008. Zadání semestrální práce

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

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

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

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

Databázové systémy a SQL

Migrace CIDUG. Ing. Pavel Krutina

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

DBS transakční zpracování

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

Integrace dat. RNDr. Ondřej Zýka

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

O Apache Derby detailněji. Hynek Mlnařík

Administrace Oracle. Práva a role, audit

Inovace a zkvalitnění výuky prostřednictvím ICT. Základní seznámení s MySQL Ing. Kotásek Jaroslav

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

Operátory ROLLUP a CUBE

Primární klíč (Primary Key - PK) Je právě jedna množina atributů patřící jednomu z kandidátů primárního klíče.

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

Databázové systémy. Cvičení 6: SQL

Sada 1 - PHP. 14. Úvod do jazyka SQL

Použití databází na Webu

Databáze SQL SELECT. David Hoksza

IW3 MS SQL SERVER 2014

B Organizace databáze na fyzické úrovni u serveru Oracle

Jazyk SQL 3 - DML, DDL, TCL, DCL

Bc. David Gešvindr MSP MCSA MCTS MCITP MCPD

PG 9.5 novinky ve vývoji aplikací

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

SQL. strukturovaný dotazovací jazyk. Structured Query Language (SQL)

TÉMATICKÝ OKRUH TZD, DIS a TIS

Základy informatiky. 06 Databázové systémy. Kačmařík/Szturcová/Děrgel/Rapant

Metadata. MI-DSP 2013/14 RNDr. Ondřej Zýka,

Inovace a zkvalitnění výuky prostřednictvím ICT Databázové systémy MySQL základní pojmy, motivace Ing. Kotásek Jaroslav

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

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

Základy databází. O autorech 17 PRVNÍ ČÁST. KAPITOLA 1 Začínáme 19

Databázové systémy a SQL

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

OS Deadlock a prevence

04 - Databázové systémy

Základy informatiky. 08 Databázové systémy. Daniela Szturcová

Databázové systémy I

Audit DB. Referát. Vypracoval: Zdeněk Doležal MFF UK Praha 11/5/06

Kód v databázi. RNDr. Ondřej Zýka

UNICORN COLLEGE BAKALÁŘSKÁ PRÁCE

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

6. SQL složitější dotazy, QBE

Kapitola 1: Úvod. Systém pro správu databáze (Database Management Systém DBMS) Účel databázových systémů

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

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

MySQL sežere vaše data

RELAČNÍ DATABÁZOVÉ SYSTÉMY

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

Správa dat v podniku. MI-DSP 2013/14 RNDr. Ondřej Zýka, ondrej.zyka@profinit.eu

Tabulka fotbalové ligy

Management procesu I Mgr. Josef Horálek

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

Databázové a informační systémy

1. blok Systémový katalog

RNDr. Michal Kopecký, Ph.D. Department of Software Engineering, Faculty of Mathematics and Physics, Charles University in Prague

Transkript:

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

Obsah Definice Savepoint, autonomní transakce Transakční módy Izolační úrovně Implementace pomocí zámků Implementace pomocí snapshotů Oracle, Microsoft SQL server Deadlock 2 2

Transakce Množina operací s daty, které splňují podmínku ACID Atomicity Consistency Isolation Durability 3 3

Transakce Atomicity Změny provedené v transakci musí být zaneseny do databáze všechny (nebo žádná) I v případě chyby hardware, chyby software, chyby aplikace, chyby operačního systému. Uživatel musí být informován, zda se transakce uskutečnila a je ukončena. Consistency po konci transakce musí být všechny požadavky na konzistenci databáze splněny null values foreign key unique constraint 4 4

Transakce Isolation - Neukončené změny nejsou viditelné pro ostatní uživatele. Uživatel provádějící změnu vidí i vlastní nekomitované změny. Server každému uživateli dává pocit, že na serveru pracuje sám. Durability Commitované transakce jsou trvale uložena v databázi. Commitovaná znamená, že uživatel dostal informaci o ukončení commitu. (Příkaz commit byl ukončen a server předal řízení uživateli). Takto uložené změny přežijí jakoukoliv systémovou chybu. 5 5

Transakce v jiných významech Transakce na aplikační úrovni Vytvoření objednávky (desítky databázových transakcí), Přepočet ohodnocení skladu (desítky minut). Transakce na podnikové úrovni Schválení půjčky několik aplikačních transakcí, workflow zasahující několik oddělení. Možná interakce s uživateli Není možný rollback používají se opravný kód 6 6

Savepoint Každé napojení do databáze maximálně jedna transakce. Savepoint, rollback to savepoint V transakci se dají zrušit poslední provedené změny Nejdou zrušit pouze změny ze začátku transakce Begin tran Rollback to savepoint S1 Commit X:=1; Z:=1; X:=2 Z:= 3 Savepoint S1 Po dokončení transakce X = 1 Z = 3 7 7

Autonomní transakce Změna v datech mimo transakci Například zápis do logu Oracle Na úrovní procedury, procedura obsahuje celou autonomní transakci Begin tran rollback X:=1 Insert into log_table values (X); Autonomní transakce Konec autonomní transakce X:=2 Po dokončení (rollback) transakce X původní hodnota Zápis v tabulce s hodnotou 1 8 8

Konzistentní stav databáze Dva přístupy Pokud A v transakci mění data, data jsou nekonzistentní. B musí počkat na konzistentní stav, na dokončení transakce A. Implementace pomocí zamykání. I když A v transakci mění data, existuje poslední konzistentní stav před začátkem transakce. B může pracovat s tímto stavem. Multiversion concurency control (snapshots) Pokud transakce A trvá dlouho Zdržení transakce B Práce s neaktuálními daty, chyby z neschopnosti udržet obrazy konzistentních stavů 9 9

Transakční mód Chained Začátek transakce První příkaz dávky Insert, update, delete, select for update/holdlock, Konec transakce Commit, rollback Unchained Každý příkaz elementární transakce Začátek transakce s více příkazy Explicitně zadaný příkaz begin tran Konec transakce Commit, rollback Kód musí být psaný pro konkrétní transakční mód Mód je možné měnit na úrovni připojení 10 10

Transakční mód Oracle Chained mode MS SQL server, Sybase Unchained i chained mód MySQL SET autocommit = {0 1} Simulace (v klientských nástrojích) Chained módu Commit begin tran, rollback begin tran Není ekvivalentní chained módu Unchained módu Commit za každým příkazem 11 11

Porušení izolace transakcí Zajištění úplné izolace transakcí je náročné na výkon a omezuje paralelní zpracování transakcí. Používají se následující definice porušení izolace transakcí. Dirty write Tranakce T1 změní data, která jsou měněna v probíhající transakci T2. Dirty read Transakce T1 načte data změněná transakcí T2 ještě před tím, než transakce T2 provedla commit. Fuzzy read (Non-repeatable read) Během transakce T1 se dvakrát načte řádek a pokaždé se vrátí jiná hodnota (transakce T2 modifikovala řádek mezi dvěma čteními). Phantom Během transakce T1 se provede dvakrát stejný dotaz a pokaždé vrátí jiný výsledek (transakce T2 přidala nebo ubrala řádek použitý v dotazu transakce T1). 12 12

ANSI isolation levels Izolační úrovně jsou definováno tak, že zaručují zamezení výskytu porušení izolace transakcí. Zaručení může být vyřešeno dvojím způsobem: Server čeká až bude moci zaručit požadované chování Server generuje chybu, když zjistí, že není schopen zajistit požadované chování Dirty write Dirty read Fuzzy read Phantom Read uncommited Not possible Possible Possible Possible Read commited Not possible Not possible Possible Possible Repeatable read Not possible Not possible Not possible Possible Serializable Not possible Not possible Not possible Not possible 13 13

Implementace pomocí zámků Typy zámků Shared transkce čte objekt, zámek se uvolní po načtení objeku nebo trvá do konce transakce Exclusive transakce mění objekt, zámek musí trvat do konce transakce Update objekt zřejmě bude změněn (cursor) Intend zámek Příznak, že na části objektu je nastaven zámek Intend table shared existuje shared zámek na nějakém řádků nebo stránce Rozsah zámků Řádek, datová stránka, tabulka, databáze Data, Indexy, interní struktury Konkrétní implementace jsou složité 14 14

Kombinace zámků Microsoft SQL Server 2012 Požadované zámky Existující zámky 15 15

Implementace pomocí zámků Problematické vlastnosti Pokud transakce dlouho a často exklusivně zamykají řádek, nedá se řádek číst. Pokud mnoho transakcí dlouhodobě zamyká řádek pro čtení, nedá se upravit. Uzamknutí stránky nebo tabulky omezí přístup i na data, která transakce nepoužívá. Režie s množstvím zámků Zámky vyžadují zdroje datového serveru Řešeno eskalací zámků na nadřazené datové struktury Absolutní nutnost používat krátké transakce Jinak uživatele čekají na dokončení cizích transakcí Nebezpečí množství deadlocků 16 16

Speciální konstrukce Nečekat na uvolnění zámku nebo čekat maximálně určenou dobu select * from author for update nowait; select * from author for update wait 10; Číst jenom z neuzamčených oblastí select * from author readpast; Manuálně uzamknout tabulku lock table table_name in {share exclusive } mode [ wait [ numsecs ] nowait ] 17 17

Optimistické schéma zamykání Způsob psaní aplikací v případě, že dochází zřídka ke konfliktům při přístupu k datům Načtení hodnot (a jejich zapamatování) Zpracování načtených hodnot Při zápisu výsledku se kontroluje, že původně načtené hodnoty jsou stále platné Pokud ne, provede se oprava Znovu načti data a proveď opakuj výpočet Informuj uživatele 18 18

Optimistické schéma zamykání - příklad select @old_value=column01 from table01 where condition (condition vybere jeden řádek) Použití: @old_value Natavení: @new_value update table01 set column01 = @new_value where column01 = @old_value and condition Test, kolik se updatovalo řádků Jeden řádek hodnota ve sloupci column01 se nezměnila -> commit Žádný řádek hodnota se změnila -> oprava Více řádků jiná chyba 19 19

Pesimistické schéma zamykání Způsob psaní aplikací v případě, že ke konfliktům při přístupu k datům dochází často Načtení hodnot a jejich uzamčení Možné dlouhé čekání na možnost uzamčení Chybový stav při dlouhém čekání Zpracování hodnot Commit Ostatní čekají po dobu zpracování nebo obdrží chybovou hlášku 20 20

Pesimistické schéma zamykání - příklad select @old_value=column01 from table01 where condition with holdlock (řádek je uzamčen) Použití: @old_value Natavení: @new_value update table01 set column01 = @new_value where condition commit 21 21

MVCC (PosgreSQL) - Multiversion concurrency control Každá transakce má rostoucí timestamp XID (začátek transakce) Verze na úrovni řádků (obecně několik verzí) xmin timestamp vytvoření timestamp (XID) transakce, která řádek vytvořila xmax timestamp ukončení timestamp (XID) transakce, která řádek zrušila update zruší starý a vytvoří nový řádek Transakce s timestampem x vidí řádky Svoje změny xmin < x, xmax neexistuje a transakce s xmin je komitovaná xmin < x, xmax < x a transakce s xmax je nekomitovaná Podmínky pro změny (podle izolačních úrovní) viz dokumentace. 22 22

MVCC 23 23

Izolační úrovně - Microsoft SET TRANSACTION ISOLATION LEVEL { READ UNCOMMITTED READ COMMITTED REPEATABLE READ SNAPSHOT SERIALIZABLE } [ ; ] 24 24

Izolační úrovně - Oracle Read Committed (Default) konzistence na úrovni příkazu Serializable Transactions konzistence na úrovni transakce Read-only SET TRANSACTION ISOLATION LEVEL READ COMMITTED; SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; SET TRANSACTION ISOLATION LEVEL READ ONLY; Zámky pouze pro měněná data Zámky na úrovni řádků neexistuje/není potřeba eskalace Transakce libovolně dlouhé commit zatěžuje server Dlouhá Serializable transakce nevidí změny v datech, chyba v serializable módu se objeví až při příkazu porušení podmínek. 25 25

Deadlock v operačních systémech - Coffmanovy podmínky Procesy si navzájem blokují zdroje a čekají na jejich uvolnění. Situace může nastat v kterémkoliv systému, kde se více procesů dělí o prostředky. Přesněji: Může nastat v každém systému, kde mohou být splněny tzv. Coffmanovy podmínky: Mutual Exclusion Prostředek může v jednom okamžiku vlastnit pouze jeden proces. Hold and wait Proces může žádat o další prostředky, i když má nějaké přiděleny. No preemtion Pokud proces prostředek vlastní, nelze mu ho bezpečně odejmout (musí ho vrátit sám). Circual wait Je možné uzavřít cyklus procesů vzájemně čekajících na zdroje svého předchůdce. 26 26

Deadlock v databázích (Dvě) Transakce si navzájem blokují zdroje a čekají na jejich uvolnění. Vnější autorita (datový server) Umí sledovat alokované zdroje Vyřeší deadlock poškozením některého procesu Zruší celý proces Přinutí proces, aby uvolnil nějaké zdroje 27 27

Deadlock Server dokáže deadlock identifikovat Server zruší jednu z transakcí Begin tran Y:=1 X:=10 X:=1 Y:=10 Begin tran 28 28

Deadlock update publisher set name = 'Aldata Infosystems' where pub_id = '1389'; update publisher set name = 'New Age Books' where pub_id = '0736'; update publisher set name = 'New Age Books' where pub_id = '0736'; update publisher set name = 'Aldata Infosystems' where pub_id = '1389'; ORA-00060 29 29

Předcházení deadlockům Oslabením některé z Coffmanových podmínek Nastavením všech zámků na začátku transakce Zamykání tabulek ve stejném pořadí Použití krátkých transakcí 30 30

Non serializable update publisher set name = 'Aldata Infosystems' where pub_id = '1389'; update publisher set name = 'New Age Books' where pub_id = '0736'; update publisher set name = 'New Age Books' where pub_id = '0736'; commit; commit; 31 31

Serializable set transaction isolation level serializable; update publisher set name = 'Aldata Infosystems' where pub_id = '1389'; update publisher set name = 'New Age Books' where pub_id = '0736'; commit; update publisher set name = 'New Age Books' where pub_id = '0736'; ORA-08177 32 32

Závěry Složitost problematiky se projeví při zvýšení počtu uživatelů (paralelních transakcí) nikoliv při vývoji. Je třeba provádět cílené testy pro paralelní zpracování Nárůst problémů je exponenciální s počtem paralelních transakcí. Nutno počítat s tím, že transakce bude z nějakého důvodu zrušena při commitu. Je nutné znát přesné možnosti a chování konkrétního serveru (verze) 33 33

Co si zapamatovat Co to je transakce K čemu slouží savepoint Co to je autonomní transakce Jaké existují transakční módy a v čem se liší Definice isolační úrovně podle ANSI normy Jak se implementují isolační úrovně pomocí mechanismu zámků Jak se implementují isolační úrovně pomocí snapshotů Co to je optimistické a pesimistické schéma zamykání Co to je deadlock, jak se dá deadlockům předcházet 34 34

Diskuse Otázky Poznámky Komentáře Připomínky 35