2012-03-26 11 views
4

Ich arbeite an einem Schulprojekt, das die Leistung von MySQL in Bezug auf verschiedene Isolationsstufen charakterisieren soll. Ich habe Sachen auf READ UNCOMMITTED, READ COMMITTED, REPEATABLE READ und SERIALIZABLE getestet. Jetzt möchte ich Dinge mit Snapshot-Isolation testen.Wie setze ich InnoDB in MySQL auf die Snapshot-Isolationsstufe

Ich verstehe, dass bei der Verwendung der Standardeinstellung für REPEATABLE READ in InnoDB Snapshot-Isolation in Verbindung verwendet wird, aber ich frage mich, ist es möglich, die Isolationsstufe nur Snapshot-Isolation zu setzen? Wie würde ich das tun?

+1

Die Isolationsstufen sind die 4, die Sie erwähnen. Es gibt keine Snapshot-Isolationsstufe, die global festgelegt werden kann. –

Antwort

3

Es gibt keine globale Snapshot-Isolationsstufe. Von MySQL docs, START TRANSACTION Syntax:

Sie können auch eine Transaktion wie folgt beginnen:

START TRANSACTION WITH CONSISTENT SNAPSHOT; 

Die WITH CONSISTENT SNAPSHOT Option startet eine konsistente Lese für Speicher-Engines, die dazu fähig sind. Dies gilt nur für InnoDB. Der Effekt ist derselbe wie das Ausgeben einer START TRANSACTION, gefolgt von einer SELECT aus einer beliebigen InnoDB-Tabelle. Siehe Abschnitt 13.6.8.2, “Consistent Nonlocking Reads”. Die WITH CONSISTENT SNAPSHOT Option ändert die aktuelle Transaktionsisolationsstufe nicht, sodass nur dann ein konsistenter Snapshot zur Verfügung steht, wenn die aktuelle Isolationsstufe eine konsistente Leseoperation erlaubt (REPEATABLE READ oder SERIALIZABLE).

So werden Sie Isolationsstufe auf REPEATABLE READ oder SERIALIZABLE gesetzt und Ihre Transaktionen mit der obigen Syntax starten.

1

Mit der Variablen tx_isolation können Sie die Transaktionsisolation lokal und global festlegen.

Sie können es in der Sitzung festgelegt als

SET tx_isolation = 'READ-COMMITTED'; 

folgt Sie es auch

SET GLOBAL tx_isolation = 'READ-COMMITTED'; 

global festgelegt, aber das wirkt sich neue DB-Verbindungen geht nach vorn. Sie müssen es noch in der aktuellen Sitzung setzen

0

Es gibt keine Snapshot-Isolationsstufe in MySQL. Es verwendet Snapshot für Consistent Nonlocking Reads, aber es bedeutet nicht, dass es Snapshot-Isolation unterstützt.

Gemäß the Wikipedia page unterstützen nur die folgenden Datenbanken die Snapshot-Isolation.

Snapshot-Isolation wurde von mehreren großen Datenbank-Management-Systeme, wie SQL Anywhere angenommen wurden, Interbase, Firebird, Oracle, PostgreSQL und Microsoft SQL Server (2005 und später)

In Snapshot-Isolation,

die Transaktion selbst erfolgreich begehen nur, wenn keine Updates es h wie gemacht Konflikt mit irgendwelchen seit dieser Snapshot nicht bei allen Produkten dieses

Aber die WIEDERHOLBARE READ Ebene gemacht Updates gleichzeitig, obwohl es Snapshot verwendet.