Auf dieser Seite wird beschrieben, wie Sie die Isolation wiederholbarer Lesevorgänge in Spanner verwenden.
„Wiederholbarer Lesevorgang“ ist eine Isolationsebene, die
dafür sorgt, dass alle Lesevorgänge innerhalb einer Transaktion einen konsistenten Snapshot
der Datenbank sehen, wie er zu Beginn der Transaktion vorlag. In Spanner wird diese Isolationsebene mit einer Technik implementiert, die auch als Snapshot-Isolation bezeichnet wird. Dieser Ansatz ist in Szenarien mit hoher Nebenläufigkeit von Lese-/Schreibvorgängen vorteilhaft, in denen zahlreiche Transaktionen Daten lesen, die von anderen Transaktionen geändert werden könnten. Durch die Verwendung eines festen Snapshots vermeidet die Isolation wiederholbarer Lesevorgänge die Leistungseinbußen der strengeren serialisierbaren Isolationsebene. Mit der standardmäßigen optimistischen Nebenläufigkeit können Lesevorgänge ausgeführt werden, ohne Sperren zu erwerben und ohne gleichzeitige Schreibvorgänge zu blockieren. Dies führt möglicherweise zu weniger abgebrochenen Transaktionen, die aufgrund von Serialisierungskonflikten wiederholt werden müssen. Bei pessimistischer Nebenläufigkeit,
verwenden Lesevorgänge Snapshots, aber exklusive Sperren gelten für Daten, die aus FOR
UPDATE Abfragen oder lock_scanned_ranges=exclusive Hinweisen gelesen werden, und für Daten, die mit
DML-Abfragen geschrieben werden. Die pessimistische Nebenläufigkeit verringert auch die Wahrscheinlichkeit von Schreib-Schreib-Konflikten. Weitere Informationen finden Sie unter Übersicht über Isolationsebenen und
Nebenläufigkeitserkennung.
Isolationsebene festlegen
Sie können die Isolationsebene für Lese-/Schreibtransaktionen auf Datenbankclient- oder Transaktionsebene mit den folgenden Methoden festlegen:
Clientbibliotheken
Go
Java
Node.js
Python
C++
C#
REST
Mit der
TransactionOptions.isolation_level
REST API können Sie die Isolationsebene für Lese-/Schreib- und schreibgeschützte Transaktionen
auf Transaktionsebene festlegen. Die gültigen Optionen sind TransactionOptions.SERIALIZABLE und TransactionOptions.REPEATABLE_READ. Standardmäßig legt Spanner die Isolationsebene auf serialisierbare Isolation fest.
Mit den Treibern von Spanner können Sie die Isolationsebene und den Lesesperrmodus als Verbindungsparameter auf Verbindungsebene oder als SET-Anweisung auf Transaktionsebene festlegen. Weitere Informationen zu den einzelnen
Treibern finden Sie unter Übersicht über Treiber.
Sie können auch die Sperrkonkurrenz für jede Isolationsebene konfigurieren. Weitere Informationen finden Sie unter Nebenläufigkeitserkennung.
Nicht unterstützte Anwendungsfälle
- Sie können die Isolation wiederholbarer Lesevorgänge nicht für partitionierte DML-Transaktionen festlegen.
- Alle schreibgeschützten Transaktionen werden bereits mit einem festen Snapshot ausgeführt und erfordern keine Sperren. Wenn Sie die Isolation wiederholbarer Lesevorgänge für diesen Transaktionstyp festlegen, ändert sich also nichts.
- Sie können die Isolation wiederholbarer Lesevorgänge nicht für schreibgeschützte, einmalige und partitionierte Vorgänge mit den Spanner-Clientbibliotheken festlegen. Die Spanner-Clientbibliotheken bieten keine Option zum Festlegen der Isolation wiederholbarer Lesevorgänge für schreibgeschützte, einmalige und partitionierte Abfragevorgänge.
Nächste Schritte
Weitere Informationen zu Isolationsebenen.
Informationen zur Nebenläufigkeitserkennung
Informationen zur Verwendung von SELECT FOR UPDATE bei der Isolation wiederholbarer Lesevorgänge
Weitere Informationen zur Serialisierbarkeit und externen Konsistenz von Spanner finden Sie unter TrueTime und externe Konsistenz.