Freigeben über


Isolationsstufen

Wenn Sperren als Kontrollmechanismus für Transaktionen verwendet werden, können Parallelitätsprobleme gelöst werden. Sperren ermöglichen, dass mehrere Transaktionen gleichzeitig, aber völlig isoliert voneinander ausgeführt werden. Als Isolationsstufe wird die Stufe bezeichnet, ab der eine Transaktion inkonsistente Daten akzeptiert. Eine höhere Isolationsstufe bietet höheren Schutz gegen inkonsistente Daten, der Nachteil ist jedoch die geringere Parallelität.

In SQL Server Compact wird über die für eine Anwendung erforderliche Isolationsstufe das Sperrverhalten von SQL Server Compact bestimmt.

SQL Server Compact unterstützt folgende Isolationsstufen (in aufsteigender Reihenfolge):

  • Read Committed (Standardeinstellung von SQL Server Compact)

  • Repeatable Read

  • Serializable (Transaktionen sind voneinander isoliert)

Auf einer höheren Isolationsstufe haben die Daten höheren Schutz vor Dateninkonsistenzen. Damit wird jedoch die Parallelität der Transaktion reduziert, und der Mehrbenutzerzugriff wird beeinträchtigt.

Hinweis

SQL Server Compact stellt sicher, dass eine Transaktion Daten einer anderen Transaktion, für die kein Commit ausgeführt wurde, nicht lesen kann (Dirty Read). Dazu wird ein Mechanismus zur Versionsverwaltung für Seiten verwendet, der Benutzern das Lesen von Daten ermöglicht, ohne S-Sperren für die Daten anzufordern. Dies ermöglicht hohe Parallelität bei (SELECT)-Lesevorgängen.

Isolationsstufen und Parallelitätsprobleme

In der folgenden Tabelle werden die einzelnen Isolationsstufen und die möglichen Parallelitätsprobleme der einzelnen Stufen aufgeführt.

Hinweis

Zu den möglichen Parallelitätsproblemen gehören die Abhängigkeit von Daten, für die kein Commit ausgeführt wurde, die inkonsistente Analyse und das Lesen eines Phantoms. Weitere Informationen zu Parallelitätsproblemen finden Sie unter Parallelität.

Isolationsstufe

Abhängigkeit von Daten, für die kein Commit ausgeführt wurde (Dirty Read)

Inkonsistente Analyse (nicht wiederholbarer Lesevorgang)

Lesen eines Phantoms

Read Committed

Nein

Ja

Ja

Repeatable Read

Nein

Nein

Ja

Serializable

Nein

Nein

Nein

Die Isolationsstufen können entweder programmgesteuert festgelegt werden oder mit der folgenden SQL-Syntax: SET TRANSACTION ISOLATION LEVEL. Weitere Informationen finden Sie unter Isolationsstufen von Transaktionen.

Isolationsstufe im Transaktionsbereich

Die Standardisolationsstufe für System.Transaction ist ReadCommitted. Eine Transaktion in einem Transaktionsbereich wird jedoch standardmäßig mit der Isolationsstufe Serializable ausgeführt. Wenn eine SQL Server Compact-Verbindung in einem Transaktionsbereich eingetragen ist, wird demnach die implizite Transaktion (eine SQL Server Compact-Transaktion, die intern für den Transaktionsbereich erstellt wird) standardmäßig mit der Isolationsstufe Serializable ausgeführt. Einige der überladenen Konstruktoren der TransactionScope-Klasse akzeptieren die Isolationsstufe als Parameter. Diese sollten verwendet werden, um für die implizite Transaktion einen anderen Isolationsstufenwert anzugeben. Wenn die angegebene Isolationsstufe von SQL Server Compact nicht unterstützt wird, wird beim Eintragen einer SQL Server Compact-Verbindung in einen Transaktionsbereich eine Ausnahme ausgelöst.

Außerdem wird durch die default lock timeout-Eigenschaft, die als Teil der Verbindungszeichenfolge angegeben wird, die Wartezeit einer Transaktion bestimmt. Wenn jedoch eine Verbindung in einem TransactionScope eingetragen ist, wird diese Eigenschaft durch die TimeSpan von TransactionScope überschrieben. Wenn z. B. die Verbindungszeichenfolge den default lock timeout-Wert ''1000 ms'' enthält und die Verbindung mit 100 ms in einem TransactionScope eingetragen ist, dauert die Umgebungstransaktion statt 1000 ms nur 100 ms. Soll die Anwendung längere Transaktionstimeouts verwenden und Befehle in einem TransactionScope ausführen, müssen Sie den Timeoutwert sowohl in der Verbindungszeichenfolge als auch in der TimeSpan für den TransactionScope angeben.

Hinweis

Der default lock timeou-Wert ist standardmäßig auf 2000 ms festgelegt und der TransactionScope-Wert auf 1 Minute.

Siehe auch

Konzepte

Transaktionen (SQL Server Compact)

Sperren (SQL Server Compact)

Cursor (SQL Server Compact)