Freigeben über


Arbeiten mit Snapshotisolation

In SQL Server 2005 wurde eine neue Snapshotisolationsstufe eingeführt, die die Parallelität für OLTP-Anwendungen (Online Transaction Processing, Onlinetransaktionsverarbeitung) verbessern soll. In früheren Versionen von SQL Server basierte die Parallelität ausschließlich auf dem Sperren, was zu Blockierungs- und Deadlockproblemen bei einigen Anwendungen führen konnte. Die Snapshotisolation hängt von Verbesserungen der Zeilenversionsverwaltung ab und soll die Leistung durch Vermeidung von Leser-/Schreiberblockierungsszenarien erhöhen.

Transaktionen, die mit der Snapshotisolation gestartet werden, lesen einen Datenbanksnapshot zu dem Zeitpunkt, an dem die Transaktion gestartet wird. Eine Folge davon ist, dass sich keysetgesteuerte, dynamische und statische Servercursor, wenn sie innerhalb eines Snapshottransaktionskontexts geöffnet werden, ähnlich verhalten wie statische Cursor, die innerhalb serialisierbarer Transaktionen geöffnet werden. Wenn die Cursor unter der Snapshotisolationsstufe geöffnet werden, werden jedoch keine Sperren angenommen, was sich positiv auf die Blockierung des Servers auswirken kann.

Weitere Informationen zur Unterstützung von Snapshotisolation durch SQL Server finden Sie unter Grundlegendes zu zeilenversionsbasierten Isolationsstufen.

SQL Server Native Client OLE DB-Anbieter

Der SQL Server Native Client OLE DB-Anbieter verfügt über Erweiterungen, die die in SQL Server 2005 eingeführte Snapshotisolation nutzen. Diese Erweiterungen schließen Änderungen an den DBPROPSET_DATASOURCEINFO und DBPROPSET_SESSION-Eigenschaftsgruppen ein.

DBPROPSET_DATASOURCEINFO

Die DBPROPSET_DATASOURCEINFO-Eigenschaftsgruppe wurde geändert, um anzugeben, dass die Snapshotisolationsstufe vom hinzugefügten DBPROPVAL_TI_SNAPSHOT-Wert unterstützt wird, der in der DBPROP_SUPPORTEDTXNISOLEVELS-Eigenschaft verwendet wird. Dieser neue Wert gibt an, dass die Snapshotisolationsstufe unabhängig davon unterstützt wird, ob die Versionsverwaltung für die Datenbank aktiviert ist. Im Folgenden sind die DBPROP_SUPPORTEDTXNISOLEVELS-Werte aufgeführt:

Eigenschafts-ID

Beschreibung

DBPROP_SUPPORTEDTXNISOLEVELS

Typ: VT_I4

R/W: Schreibgeschützt

Beschreibung: Eine Bitmaske, die die unterstützten Transaktionsisolationsstufen angibt. Eine Kombination von null oder mehreren der folgenden Werte:

  • DBPROPVAL_TI_CHAOS

  • DBPROPVAL_TI_READUNCOMMITTED

  • DBPROPVAL_TI_BROWSE

  • DBPROPVAL_TI_CURSORSTABILITY

  • DBPROPVAL_TI_READCOMMITTED

  • DBPROPVAL_TI_REPEATABLEREAD

  • DBPROPVAL_TI_SERIALIZABLE

  • DBPROPVAL_TI_ISOLATED

  • DBPROPVAL_TI_SNAPSHOT

DBPROPSET_SESSION

Die DBPROPSET_SESSION-Eigenschaftsgruppe wurde geändert, um anzugeben, dass die Snapshotisolationsstufe vom hinzugefügten DBPROPVAL_TI_SNAPSHOT-Wert unterstützt wird, der in der DBPROP_SESS_AUTOCOMMITISOLEVELS-Eigenschaft verwendet wird. Dieser neue Wert gibt an, dass die Snapshotisolationsstufe unabhängig davon unterstützt wird, ob die Versionsverwaltung für die Datenbank aktiviert ist. Im Folgenden sind die DBPROP_SESS_AUTOCOMMITISOLEVELS-Werte aufgeführt:

Eigenschafts-ID

Beschreibung

DBPROP_SESS_AUTOCOMMITISOLEVELS

Typ: VT_I4

R/W: Schreibgeschützt

Beschreibung: Legt eine Bitmaske fest, die die Transaktionsisolationsstufe im Autocommit-Modus angibt. Die Werte, die in dieser Bitmaske festgelegt werden können, entsprechen den für DBPROP_SUPPORTEDTXNISOLEVELS möglichen Werten.

HinweisHinweis

Der Fehler DB_S_ERRORSOCCURRED oder DB_E_ERRORSOCCURRED tritt auf, wenn DBPROPVAL_TI_SNAPSHOT in Versionen von SQL Server vor SQL Server 2005 festgelegt wird.

Weitere Informationen dazu,wie die Snapshotisolation in Transaktionen unterstützt wird, finden Sie unter Unterstützen lokaler Transaktionen.

SQL Server Native Client ODBC-Treiber

Der SQL Server Native Client ODBC-Treiber bietet Unterstützung für die Snapshotisolation durch Erweiterungen der SQLSetConnectAttr-Funktion und der SQLGetInfo-Funktion.

SQLSetConnectAttr

Die SQLSetConnectAttr-Funktion unterstützt jetzt die Verwendung des SQL_COPT_SS_TXN_ISOLATION-Attributs. Durch Festlegen von SQL_COPT_SS_TXN_ISOLATION auf SQL_TXN_SS_SNAPSHOT wird angegeben, dass die Transaktion unter der Snapshotisolationsstufe ausgeführt wird.

SQLGetInfo

Die SQLGetInfo-Funktion unterstützt jetzt den SQL_TXN_SS_SNAPSHOT-Wert, der dem SQL_TXN_ISOLATION_OPTION-Infotyp hinzugefügt wurde.

Weitere Informationen dazu, wie die Snapshotisolation in Transaktionen unterstützt wird, finden Sie unter Transaktionsisolationsstufen von Cursorn.