使用快照隔离
SQL Server 2005 引入了新的“快照”隔离级别,旨在增强联机事务处理 (OLTP) 应用程序的并发性。 在早期版本的 SQL Server 中,并发仅基于锁定,对于某些应用程序,这可能导致阻塞和死锁问题。 快照隔离依赖于行版本控制的增强功能,旨在通过避免读取器-编写器阻塞情况来提高性能。
在快照隔离下启动的事务读取该事务启动时的数据库快照。 一种结果是在快照事务上下文中打开的键集、动态和静态服务器游标的行为与在可序列化事务中打开的静态游标的行为非常相似。 但是,当在快照隔离级别下打开游标时,则不会取得锁,这会减少服务器的阻塞。
SQL Server Native Client OLE DB 访问接口
SQL Server Native Client OLE DB 访问接口具有利用 SQL Server 2005 中引入的快照隔离的增强功能。 这些增强功能包括对 DBPROPSET_DATASOURCEINFO 和 DBPROPSET_SESSION 属性集的更改。
DBPROPSET_DATASOURCEINFO
已更改 DBPROPSET_DATASOURCEINFO 属性集,以便指示通过添加在 DBPROP_SUPPORTEDTXNISOLEVELS 中使用的 DBPROPVAL_TI_SNAPSHOT 值来支持快照隔离级别。 此新值指示支持快照隔离级别,而不管是否对数据库启用了版本控制。 下面列出了 DBPROP_SUPPORTEDTXNISOLEVELS 值:
属性 ID | 说明 |
---|---|
DBPROP_SUPPORTEDTXNISOLEVELS | 类型:VT_I4 R/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
已更改 DBPROPSET_SESSION 属性集,以便指示通过添加在 DBPROP_SESS_AUTOCOMMITISOLEVELS 中使用的 DBPROPVAL_TI_SNAPSHOT 值来支持快照隔离级别。 此新值指示支持快照隔离级别,而不管是否对数据库启用了版本控制。 下面列出了 DBPROP_SESS_AUTOCOMMITISOLEVELS 值:
属性 ID | 说明 |
---|---|
DBPROP_SESS_AUTOCOMMITISOLEVELS | 类型:VT_I4 R/W:只读 说明:指定指示在自动提交模式下的事务隔离级别的位掩码。 可在此位掩码中设置的值与可针对 DBPROP_SUPPORTEDTXNISOLEVELS 设置的值相同。 |
注意
如果在使用早于 2005 SQL Server 的 SQL Server 版本时设置了DBPROPVAL_TI_SNAPSHOT,则会发生DB_S_ERRORSOCCURRED或DB_E_ERRORSOCCURRED错误。
有关如何在事务中支持快照隔离的信息,请参阅支持本地事务。
SQL Server Native Client ODBC 驱动程序
SQL Server Native Client ODBC 驱动程序通过对 SQLSetConnectAttr 和 SQLGetInfo 函数的增强功能来支持快照隔离。
SQLSetConnectAttr
SQLSetConnectAttr 函数现在支持使用 SQL_COPT_SS_TXN_ISOLATION 属性。 将 SQL_COPT_SS_TXN_ISOLATION 设置为 SQL_TXN_SS_SNAPSHOT 指示事务将在快照隔离级别下发生。
SQLGetInfo
SQLGetInfo 函数现在支持已添加到SQL_TXN_ISOLATION_OPTION信息类型的SQL_TXN_SS_SNAPSHOT值。
有关如何在事务中支持快照隔离的信息,请参阅游标事务隔离级别。