Erhard Künzel für Info 9. Klasse: Digitale Schule Bayern© Erhard Künzel
0 Bankautomat 1 Problem mit mehrschrittigem Prozess 2 Transaktionen 3 Problem mit parallelen Prozessen 4 Die ACID Anforderungen 5 Deadlocks Digitale Schule Bayern© Erhard Künzel
Von Erix! Unter der Creative Commons Lizenz Namen nen- nen nicht kommerziell Weitergabe unter gleicher Bedingung Eine Aktion am Geldautomaten besteht aus mehreren Teilen. Wenn nun mittendrin etwas schief geht? Zudem greifen gleichzeitig viele Leute zu. Kann da was durcheinander kommen? Digitale Schule Bayern© Erhard Künzel
Lege in der Klassendatenbank eine Datentabelle an, z.B. CREATE TABLE dt631 (nr integer, geld integer, PRIMARY KEY(ktnr)); Vorsicht InnoDB wählen!! Fülle sie mit zwei Datensätzen, z.B. INSERT INTO dt631 VALUES (1, 100), (2,200); Überweise von Konto 1 auf Konto 2 100, etwa mit UPDATE dt631 SET geld = geld – 100 WHERE nr = 1; UPDATE dt631 SET geld = geld WHERE nr = 2; Sieh dir beide Konten an: SELECT * FROM dt631; Digitale Schule Bayern© Erhard Künzel
Wenn nun zwischen beiden Update-Befehlen die Verbindung abreißt oder das Frontend abstürzt? Wir schauen, dass beide Updates oder keines ausgeführt wird. Tippe dazu in SQLyogs Queryfenster: 1 START TRANSACTION; 2 UPDATE dt631 SET geld = geld – 100 WHERE nr = 1; 3 UPDATE dt631 SET geld = geld WHERE nr = 2; 4COMMIT 5 ROLLBACK 6 SELECT * FROM dt631; Digitale Schule Bayern© Erhard Künzel
Setze den Cursor nacheinander in die angegebenen Zeilen und führe jeweils die Anweisung aus Beende Verbindung und starte neu Digitale Schule Bayern© Erhard Künzel
Die Anweisungen zwischen START TRANSACTION und Abbruch werden alle nicht ausgeführt. Die Anweisungen zwischen START TRANSACTION und COMMIT werden zuverlässig alle gleichzeitig ausgeführt. Die Anweisungen zwischen START TRANSACTION und ROLLBACK werden alle nicht ausgeführt. Digitale Schule Bayern© Erhard Künzel
Je zwei Gruppen A/B vereinbaren Zusammenarbeit auf der Datentabelle von A. A überweist, B kontrolliert: 1 START TRANSACTION; 2 UPDATE dt631 SET geld = geld – 100 WHERE nr = 1; 3SELECT * FROM dt631; 4 UPDATE dt631 SET geld = geld WHERE nr = 2; 5COMMIT 6 SELECT * FROM dt631; SELECT * FROM dt631; B bekommt von allen Anweisungen erst was mit, nachdem A COMMIT abgeschickt hat. Digitale Schule Bayern© Erhard Künzel
Probiere verschiedene Abläufe zB A1, B1, A2, A3, B2, A4, B3, B4, A5, B5. Probiere auch jeweils 4 ROLLBACK. 1 START TRANSACTION; 2 UPDATE dt631 SET geld = geld WHERE nr = 1; 3SELECT * FROM dt631; 4COMMIT 5 SELECT * FROM dt631; 1 START TRANSACTION; 2 UPDATE dt631 SET geld = geld + 50 WHERE nr = 1; 3SELECT * FROM dt631; 4COMMIT 5 SELECT * FROM dt631; Wird erst nach A4 ausgeführt Digitale Schule Bayern© Erhard Künzel
Probiere verschiedene Abläufe zB A1, B1, A2, A3, B2, A4, B3, B4, A5, B5. Probiere auch jeweils 4 ROLLBACK. 1 START TRANSACTION; 2 UPDATE dt631 SET geld = geld WHERE nr = 1; 3SELECT * FROM dt631; 4COMMIT 5 SELECT * FROM dt631; 1 START TRANSACTION; 2 UPDATE dt631 SET geld = geld + 50 WHERE nr = 2; 3SELECT * FROM dt631; 4COMMIT 5 SELECT * FROM dt631; Wird gleich ausgeführt Digitale Schule Bayern© Erhard Künzel
Die Transaktionen sorgen dafür, dass die Handlungen von A für B atomar, d.h. unteilbar schlagartig eintreten und umgekehrt. Zudem sind die Handlungen von A und B voneinander isoliert. B merkt nur beim Ändern eines Datensatzes nur etwas, wenn A ihn schon geändert hat, also nur wenn es unvermeidbar ist. Digitale Schule Bayern© Erhard Künzel
Suche im Internet unter Datenbanken ACID und versuche das A und das I zu verstehen. WIKIPEDIA: Von einer atomaren Operation spricht man, wenn die Transaktion entweder ganz oder gar nicht ausgeführt wird … sobald sich jedoch herausstellt, dass die Transaktion nicht abgeschlossen werden kann, wird ein Rollback durchgeführt, also alles bisher Erledigte wieder rückgängig gemacht. WIKIPEDIA: Durch das Prinzip der Isolation wird verhindert, dass sich in Ausführung befindliche Transaktionen gegenseitig beeinflussen. Digitale Schule Bayern© Erhard Künzel
Prozess A erwirbt Sperre für ktnr1 Prozess B erwirbt Sperre für ktnr2 Prozess A wartet auf B Prozess B wartet auf A?? Deadlock Rollback für Prozess B Digitale Schule Bayern© Erhard Künzel