使用快照隔离
适用于:SQL Server Azure SQL 数据库 Azure SQL 托管实例 Azure Synapse Analytics Analytics Platform System (PDW)
SQL Server 2005 (9.x) 引入了旨在增强联机事务处理 (OLTP) 应用程序的并发处理能力的新“快照”隔离级别。 在早期版本的 SQL Server 中,并发仅基于锁定,对于某些应用程序,这可能导致阻塞和死锁问题。 快照隔离依赖于行版本控制的增强功能,旨在通过避免读取器-编写器阻塞情况来提高性能。
在快照隔离下启动的事务读取该事务启动时的数据库快照。 在快照事务上下文中打开的键集、动态和静态服务器游标的行为与在可序列化事务中打开的静态游标的行为非常相似。 但是,当在快照隔离级别下打开游标时,则不会取得锁。 这种情况会减少服务器的阻塞。
适用于 SQL Server 的 OLE DB 驱动程序
OLE DB Driver for SQL Server 的增强功能利用 SQL Server 2005 (9.x) 中引入的快照隔离。 这些增强功能包括对 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 设置的值相同。 |
注意
如果在使用 SQL Server 之前的 SQL Server 2005 (9.x) 版本时设置 DBPROPVAL_TI_SNAPSHOT,将发生 DB_S_ERRORSOCCURRED 或 DB_E_ERRORSOCCURRED 错误。
有关如何在事务中支持快照隔离的信息,请参阅支持本地事务。