Isolationsstufen für Transaktionen in Babelfish - Amazon Aurora

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Isolationsstufen für Transaktionen in Babelfish

Babelfish unterstützt Isolationsstufen für Transaktionen und. READ UNCOMMITTED READ COMMITTED SNAPSHOT Ab der Babelfish-Version 3.4 werden zusätzliche Isolationsstufen und weitere Isolationsstufen REPEATABLE READ unterstützt. SERIALIZABLE Alle Isolationsstufen in Babelfish werden mit dem Verhalten der entsprechenden Isolationsstufen in Postgre unterstützt. SQL SQL Server und Babelfish verwenden unterschiedliche grundlegende Mechanismen zur Implementierung von Transaktionsisolationsstufen (Blockierung für gleichzeitigen Zugriff, Sperren von Transaktionen, Fehlerbehandlung usw.). Und es gibt einige subtile Unterschiede darin, wie sich der gleichzeitige Zugriff für unterschiedliche Workloads auswirken kann. Weitere Informationen zu diesem SQL Postgre-Verhalten finden Sie unter Transaction Isolation.

Überblick über die Isolationsstufen von Transaktionen

Die ursprünglichen Isolationsstufen für SQL Servertransaktionen basieren auf pessimistischen Sperren, bei denen nur eine Kopie der Daten vorhanden ist und Abfragen Ressourcen wie Zeilen sperren müssen, bevor auf sie zugegriffen werden kann. Später wurde eine Variante der READ COMMITTED Isolationsstufe eingeführt. Dies ermöglicht die Verwendung von Zeilenversionen, um eine bessere Parallelität zwischen Lesern und Schreibern zu gewährleisten, indem der Zugriff nicht blockiert wird. Darüber hinaus SNAPSHOT ist eine neue Isolationsstufe namens verfügbar. Außerdem werden Zeilenversionen verwendet, um eine bessere Parallelität als die REPEATABLE READ Isolationsstufe zu gewährleisten, indem gemeinsame Sperren für gelesene Daten vermieden werden, die bis zum Ende der Transaktion aufbewahrt werden.

Im Gegensatz zu SQL Server basieren alle Isolationsstufen für Transaktionen in Babelfish auf optimistischem Locking (). MVCC Bei jeder Transaktion wird eine Momentaufnahme der Daten entweder zu Beginn der Anweisung (READ COMMITTED) oder zu Beginn der Transaktion (REPEATABLE READ,SERIALIZABLE) angezeigt, unabhängig vom aktuellen Status der zugrunde liegenden Daten. Daher kann sich das Ausführungsverhalten gleichzeitiger Transaktionen in Babelfish vom Verhalten von Server unterscheiden. SQL

Stellen Sie sich zum Beispiel eine Transaktion mit Isolationsstufe vorSERIALIZABLE, die zunächst auf dem SQL Server blockiert ist, aber später erfolgreich ist. Es kann in Babelfish aufgrund eines Serialisierungskonflikts mit einer gleichzeitigen Transaktion, die dieselben Zeilen liest oder aktualisiert, fehlschlagen. Es kann auch Fälle geben, in denen die Ausführung mehrerer gleichzeitiger Transaktionen in Babelfish zu einem anderen Endergebnis führt als in Server. SQL Anwendungen, die Isolationsstufen verwenden, sollten gründlich auf Parallelitätsszenarien getestet werden.

Isolationsstufen im Server SQL Babelfish-Isolationsstufe Isolationsstufe nach Abschluss SQL Kommentare

READ UNCOMMITTED

READ UNCOMMITTED

READ UNCOMMITTED

READ UNCOMMITTEDist dasselbe wie READ COMMITTED in Babelfish oder Postgre SQL

READ COMMITTED

READ COMMITTED

READ COMMITTED

SQLREAD COMMITTEDDer Server basiert auf pessimistischem Sperren, READ COMMITTED Babelfish basiert auf Snapshot (). MVCC

READ COMMITTED SNAPSHOT

READ COMMITTED

READ COMMITTED

Beide basieren auf snapshot (MVCC), sind aber nicht exakt identisch.

SNAPSHOT

SNAPSHOT

REPEATABLE READ

Genau das Gleiche.

REPEATABLE READ

REPEATABLE READ

REPEATABLE READ

SQLREPEATABLE READDer Server basiert auf pessimistischen Sperren, Babelfish REPEATABLE READ basiert auf Snapshot (). MVCC

SERIALIZABLE

SERIALIZABLE

SERIALIZABLE

SQLSERIALIZABLEDer Server ist pessimistisch isoliert, Babelfish basiert auf Snapshot (). SERIALIZABLE MVCC

Anmerkung

Die Tabellenhinweise werden derzeit nicht unterstützt und ihr Verhalten wird mithilfe der vordefinierten Escape-Hatch von Babelfish gesteuert. escape_hatch_table_hints

Einrichtung der Isolationsstufen für Transaktionen

Verwenden Sie den folgenden Befehl, um die Isolationsstufe für Transaktionen festzulegen:

SET TRANSACTION ISOLATION LEVEL { READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SNAPSHOT | SERIALIZABLE }

Isolationsstufen für Transaktionen aktivieren oder deaktivieren

Die Isolationsstufen REPEATABLE READ für Transaktionen SERIALIZABLE sind in Babelfish standardmäßig deaktiviert und Sie müssen sie explizit aktivieren, indem Sie die Option babelfishpg_tsql.isolation_level_serializable oder die babelfishpg_tsql.isolation_level_repeatable_read Escape-Hatch auf use setzen. pg_isolation sp_babelfish_configure Weitere Informationen finden Sie unter Verwalten der Babelfish-Fehlerbehandlung mit Escape-Schraffuren.

Im Folgenden finden Sie Beispiele, wie Sie die Verwendung von REPEATABLE READ und SERIALIZABLE in der aktuellen Sitzung aktivieren oder deaktivieren können, indem Sie die entsprechenden Escape-Schraffuren setzen. Fügen Sie optional server Parameter hinzu, um die Fluchtluke für die aktuelle Sitzung sowie für alle nachfolgenden neuen Sitzungen festzulegen.

Um die Verwendung von nur SET TRANSACTION ISOLATION LEVEL REPEATABLE READ in der aktuellen Sitzung zu aktivieren.

EXECUTE sp_babelfish_configure 'isolation_level_repeatable_read', 'pg_isolation'

Um die Verwendung von SET TRANSACTION ISOLATION LEVEL REPEATABLE READ in der aktuellen Sitzung und allen nachfolgenden neuen Sitzungen zu aktivieren.

EXECUTE sp_babelfish_configure 'isolation_level_repeatable_read', 'pg_isolation', 'server'

Um die Verwendung von SET TRANSACTION ISOLATION LEVEL REPEATABLE READ in der aktuellen Sitzung und nachfolgenden neuen Sitzungen zu deaktivieren.

EXECUTE sp_babelfish_configure 'isolation_level_repeatable_read', 'off', 'server'

Um die Verwendung von nur SET TRANSACTION ISOLATION LEVEL SERIALIZABLE in der aktuellen Sitzung zu aktivieren.

EXECUTE sp_babelfish_configure 'isolation_level_serializable', 'pg_isolation'

Um die Verwendung von SET TRANSACTION ISOLATION LEVEL SERIALIZABLE in der aktuellen Sitzung und allen nachfolgenden neuen Sitzungen zu aktivieren.

EXECUTE sp_babelfish_configure 'isolation_level_serializable', 'pg_isolation', 'server'

Um die Verwendung von SET TRANSACTION ISOLATION LEVEL SERIALIZABLE in der aktuellen Sitzung und nachfolgenden neuen Sitzungen zu deaktivieren.

EXECUTE sp_babelfish_configure 'isolation_level_serializable', 'off', 'server'