Condividi tramite


Uso dell'isolamento dello snapshot

SQL Server 2005 ha introdotto un nuovo livello di isolamento "snapshot" progettato per migliorare la concorrenza per le applicazioni OLTP (Online Transaction Processing). Nelle versioni precedenti di SQL Server, la concorrenza era basata esclusivamente sul blocco, che può causare problemi di blocco e deadlock per alcune applicazioni. L'isolamento dello snapshot dipende dai miglioramenti apportati al controllo delle versioni delle righe ed è progettato per migliorare le prestazioni evitando scenari di blocco del writer di lettura.

Le transazioni che iniziano in isolamento dello snapshot leggono uno snapshot del database al momento dell'avvio della transazione. Un risultato è che keyset, cursori server dinamici e statici, quando aperti all'interno di un contesto di transazione snapshot, si comportano in modo molto simile ai cursori statici aperti all'interno di transazioni serializzabili. Tuttavia, quando i cursori vengono aperti con i blocchi a livello di isolamento dello snapshot non vengono acquisiti, riducendo il blocco sul server.

Provider OLE DB di SQL Server Native Client

Il provider OLE DB di SQL Server Native Client offre miglioramenti che sfruttano l'isolamento dello snapshot introdotto in SQL Server 2005. Questi miglioramenti includono le modifiche apportate ai set di proprietà DBPROPSET_DATASOURCEINFO e DBPROPSET_SESSION.

DBPROPSET_DATASOURCEINFO

Il set di proprietà DBPROPSET_DATASOURCEINFO è stato modificato per indicare che il livello di isolamento dello snapshot è supportato dall'aggiunta del valore DBPROPVAL_TI_SNAPSHOT utilizzato nella proprietà DBPROP_SUPPORTEDTXNISOLEVELS. Questo nuovo valore indica che il livello di isolamento dello snapshot è supportato se il controllo delle versioni è stato abilitato o meno nel database. Di seguito è riportato un elenco dei valori DBPROP_SUPPORTEDTXNISOLEVELS:

ID proprietà Descrizione
Livelli di isolamento delle transazioni supportati da DBPROP Tipo: VT_I4

L/S: Sola lettura

Descrizione: maschera di bit che specifica i livelli di isolamento delle transazioni supportati. Combinazione di zero o più delle opzioni seguenti:

- 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

Il set di proprietà DBPROPSET_SESSION è stato modificato per indicare che il livello di isolamento dello snapshot è supportato dall'aggiunta del valore DBPROPVAL_TI_SNAPSHOT utilizzato nella proprietà DBPROP_SESS_AUTOCOMMITISOLEVELS. Questo nuovo valore indica che il livello di isolamento dello snapshot è supportato se il controllo delle versioni è stato abilitato o meno nel database. Di seguito è riportato un elenco dei valori DBPROP_SESS_AUTOCOMMITISOLEVELS:

ID proprietà Descrizione
DBPROP_SESS_LIVELLI_DI_ISOLAMENTO_AUTOCOMMIT Tipo: VT_I4

L/S: Sola lettura

Descrizione: specifica una maschera di bit che indica il livello di isolamento della transazione in modalità commit automatico. I valori che è possibile impostare in questa maschera di bit sono uguali a quelli che possono essere impostati per DBPROP_SUPPORTEDTXNISOLEVELS.

Annotazioni

Gli errori DB_S_ERRORSOCCURRED o DB_E_ERRORSOCCURRED si verificheranno se DBPROPVAL_TI_SNAPSHOT viene impostato quando si usano versioni di SQL Server precedenti a SQL Server 2005.

Per informazioni sul supporto dell'isolamento dello snapshot nelle transazioni, vedere Supporto delle transazioni locali.

Driver ODBC di SQL Server Native Client

Il driver ODBC di SQL Server Native Client offre supporto per l'isolamento dello snapshot anche se sono stati apportati miglioramenti alle funzioni SQLSetConnectAttr e SQLGetInfo .

SQLSetConnectAttr

La funzione SQLSetConnectAttr supporta ora l'uso dell'attributo SQL_COPT_SS_TXN_ISOLATION. L'impostazione di SQL_COPT_SS_TXN_ISOLATION su SQL_TXN_SS_SNAPSHOT indica che la transazione verrà eseguita sotto il livello di isolamento dello snapshot.

SQLGetInfo

La funzione SQLGetInfo supporta ora il valore SQL_TXN_SS_SNAPSHOT aggiunto al tipo di informazioni SQL_TXN_ISOLATION_OPTION.

Per informazioni sul supporto dell'isolamento dello snapshot nelle transazioni, vedere Livello di isolamento delle transazioni cursori.

Vedere anche

Funzionalità di SQL Server Native Client
Proprietà e comportamenti dei set di righe