tempdb在读取提交的快照隔离下没有增长

时间:2019-04-14 19:18:15

标签: sql-server deadlock

为了纠正死锁(由索引视图引入),我试图在SQL Server中利用RCSI。我通过以下方式参与了此模式:

ALTER DATABASE MyDatabase SET READ_COMMITTED_SNAPSHOT ON
ALTER DATABASE MyDatabase SET ALLOW_SNAPSHOT_ISOLATION ON

并确认它是由设置的:

DBCC useroptions  

SELECT * FROM sys.databases 

我的数据库中有8个tempdb,它们设置为自动增长64 MB。吸收了数千条记录后,我看不到tempdbs有任何增长。根据文档,RCSI大量使用tempdb并大大增加了其大小。我希望看到tempdb有所增加。迹线1117、1118也为ON。但是,tempdb的大小没有增加。我尚未打开Tempddb数据库的允许快照隔离。

谢谢

2 个答案:

答案 0 :(得分:2)

  

根据文档,RCSI大量使用tempdb并大大增加了其大小。

RCSI有很多毫无根据的担心。并且INSERT仅在表上有触发器时才创建行版本。

答案 1 :(得分:1)

来自BOL

  

启用SNAPSHOT隔离级别后,每次更新一行时,SQL Server数据库引擎都会在tempdb中存储原始行的副本,并将事务序列号添加到该行。

这意味着如果要更新一行,则将在TempDB中放入一行,如果要更改或更新整个表,则将整个表放入TempDB中。因此,完全有可能您的特定工作负载不需要在TempDB中对大量数据进行版本控制。为了避免这个问题,我需要在大型更新期间大幅增加TempDB的大小(或关闭RSCI)。

question还讨论了使用TempDB时要考虑的许多事情。