0
Posted on Tuesday, September 13, 2016 by 醉·醉·鱼 and labeled under

拜读完 https://www.simple-talk.com/sql/t-sql-programming/row-versioning-concurrency-in-sql-server/,快快记录一些东西,方便以后回忆。
  1. READ_COMMITTED_SNAPSHOT 和 SNAPSHOT都是基于snapshot的隔离级别
  2. 两种机制都会复制数据一个version到tempdb
  3. 在物理存储上,每条数据都会增加长度为14bytes的pointer和XSN
  4. pointer会指向之前的version,之前的version又会指向更早的version,直到最早的version。有点想HEAP里出现page split一样。
  5. SNAPSHOT机制减少了lock,增加了tempdb开销,间接增加UPDATE和DELETE的代价
  6. READ_COMMITTED_SNAPSHOT 可以避免脏读。是statement level的snapshot isolation。第二次读是可以读到另外TRAN里提交的改动。
  7. SNAPSHOT 可以避免脏读,不可重复读和幻读。是transaction level的snapshot isolation。第二次读到的和第一次读到的一致。
  8. 由于基于version,reader和writer互不block,但是writer还是会block writer。
  9. 正是由于SNAPSHOT可以重复读,会导致UPDATE CONFLICT。即UPDATE的时候其他session已经提交了改动,这个时候就会UPDATE CONFLICT。
  10. 开启READ_COMMITTED_SNAPSHOT需要关闭所有ACTIVE SESSION。
  11. 开启READ_COMMITTED_SNAPSHOT需要将代码里面的NOLOCK抹掉,并默认为READ COMMITTED隔离级别。
0
Responses to ... 《Row Versioning Concurrency in SQL Server》笔记

Post a Comment