我开始对SQLServer2005EnterpriseEdition上的tempdb问题进行故障排除。开发人员收到了一个错误,即tempdb已超出空间。从技术上讲,错误是:
当访问数据库“dbname”中表“dbo.inserted”中有版本的行时,事务被中止。找不到请求的版本行。你的诱饵可能没空间了。请参考BOL,了解如何为版本控制配置tempdb。
我查看了sys.databases中的数据库配置,发现了以下设置:
snapshot_isolation_state: 0
snapshot_isolation_state_desc: OFF
is_read_committed_snapshot_on: 1我在泡泡中查找了这意味着什么,突出的信息如下:
允许快照隔离事务的
snapshot_isolation_state状态,如ALLOW_SNAPSHOT_ISOLATION选项设置的:0=快照隔离状态为OFF (默认)。不允许快照隔离。1=快照隔离状态开启。允许快照隔离。2=快照隔离状态处于过渡到关闭状态。所有事务都有它们的修改版本。无法使用快照隔离启动新事务。直到运行ALTER时活动的所有事务都可以完成为止,数据库仍处于向OFF状态的过渡状态。3=快照隔离状态正在向ON状态过渡。新事务具有版本化修改。在快照隔离状态变为1 (ON)之前,事务不能使用快照隔离。直到运行ALTER时处于活动状态的所有更新事务都可以完成为止,数据库仍处于向ON状态的过渡状态。允许使用snapshot_isolation_state_desc描述快照-隔离事务的状态,如ALLOW_SNAPSHOT_ISOLATION选项设置的那样:
is_read_committed_snapshot_on 1= READ_COMMITTED_SNAPSHOT选项已打开。读提交隔离级别下的读取操作基于快照扫描,不获取锁。0= READ_COMMITTED_SNAPSHOT选项为OFF (默认)。读提交隔离级别下的读取操作使用共享锁。
如果我正确地理解了这一点,snapshot_isolation_state是关闭和不允许的。但是,is_read_committed_snapshot_on上的1表示数据库使用快照隔离。如果不允许,这怎么可能?
发布于 2013-06-14 19:15:31
正如@AlexKuznetsov所指出的,SNAPSHOT和READ_COMMITTED_SNAPSHOT是两个不同的隔离级别。因此,snapshot_isolation_state表示前者,而is_read_committed_snapshot_on表示后者。以下是我发现的几点评论,总结了两者之间的差异:
还有..。
朗读_已承诺_快照与快照隔离级别的不同之处在于,读取器没有向读取器提供事务启动时可用的行的最后提交版本(快照隔离),而是获得语句启动时可用的行的最后提交版本(READ_COMMITTED_SNAPSHOT)。~乌里迪曼特 (重点雷),这里
https://dba.stackexchange.com/questions/44557
复制相似问题