algore87 <
s25wfqfi...@user.narkive.com> wrote:
> Hallo, ich bins mal wieder :)
>
> bin mittlerweile fast mit dem Buch durch, doch beim Thema Sperrverfahren tu ich mir etwas schwer.
> Es geht beim Thema Transaktionen darum die Nebenläufigkeitskontrolle
in den Griff zu bekommen, bzw. die Probleme die mit ihr einher
gehen. Es gibt vier Hauptprobleme, die auftreten können, wenn zwei
Transaktionen zur gleichen Zeit verarbeitet werden.
[...]
> Meine Frage dreht sich darum, welche Strategien denn wirklich
eingesetzt werden und wovon das abhängt. Das hängt ja nicht vom
Isolationslevel ab oder? Von der Engine der Datenbank? Kann entweder
nur das Sperrverfahren eingesetzt werden oder auch MVCC? Also eine
Mischung, bzw. MVCC hat ja auch etwas ähnliches wie die Locks oder?
Um diese Deadlocks zu vermeiden sollte man eine niedrigeren
Isolationlevel wählen oder? Irgendwo habe ich aufgeschnappt, dass
das Problem bei Serializeable (der höchsten Stufe) ebenfalls nicht
auftreten kann. Gemeint sind Deadlocks.
Doch, Deadlocks koennen, je nach Schedulingverfahren, weiter auftreten.
Man muss zwei Aspekte unterschieden: die "Isolation Levels", die abstrakte
Korrektheitsaussagen machen, und die jeweiligen Algorithmen, die dazu
angewendet werden.
Die 4 im SQL-Standard vorgesehenen Isolation Levels sind hier ganz gut beschrieben:
<
https://de.wikipedia.org/wiki/Isolation_%28Datenbank%29>
Sie unterscheiden sich darin, welche der von Dir oben genannten Fehlersituationen damit
verhindert werden.
Nur "Serializable" verhindert alle. D.h., die anderen Levels erzeugen potentiell
unkorrekte Ablaeufe (je nach Struktur der Transaktionen und der Anwendungssituation
macht das aber nichts - wenn z.B. garkeine Transaktion schreibend zugreift,
oder nur nachts geschrieben und tagsueber gelesen wird, oder wenn die Anwendung
eher nur grobe Statistikwerte liefern soll).
Dann gibt es unterschiedliche Algorithmen zur Implementierung des
Serializable-Levels. Sperrverfahren sind nur eine der Moeglichkeiten;
es gibt auch andere, z.B. Conflict Graph, Timestamps, Optimistische
Strategien. Innerhalb der Sperrverfahren-Algorithmen koennen
ueblicherweise auch Deadlocks auftreten (stoert aber nach aussen hin
niemanden: dann wird halt eine Transaktion per Rollback abgeschossen
und neu gestartet). 2-Phasen-Locking garantiert Serialisierbarkeit,
aber verhindert erstmal keine Deadlocks. Das kann man durch (Laufzeit
kostende) Erweiterungen, z.B. "alles zu Beginn der Transaktion
locken", oder "Objekte nur in aufsteigender Reihenfolge locken" oder
durch Wartegraphalgorithmen tun.
Wolfgang