2012-12-02 8 views
7

Was ist der Unterschied zwischen Parallelitätssteuerungs- und Transaktionsisolationsstufen?"Wiederholbarer Lesevorgang" vs. Optimistisch

Ich verstehe jeden von ihnen klar, jedoch habe ich einige Probleme, die sie miteinander in Verbindung bringen. Insbesondere sehe ich einige Überschneidungen in ihren Funktionen und ich bin mir nicht sicher, wann man eins über das andere benutzen sollte. Oder sollten beide zusammen verwendet werden?

Auch was heißt pessimistisches Sperren mit wiederholbarem Lesen? Wiederholtes Lesen bedeutet nicht, dass alle zu bearbeitenden Werte gesperrt sind. Warum also immer noch pessimistisches Locking?

Antwort

4

Das Problem tritt auf, weil es zwei Modelle für die Steuerung des gemeinsamen Zugriffs gibt, die manchmal von SQL-Implementierungen gemischt werden.

  1. Schlösser, wie in 2PL (Two Phase Locking)
  2. Versionen, wie in MVCC (Multiversion Concurrency Control)

Pessimistic Mittel Zeilen, die gelesen werden, werden gesperrt. Optimistisch bedeutet, dass gelesene Zeilen nicht gesperrt sind.

Die klassische 2PL-Implementierung von Repeatable Read ist immer pessimistisch. Die Multiversion-Implementierung von Repeatable Read ist optimistisch. Es sperrt nicht die Zeilen, die für eine SELECT-Anweisung gelesen werden, und ermöglicht anderen Transaktionen, die Zeilen zu ändern, die in einem SELECT gelesen wurden. Solche Änderungen sind für die Transaktion, die SELECT ausgeführt hat, erst sichtbar, wenn sie festgeschrieben wurde.

+0

Wenn andere Transaktionen Änderungen vornehmen und festschreiben, werden die Änderungen für die Transaktion sichtbar, die SELECT sofort ausgeführt hat, richtig? Wie wiederholbar gelesen wird? – Sunnyday

+0

Wenn die Sitzung standardmäßig 'READ COMMITTED' lautet, kann sie normalerweise auf REPEATABLE READ gesetzt werden. Zum Beispiel mit SET TRANSACTION REPEATABLE READ in HSQLDB. – fredt

5

Concurrency-Steuerelement ist ein allgemeiner Begriff für jeden Mechanismus, der Probleme behandelt, die von gleichzeitigen Verbindungen entstehen.

Die Transaktionsisolationsstufen sind ein Mechanismus, mit dem MySQL die Steuerung des gemeinsamen Zugriffs implementiert.

Siehe Consistent Nonlocking Reads für Dokumentation, wie MySQL REPEATABLE READ ohne pessimistische Sperren implementiert:

Eine konsistente Lese gesetzt keine Sperren auf den Tabellen auf sie zugreift und damit andere Sitzungen sind frei, diese Tabellen gleichzeitig zu ändern Zeit wird ein konsistentes Lesen der Tabelle durchgeführt.

Angenommen, Sie verwenden die Standardisolationsstufe REPEATABLE READ. Wenn Sie einen konsistenten Lesevorgang (dh eine normale SELECT-Anweisung) ausgeben, gibt InnoDB Ihrer Transaktion einen Zeitpunkt, nach dem Ihre Abfrage die Datenbank sieht. Wenn eine andere Transaktion eine Zeile löscht und festschreibt, nachdem Ihr Zeitpunkt zugewiesen wurde, wird die Zeile nicht als gelöscht angezeigt. Beilagen und Aktualisierungen werden ähnlich behandelt.

Verwandte Themen