1 / 23

Transak ční zpracování v SQL P. Částek

Transak ční zpracování v SQL P. Částek. Transakce. Transakce = logická jednotka práce Podaří-li se všechny části transakce, potvrdíme je. COMMIT

devon
Download Presentation

Transak ční zpracování v SQL P. Částek

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Transakční zpracování v SQLP. Částek

  2. Transakce Transakce = logická jednotka práce Podaří-li se všechny části transakce, potvrdíme je. COMMIT Jestliže se některá část transakce nepodaří, nastane nekonzistentní stav. Potřebujeme tedy všechny změny provedené zbylou částí transakce vrátit zpět (zrušit). ROLLBACK

  3. Příklad Potřebujeme upravit více záznamů najednou. Buď všechny, nebo nastane-li při některé úpravě chyba, pak žádné. int zakazka_ = 1000; zakazky_celkem_ = zakazky_celkem_ + 1000 ; EXEC SQL WHENEVER SQLERROR DO undo() ; EXEC SQL INSERT INTO zakazky ( cena ) VALUES ( :zakazka_ ) ; EXEC SQL UPDATE aktiva SET zakazky_celkem=:zakazky_celkem_ ; EXEC SQL COMMIT ; void undo() { EXEC SQL ROLLBACK ; }

  4. Před zpracováním zakazky: … aktiva: 5000 5000 5000 V případě chyby… Popříkazu ROLLBACK zakazky: … aktiva: 5000 5000 5000 INSERT chyba UPDATE zakazky: … 1000 aktiva: 5000 5000 5000 INSERT UPDATE chyba zakazky: … 1000 aktiva: 6000 6000 5000 Tento případ nastat nemůže – SQL příkazy jsou sami o sobě atomické.

  5. Transaction manager (TM) • Příkazy jazyků DDL, DML a DCL jsou příkazy databáze. • Příkazy COMMIT a ROLLBACK jsou příkazy transakčního manažeru. • TM není součástí databáze – databáze je podřízená transakčnímu manažeru. • Jak pracuje: UPDATE WHERE • DB vyhledá řádky odpovídající podmínce za WHERE • TM zapíše jejich stav do logu • DB změní tyto řádky • Dojde-li k vyvolání příkazu ROLLBACK, TM obnoví stav změněných řádků z logu

  6. Bod synchronizace = „synchpoint“ • Hraniční bod mezi dvěma po sobě následujícími transakcemi • tj. na konci každé transakce, kdy je DB v konzistentním stavu • Je založen na začátku aplikace, a dále při příkazech COMMIT a ROLLBACK.

  7. COMMIT a ROLLBACK COMMIT • Označuje úspěšný konec transakce • Zakládá bod synchronizace • Potvrdí všechny změny od předchozího bodu synchronizace, tyto změny se stávají nevratné. • Zavře všechny otevřené kurzory; otevře zámky na všech záznamech ROLLBACK • Označuje neúspěšný konec transakce • Zakládá bod synchronizace • Vrátí zpět všechny změny od předchozího bodu synchronizace • Zavře všechny otevřené kurzory; otevře zámky na všech záznamech

  8. COMMIT a ROLLBACK • Každý SQL příkaz je vykonáván v rámci nějaké transakce – včetně DDL (CREATE) a DCL (GRANT). Dojde-li k vyvolání příkazu ROLLBACK, jsou zrušeny i takové změny. • Transakce nemohou být vnořené jedna v druhé, nebo se prolínat – každý COMMIT a ROLLBACK ukončuje jednu transakci a začíná druhou

  9. Tři konkurenční problémy • The lost update problem • The uncommitted dependency problem • The inconsistent analysis problem

  10. Proces 1 FETCH R UPDATE R The lost update problem Proces 2 FETCH R UPDATE R ČAS

  11. Proces 1 FETCH R The uncommitted dependency problem 1 Proces 2 UPDATE R ROLLBACK ČAS

  12. Proces 1 UPDATE R The uncommitted dependency problem 2 Proces 2 UPDATE R ROLLBACK ČAS

  13. Proces 1 FETCH R1 (30) suma = 30 FETCH R2 (30) suma = 60 The inconsistent analysis problem Proces 2 FETCH R2 (40) UPDATE R2 (40 -> 30) FETCH R1 (30) UPDATE R1 (30 -> 20) COMMIT ČAS

  14. Tři konkurenční problémy • The lost update problem • The uncommitted dependency problem • The inconsistent analysis problem • Řešení: zámky (dvoufázový COMMIT)

  15. Zámky • z hlediska působnosti • na řádcích • na tabulkách • z hlediska přístupu • Sdílené (pro čtení) • výhradní = eXkluzivní (pro zápis)

  16. Udílení S a X zámků • Matice kompatibility: Y – zámek udělen N – zámek neudělen (proces musí čekat)

  17. Proces 1 FETCH R udělen S zámek na R UPDATE R žádá X zámek na R čeká čeká čeká čeká The lost update problem Proces 2 FETCH R udělen S zámek na R UPDATE R žádá X zámek na R čeká čeká ČAS Deadlock

  18. Proces 1 FETCH R žádá S zámek na R čeká čeká čeká čeká znovuzahájení FETCH R udělen S zámek na R The uncommitted dependency problem 1 Proces 2 UPDATE R udělen X zámek na R ROLLBACK odemknutí zámku X na R ČAS

  19. Proces 1 UPDATE R žádá X zámek na R čeká čeká čeká čeká znovuzahájení UPDATE R udělen X zámek na R The uncommitted dependency problem 2 Proces 2 UPDATE R udělen X zámek na R ROLLBACK odemknutí zámku X na R ČAS

  20. Proces 1 FETCH R1 (30) suma = 30 udělen S zámek na R1 FETCH R2 (30) žádá S zámek na R2 čeká The inconsistent analysis problem Proces 2 FETCH R2 (40) udělen S zámek na R2 UPDATE R2 (40 -> 30) udělen X zámek na R2 FETCH R1 (30) udělen S zámek na R1 UPDATE R1 (30 -> 20) žádá X zámek na R1 čeká čeká čeká ČAS Deadlock

  21. Dvoufázový COMMIT • První fáze: získávání zámků • může být postupné (ne najednou) • Druhá fáze: odemykání zámků • většinou najednou pomocí COMMIT nebo ROLLBACK • Řeší tři konkurenční problémy, resp. převádí na problém deadlocku

  22. čeká na Proces 1 čeká na čeká na Proces 2 Proces 3 Deadlock • Situace, kdy více procesů čeká vzájemně jeden na druhého

  23. Deadlock • Detekce deadlocku • Detekce cyklu v grafu čekajících procesů • Hlídání doby trvání operace (trvá-li atomární operace příliš dlouho, asi nastal deadlock) • Odstranění deadlocku • Vybere se nějaký proces z těch, které jsou v deadlocku a provede se na něm ROLLBACK

More Related