Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2322639
  • 博文数量: 310
  • 博客积分: 6853
  • 博客等级: 准将
  • 技术积分: 2833
  • 用 户 组: 普通用户
  • 注册时间: 2005-08-04 16:41
文章分类

全部博文(310)

文章存档

2013年(17)

2012年(42)

2011年(76)

2010年(71)

2009年(99)

2007年(2)

2006年(1)

2005年(2)

分类: 数据库开发技术

2009-07-09 16:36:49

基于行版本控制的隔离级别的开销

确定使用基于行版本控制的隔离需要对比最小化锁定的并发好处与维护和读取行版本所需增加的资源使用量。考虑下列与启用用于快照和已提交读隔离级别的行版本控制关联的开销:

  • 当查询所需的版本变旧且必须扫描长版本链时,会影响读取性能。
  • tempdb 中维护行版本时,行版本控制会增加修改数据过程中的资源使用量。
  • 当 READ_COMMITTED_SNAPSHOT 或 ALLOW_SNAPSHOT_ISOLATION 数据库选项为 ON 时,更新和删除特定数据库的事务必须维护行版本,即使不存在使用基于行版本控制的隔离级别的事务。构造使用行版本的一致的数据快照包括系统资源(CPU 和内存),并可能生成 I/O 活动。由于记录版本存储在 tempdb 中,因此当更多的 tempdb 页可以存储在行版本控制的内存中时,性能会更好,发出的 I/O 数也会更少。
    ms188277.note(zh-cn,SQL.90).gif注意:
    通常,插入行不会生成行版本。但是,在某些情况下,INSERT 命令确实可以生成行版本。例如,如果在前一个删除的行版本(虚影记录)尚未截断时将行插入具有唯一索引的表中,则 INSERT 命令将生成行版本。

  • tempdb 必须具有足够的磁盘空间用于版本存储区。如果存在超长时间运行的事务,则更新事务在该时间内生成的所有版本都必须保留在 tempdb 中。如果 tempdb 运行空间不足,更新操作并不会失败,但使用行版本控制的读取操作可能会失败。
  • 行版本控制信息需要将 14 个字节添加到数据库行。
  • 由于维护行版本的工作,更新性能可能较低。在典型的 OLTP 工作负荷中,每个更新仅更改数据库中的一部分行。在这些系统中,与两个选项都为 OFF 的数据库相比,在选项为 ON 的数据库中更新的性能可能只低几个百分点。当在更新操作过程中更改更大量的数据时,版本更新的性能开销可能变高。
  • 数据读取器遍历版本链接列表时会引起其他开销。快照越旧,在快照隔离事务中访问快照的进程就越慢。
  • 由于更新操作的必需的冲突检测,某些使用快照隔离的更新事务可能必须回滚。在使用行版本控制的已提交读隔离下运行的事务不会生成更新冲突。

使用行版本控制的事务还有其他限制。有关详细信息,请参阅。


行版本的劣势:
1、In addition to requiring extra management to monitor the increased use of tempdb for the version store,
2、versioning slows the performance of update operations due to the extra work involved in maintaining old versions
Update operations will bear this cost, even if there are no current readers of the data。

可能的隐患:
并发更新的限制?
In addition, because the optimistic concurrency model of Snapshot isolation assumes (optimistically) that not many update conflicts will occur, you should not choose the Snapshot isolation level if you are expecting contention for updating the same data concurrently

阅读(1931) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~