关闭

Oralce和Innodb MVCC关键机制

91人阅读 评论(0) 收藏 举报

cleanout:

  • 设置csc
  • 释放空间

csc:进行Cleanout时的snapSCN。理解CSC的含义对理解整个多版本协议至关重要:

  1. 当前页面上所有的活跃ITS(包括FastCleanout在内)的提交SCN一定大于CSC;
  2. 当前页面上所有大于CSC的事务所做的更新都仍然处于“活跃的”状态,
    • 项目录未被重用
    • 空间未被回收
  3. 当前页面上所有小于CSC的事务所做的更新都已丢失。

  • its被重用后的可见性判断
  • 消耗空间时,判断空闲空间是否可用,7K/8K问题
获取CR页面时:
  • 只读事务只要CR_SCN满足条件
  • 如果是之前的CR页面有当前事务构造,则判断ula是否满足要求,满足则可使用,否则无法使用。本事务的更新已经被回滚
  • 如果仅回滚了一个活跃事务,而且回滚的不是当前事务,则可直接使用,否则无法使用。本事务可能被回滚了。
control scn:最近被重用事务槽的提交scn
  • 回滚事务表前,先判断control scn,因为其为所有被重用事务槽提交scn的上线
snapshot too old:
  1. 获取行的事务状态时,如果lock指针失效,当前scn小于csc
  2. 如果事务状态为upper bound,当前scn小于upper bound scn
  3. 如果undo block被重用,则无法回滚。
串行化错误:
  • 更新行的its已经被重用或者需要消耗空间时,而且当前事务snapshot_scn小于csc时,无法判断可见性。
  • 更新行的commit scn大于当前snapshot scn
  • 更新行的upper bound scn大于当前snapshot scn

Oracle CR页面的优势:加锁时,如果当前页面持有S锁,则直接clone,而不用等待锁释放

  • 扫描过程中可长期持有S锁,避免扫描过程中频繁Latch页面或者构造CR页面
  • 回刷页面时可持有S锁,避免回刷页面时的copy或者等待
  • 索引扫描与SMO可并行化

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:4904次
    • 积分:126
    • 等级:
    • 排名:千里之外
    • 原创:7篇
    • 转载:4篇
    • 译文:0篇
    • 评论:0条