读取提交的快照隔离和事务

Posted

技术标签:

【中文标题】读取提交的快照隔离和事务【英文标题】:Read Committed Snapshot Isolation and Transactions 【发布时间】:2013-06-07 13:50:33 【问题描述】:

我正在考虑在我们的 SQL 2005 数据库上启用读取已提交快照隔离,以尝试获得一些性能。设置此隔离级别是否会影响所有查询,无论它们是否使用 BEGIN TRAN 和 COMMIT TRAN?根据 MSDN:

“启用快照隔离后,每个事务的更新行版本都会在 tempdb 中维护。”

我不清楚“事务”是指所有 sql 查询还是仅表示使用事务的查询。

【问题讨论】:

【参考方案1】:

每个(有用的)语句在事务中运行。如果在运行特定查询时没有打开的查询,则默认情况下 SQL Server 会打开一个,运行查询,然后提交它。这称为Autocommit mode。

可以更改此行为,使其不会自动执行第三步(提交)并使事务保持打开状态。这称为Implicit Transaction Mode。

【讨论】:

所以即使我的查询没有使用隐式事务,我也可以使用 RCSI?

以上是关于读取提交的快照隔离和事务的主要内容,如果未能解决你的问题,请参考以下文章

精通Java事务编程-弱隔离级别之快照隔离和可重复读

转:nolock的替代方案-提交读快照隔离[行版本控制]

读取提交的快照 VS 快照隔离级别

JavaEE——事务隔离和锁

精通Java事务编程-弱隔离级别之快照隔离和可重复读

事务的隔离级别是啥?