SQL Server 数据库写入快照隔离是否会变慢?

Vac*_*ano 8 sql-server-2008 sql-server sql-server-2008-r2 snapshot isolation-level

我的系统中有很多死锁。

我想使用快照隔离来修复它们,但我的 DBA 对此有所保留。

他的担忧之一是快照隔离会减慢写入速度。这是因为它必须先写入缓存,然后写入 TempDb(行版本),然后才能返回给调用者。

“正常”写入可以只写入缓存然后完成。

这是行版本控制的工作方式吗?或者比这更复杂?它是否以某种方式并行执行这些操作?

还是快照隔离的写入速度较慢?

Rem*_*anu 14

是因为它必须先写入缓存,然后写入 TempDb(行版本),然后才能返回给调用者。

不,这是不正确的。它以某种方式暗示存在版本控制的写入具有更高的延迟,因为每次写入都必须接触磁盘(对于 tempdb),这是不正确的。写入 tempdb 也是写入“缓存”。当必须强化日志时,唯一的“等待”发生在 COMMIT 时间。确实,通过版本控制 DB 日志和 tempdb 日志都必须被强化,但这并不一定意味着更高的延迟(IO 应该在不同的存储路径上并行,tempdb 存储在与您经常使用的 LDF 不同的驱动器上,对?)。要获得完整的解释,请阅读工作原理:Bob Dorr 的 SQL Server I/O 演示文稿我真的希望您的 DBA 比您在此处传达的内容更能理解这一点。

正如我在您的另一篇文章中提到的:快照没有插入成本,更新和删除的成本可以轻松减轻。行版本控制资源使用解释了权衡。此时,您可能应该使用真实的工作负载进行测试,这是正确评估将经历的影响的唯一方法。

  • 顺便说一下:在过去的 7 年中,您或您的 DBA 是否使用过触发器?由于 SQL 2005 触发器是在幕后使用快照实现的。如果您曾经使用过在线索引重建或 [MARS](http://msdn.microsoft.com/en-us/library/ms131686.aspx),情况也是如此。如果您现在在生产服务器上检查 [`sys.dm_db_file_space_usage`](http://msdn.microsoft.com/en-us/library/ms174412%28v=sql.110%29.aspx) 怎么样。如果`version_store_reserved_pa​​ge_count` 不为零*您已经在使用版本存储*。 (4认同)