试图更好地理解基于行版本控制的事务隔离 - RCSI(读取提交的快照隔离和快照) - 在 SQL Server 中...
MSDN 在线文章“选择基于行版本控制的隔离级别”指出:
这与 Kimberly L. Tripp、Neal Graves 的“ SQL Server 2005 Row Versioning-Based Transaction Isolation ”中的陈述相矛盾:
那么,为什么 RCSI 使用更少(或相同)的空间?
更新:
可能我把最初的问题表述得很糟糕,但这意味着对这两个相互矛盾的“理论”都有 RTFM 解释和确认,我想明白:
哪个是正确的?
为什么一个真的是正确的?
而
为什么不是另一个真正正确的(为什么是另一种错?)?
sql-server transaction tempdb tempdb-version-store snapshot-isolation
我们为一些 SQL Server 2005 数据库启用了“READ_COMMITTED_SNAPSHOT”。
现在我们不时看到我们的 TempDB 正在填满硬盘,我们怀疑版本存储是罪魁祸首。
我们监视 TempDB 的使用情况sys.dm_db_file_space_usage,一旦我们看到版本存储在增加(如 所报告的那样 version_store_reserved_page_count),我们希望识别正在使用版本存储的事务。
我正在使用以下语句来查找使用版本存储的事务:
SELECT db_name(spu.database_id) as database_name,
at.transaction_begin_time as begin_time,
case
when at.transaction_state in (0,1) then 'init'
when at.transaction_state = 2 then 'active'
when at.transaction_state = 3 then 'ended'
when at.transaction_state = 4 then 'committing'
when at.transaction_state = 6 then 'comitted'
when at.transaction_state = 7 then 'rolling back'
when at.transaction_state = 6 then 'rolled back'
else 'other'
end as transaction_state,
ast.elapsed_time_seconds as elapsed_seconds,
ses.program_name, …Run Code Online (Sandbox Code Playgroud)