Auf dieser Seite wird beschrieben, wie Sie die Isolation wiederholbarer Lesevorgänge in Cloud Spanner verwenden.
Die Isolation wiederholbarer Lesevorgänge 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 Cloud 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. Lesevorgänge können 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. Weitere Informationen finden Sie unter Übersicht über Isolationsebenen.
Isolationsebene festlegen
Sie können die Isolationsebene für Lese-Schreib-Transaktionen auf Datenbankclient- oder Transaktionsebene mit den folgenden Methoden festlegen:
Clientbibliotheken
Go
Java
Node.js
Python
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 Cloud Spanner die Isolationsebene auf serialisierbare Isolation fest.
Beschränkungen
In der Vorschau der Isolation wiederholbarer Lesevorgänge gelten die folgenden Einschränkungen.
- Wenn Ihr Schema
Prüfeinschränkungen enthält, können Probleme auftreten.
- Es gibt ein bekanntes Problem, das verhindert, dass Prüfeinschränkungen validiert werden. Dies kann zu Einschränkungsverletzungen führen, wenn Transaktionen ausgeführt werden. Daher empfehlen wir, die Isolation wiederholbarer Lesevorgänge in der Vorschau nicht zu verwenden, wenn Ihr Schema Prüfeinschränkungen enthält.
- Wenn in Ihrer Datenbank gleichzeitige Schemaänderungen auftreten, während Transaktionen ausgeführt werden, können Probleme auftreten.
- Wenn Ihre DML-Anweisungen die
last_statementOption verwenden und eine gleichzeitige Schemaänderung auftritt, während die DML-Anweisung ausgeführt wird, kann sie intern wiederholt werden und eine Fehlermeldung zurückgeben, die besagt, dass die DML-Anweisung nach dem Festlegen derlast_statementOption falsch wiederholt wurde. Wenn Sie die Transaktion nach der Schemaänderung wiederholen, wird dieses Problem behoben. - Wenn bei Anfragen in einer Transaktion ein
DEADLINE_EXCEEDED-Fehler vom Client auftritt, wiederholen Sie die Transaktion, nachdem die Schemaänderung angewendet wurde, um das Problem zu beheben.
- Wenn Ihre DML-Anweisungen die
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 daher nichts.
- Sie können die Isolation wiederholbarer Lesevorgänge nicht für schreibgeschützte, einmalige und partitionierte Vorgänge mit den Cloud Spanner-Clientbibliotheken festlegen. Die Cloud 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 Verwendung von SELECT FOR UPDATE bei der Isolation wiederholbarer Lesevorgänge
Weitere Informationen zur Serialisierbarkeit und externen Konsistenz von Cloud Spanner finden Sie unter TrueTime und externe Konsistenz.