Praca z izolacją snapshot w natywnym kliencie SQL Server

Dotyczy:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

Important

Klient natywny SQL Servera (SNAC) nie jest dostarczany z:

  • SQL Server 2022 (16.x) i nowsze wersje
  • SQL Server Management Studio 19 i nowsze wersje

Program SQL Server Native Client (SQLNCLI lub SQLNCLI11) oraz starszy dostawca microsoft OLE DB dla programu SQL Server (SQLOLEDB) nie są zalecane w przypadku tworzenia nowych aplikacji.

W przypadku nowych projektów użyj jednego z następujących sterowników:

W przypadku programu SQLNCLI dostarczanego jako składnik aparatu bazy danych programu SQL Server (wersje 2012–2019), proszę sprawdzić wyjątek cyklu wsparcia .

SQL Server 2005 (9.x) wprowadził nowy poziom izolacji "migawki", mający na celu zwiększenie współbieżności dla aplikacji przetwarzania transakcji online (OLTP). We wcześniejszych wersjach SQL Server współbieg opierał się wyłącznie na blokowaniu, co może powodować problemy z blokowaniem i martwym blokowaniem w niektórych aplikacjach. Izolacja migawek zależy od ulepszeń wersjonowania wierszy i ma na celu poprawę wydajności poprzez unikanie scenariuszy blokowania przez czytelnika-autora.

Transakcje rozpoczynające się w izolacji migawki odczytują migawkę bazy danych w momencie rozpoczęcia transakcji. Jednym z efektów tego jest to, że kursory serwera zestawu kluczy, dynamicznego i statycznego, po otwarciu w kontekście transakcji migawkowej, zachowują się podobnie jak statyczne kursory otwierane w transakcjach serializowalnych. Jednak gdy kursory są otwierane w snapshot, nie są zabierane blokady na poziomie izolacji, co może zmniejszyć blokowanie na serwerze.

Dostawca OLE DB programu SQL Server Native Client

Dostawca natywnego klienta OLE DB SQL Server posiada ulepszenia wykorzystujące izolację snapshot wprowadzoną w SQL Server 2005 (9.x). Te ulepszenia obejmują zmiany w zestawach DBPROPSET_DATASOURCEINFO i DBPROPSET_SESSION.

DBPROPSET_DATASOURCEINFO

Zbiór właściwości DBPROPSET_DATASOURCEINFO został zmieniony, aby wskazywać, że poziom izolacji migawki jest wspierany przez dodanie wartości DBPROPVAL_TI_SNAPSHOT używanej w DBPROP_SUPPORTEDTXNISOLEVELS właściwości. Ta nowa wartość oznacza, że poziom izolacji migawki jest obsługiwany niezależnie od tego, czy wersjonowanie zostało włączone w bazie danych. Poniżej znajduje się lista wartości DBPROP_SUPPORTEDTXNISOLEVELS:

Identyfikator nieruchomości Description
DBPROP_SUPPORTEDTXNISOLEVELS Typ: VT_I4

R/W: Tylko do czytania

Opis: Bitmaska określająca obsługiwane poziomy izolacji transakcji. Kombinacja zero lub więcej z następujących elementów:

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

Zbiór właściwości DBPROPSET_SESSION został zmieniony, aby wskazywać, że poziom izolacji migawki jest wspierany przez dodanie wartości DBPROPVAL_TI_SNAPSHOT używanej w DBPROP_SESS_AUTOCOMMITISOLEVELS właściwości. Ta nowa wartość oznacza, że poziom izolacji migawki jest obsługiwany niezależnie od tego, czy wersjonowanie zostało włączone w bazie danych. Poniżej znajduje się lista wartości DBPROP_SESS_AUTOCOMMITISOLEVELS:

Identyfikator nieruchomości Description
DBPROP_SESS_AUTOCOMMITISOLEVELS Typ: VT_I4

R/W: Tylko do czytania

Opis: Określa bitmaskę wskazującą poziom izolacji transakcji w trybie automatycznego zatwierdzania. Wartości, które można ustawić w tej masce bitowej, są takie same jak te, które można ustawić dla DBPROP_SUPPORTEDTXNISOLEVELS.

Uwaga / Notatka

Błędy DB_S_ERRORSOCCURRED lub DB_E_ERRORSOCCURRED wystąpią, jeśli DBPROPVAL_TI_SNAPSHOT jest ustawione przy użyciu wersji SQL Server starszych niż SQL Server 2005 (9.x).

Aby uzyskać informacje o tym, jak izolacja migawek jest wspierana w transakcjach, zobacz Wsparcie Transakcji Lokalnych.

SQL Server Natywny Klienciski ODBC Driver

Sterownik ODBC dla natywnego klienta SQL Server zapewnia wsparcie dla izolacji migawek poprzez ulepszenia funkcji SQLSetConnectAttr i SQLGetInfo.

SQLSetConnectAttr

Funkcja SQLSetConnectAttr obsługuje teraz użycie atrybutu SQL_COPT_SS_TXN_ISOLATION. Ustawienie SQL_COPT_SS_TXN_ISOLATION na SQL_TXN_SS_SNAPSHOT oznacza, że transakcja zostanie przeprowadzona na poziomie izolacji snapshot.

SQLGetInfo

Funkcja SQLGetInfo obsługuje teraz wartość SQL_TXN_SS_SNAPSHOT dodaną do typu SQL_TXN_ISOLATION_OPTION informacji.

Aby uzyskać informacje o tym, jak izolacja snapshotów jest obsługiwana w transakcjach, zobacz Poziom Izolacji Transakcji kursora.