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.
Themen
Ü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 |
---|---|---|---|
|
|
|
|
|
|
|
SQL |
|
|
|
Beide basieren auf snapshot (MVCC), sind aber nicht exakt identisch. |
|
|
|
Genau das Gleiche. |
|
|
|
SQL |
|
|
|
SQL |
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'