使用快照隔离功能,SQL Server数据库写入速度是否变慢?


8

我的系统中发生了很多僵局。

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

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

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

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

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


2
启用快照隔离时需要注意的一个问题:行大小将增加14个字节。确保已计划增加容量并进行任何页面拆分。
StanleyJohns

Answers:


14

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

不,这是不正确的。它某种程度上意味着存在版本控制的写入具有更高的延迟,因为每次写入都必须接触磁盘(对于tempdb),这是不正确的。写入tempdb也是写入“缓存”。唯一的“等待”发生在必须加固日志的COMMIT时间。确实,必须对数据库日志和tempdb日志进行版本控制,但这并不一定意味着更高的延迟(IO应该在不同的存储路径上并行运行,tempdb与经常使用的LDF存储在单独的驱动器上,对?)。有关完整的解释,请阅读工作原理:Bob Dorr的SQL Server I / O演示文稿我真的希望您的DBA对此理解要比您在此处传达的要好。

正如我在您的另一篇文章中提到的那样:快照对于INSERTS来说没有任何成本,并且可以轻松地减少更新和删除的成本。行版本控制资源使用说明了权衡。此时,您可能应该在实际的工作负载下进行测试,这是正确评估将遭受的影响的唯一方法。


4
顺便说一句,BTW考虑一下:您或您的DBA在过去7年中曾经使用过Triggers吗?由于SQL 2005触发器是使用后台快照实现的。如果您曾经使用在线索引重建或MARS,也是如此。如果您现在sys.dm_db_file_space_usage在生产服务器上检查该怎么办。如果version_store_reserved_page_count非零,则您已经在使用versionstore
Remus Rusanu '04年

我不认为tempdb日志不必得到加强,因为重做从未在tempdb上运行。因此开销甚至更低。
usr

0

我相信如果遇到僵局,应用程序中还会存在其他问题。快照隔离通常有助于减少等待锁,但是死锁的根源通常是应用程序中不同的访问方法,应通过遵循一致的模式来防止死锁。关于死锁的讨论很复杂,有很多资源专门讨论死锁。

您的DBA可以将隔离级别更改为快照,这是正确的,因为它会增加tempDB的负载。我建议总体上进行快照隔离,但是我认为这只是解决僵局的一小部分。您可能会遇到写脏的情况,其中一个事务更新行A,然后更新B,另一事务更新行B,然后更新A。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.