swa*_*eck 6 sql-server-2005 sql-server isolation-level
我开始解决tempdb
我们在 SQL Server 2005 企业版上遇到的问题。开发人员收到tempdb
空间不足的错误。从技术上讲,错误是:
访问数据库 'dbname' 中的表 'dbo.inserted' 中的版本化行时,事务中止。未找到请求的版本化行。您的 tempdb 可能空间不足。请参考 BOL 如何配置 tempdb 进行版本控制
我查看了数据库配置sys.databases
,发现了以下设置:
snapshot_isolation_state: 0
snapshot_isolation_state_desc: OFF
is_read_committed_snapshot_on: 1
Run Code Online (Sandbox Code Playgroud)
我在BOL 中查找了这意味着什么,主要信息如下:
snapshot_isolation_state
允许快照隔离事务的状态,由 ALLOW_SNAPSHOT_ISOLATION 选项设置:
0 = 快照隔离状态为关闭(默认)。不允许快照隔离。
1 = 快照隔离状态开启。允许快照隔离。
2 = 快照隔离状态正在转换为关闭状态。所有事务都有其修改版本。无法使用快照隔离启动新事务。数据库保持转换为 OFF 状态,直到运行 ALTER DATABASE 时处于活动状态的所有事务都可以完成。
3 = 快照隔离状态正在转换为 ON 状态。新的交易有他们的修改版本。在快照隔离状态变为 1 (ON) 之前,事务无法使用快照隔离。数据库将保持转换到 ON 状态,直到可以完成运行 ALTER DATABASE 时处于活动状态的所有更新事务。
snapshot_isolation_state_desc
允许快照隔离事务的状态描述,由 ALLOW_SNAPSHOT_ISOLATION 选项设置:
- 离开
- 在
- IN_TRANSITION_TO_ON
- IN_TRANSITION_TO_OFF
is_read_committed_snapshot_on
1 = READ_COMMITTED_SNAPSHOT 选项为 ON。read-committed 隔离级别下的读操作基于快照扫描,不获取锁。
0 = READ_COMMITTED_SNAPSHOT 选项关闭(默认)。read-committed 隔离级别下的读操作使用共享锁。
如果我正确理解这一点,snapshot_isolation_state
则关闭且不允许。但是,1 onis_read_committed_snapshot_on
表示数据库正在使用快照隔离。如果不允许,这怎么可能?
作为@AlexKuznetsov指出,SNAPSHOT
和READ_COMMITTED_SNAPSHOT
是两个不同的隔离级别。因此,snapshot_isolation_state
表示前者,而is_read_committed_snapshot_on
后者。以下是我发现的一些评论,总结了两者之间的差异:
READ COMMITTED SNAPSHOT 执行乐观读取和悲观写入。相比之下,SNAPSHOT 执行乐观读取和乐观写入。
和 ...
[READ_COMMITTED_SNAPSHOT] 与 SNAPSHOT 隔离级别的不同之处在于,它不是向读取器提供事务开始时可用的行的最后提交版本(SNAPSHOT ISOLATION),而是读取器获取在以下情况下可用的行的最后提交版本该声明开始(READ_COMMITTED_SNAPSHOT)。
~ Uri Dimant(重点是我的),在这里
归档时间: |
|
查看次数: |
5562 次 |
最近记录: |