Oralce和Innodb MVCC关键机制

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可并行化

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值