美文网首页
CMU 15445 15. TO + OCC + MVCC

CMU 15445 15. TO + OCC + MVCC

作者: 西部小笼包 | 来源:发表于2019-06-27 21:40 被阅读0次
image.png

时间戳排序(T / O)是一种乐观的并发控制协议类,其中DBMS假定事务冲突很少。 DBMS不是要求事务在允许读取/写入数据库对象之前获取锁,而是使用时间戳来确定事务的可序列化顺序。

大致思路是给每个事务一个时间戳


image.png

当事务要拿一个未来时间的object,它会abort或者重启。

我们看下读的规则。


image.png

写的规则


image.png

2个example

成功的例子


image.png
image.png

回滚的例子


image.png

thomas-write 规则


image.png
image.png

如果您不使用托马斯写入规则,则基本T / O协议会生成conflict serializable 的计划。 因为没有事务等待它不会有死锁。 但如果短事务不断引发冲突,那么长期事务就有可能出现饥饿。
它还是不可恢复的计划。 如果事务仅在所有读取或提交更改的事务之后提交,则可以恢复调度。 否则,DBMS无法保证事务读取将在从崩溃中恢复后将恢复的数据。


image.png

OCC

对于假设事务不会发生冲突的常见情况,OCC可能是更好的方法。
当冲突数量很少时,OCC运作良好。 这是当所有事务都是只读或当事务访问不相交的数据子集时。 如果数据库很大并且工作负载没有偏差,那么冲突的可能性很小,因此加锁是浪费的。

DBMS为每个事务创建一个私有工作区:

  • 所有修改都应用于私有工作区。
  • 将读取的任何对象复制到工作空间中。
  • 没有其他事务可以读取其私有工作空间中另一个事务所做的更改。

当事务提交时,DBMS会比较事务的工作空间写入集,以查看它是否与其他事务冲突。 如果没有冲突,则将写入集覆盖到“全局”数据库中


image.png image.png

验证阶段

这是DBMS检查事务是否与其他事务冲突的地方。 DBMS需要保证只允许可序列化的计划。 DBMS在进入验证阶段时分配事务时间戳。
Ti检查RW和WW冲突的其他事务,并确保所有冲突都是单向的(从旧事务到年轻事务)。 DBMS使用所有其他正在运行的事务检查提交事务的时间戳顺序

MVCC

核心特性是

Writers don’t block the readers. Readers don’t block the writers.

只读事务可以在不获取锁的情况下读取一致的快照。 时间戳用于确定可见性。
轻松支持DBMS可以在时间点快照上执行的时间旅行查询。
有四个重要的MVCC设计决策:
1.并发控制协议(T / O,OCC,2PL等)。
2.版本存储
3.垃圾收集
4.索引管理

版本存储

就是关于DBMS如何存储逻辑对象的不同物理版本。
DBMS使用元组的指针字段为每个逻辑元组创建一个版本链。 这允许DBMS在运行时查找特定事务可见的版本。 索引总是指向链的头部。 线程遍历链,直到找到可见的版本。 不同的存储方案确定每个版本的存储位置/内容。


image.png

APPEND ONLY

image.png

TIME TRAVEL

image.png
image.png
image.png
image.png

DELTA STORAGE

image.png
image.png
image.png
image.png

垃圾回收

DBMS需要随着时间的推移从数据库中删除可回收的物理版本。
→DBMS中没有活动的txn可以“看到”该版本(SI)。
→版本是由中止的txn创建的。

image.png

方法#1:元组级垃圾收集 - 通过直接检查元组查找旧版本
•Background Vacuuming:单独的线程定期扫描表并查找可回收的版本,适用于任何版本的存储方案。


image.png
image.png

•协作清理:工作线程在遍历版本链时识别可回收的版本。 仅适用于OLD2NEW。


image.png

方法#2:事务级别 - 每个事务都跟踪自己的读/写集。 当事务完成时,垃圾收集器可以使用它来识别要回收的元组。 DBMS确定完成的事务创建的所有版本何时不再可见。

image.png

相关文章

  • CMU 15445 15. TO + OCC + MVCC

    时间戳排序(T / O)是一种乐观的并发控制协议类,其中DBMS假定事务冲突很少。 DBMS不是要求事务在允许读取...

  • CMU 15445 6.B+树 + homework2

    https://15445.courses.cs.cmu.edu/fall2018/slides/07-trees...

  • CMU 15445 7.skip list + radix tr

    https://15445.courses.cs.cmu.edu/fall2018/notes/08-trees2...

  • CMU 15445 10. 连接

    为什么我们需要连接? 我们规范化关系数据库中的表,以避免不必要的信息重复。我们使用join操作来重建原始元组而不会...

  • CMU 15445 Project 4 实现Logging An

    LAB 第一个TASK的实现目标,就是去记录LOG。但是不是每次写LOG都会直接去落盘,也是会先CACHE在一个B...

  • CMU 15445 12. 并发模型

    背景 所有并行执行查询的DBMS都提供了以下几个好处: 提高吞吐量和延迟性能。 提高可用性。 可能降低总体拥有成本...

  • CMU 15445 11. Query 优化

    SQL是声明性的。 这意味着用户告诉DBMS他们想要什么答案,而不是如何得到答案。 因此,DBMS需要将SQL语句...

  • CMU 15445 8. Query plan

    DBMS将SQL语句转换为查询计划。 Operator被安排在Tree上。 数据从叶子流向根。 树中根节点的输出是...

  • CMU 15445 13.并发控制理论

    ACID 子性:一个事务的所有的操作要么全发生,要么全不发生一致性:如果在事务的开始,数据库的状态是一致的,那么可...

  • CMU 15445 Project 3 实现Lock Manag

    此LAB 按照2017的要求 做到后面发现因为缺少极多信息,比如API的框架,一些CONFIG的参数。我无法完成2...

网友评论

      本文标题:CMU 15445 15. TO + OCC + MVCC

      本文链接:https://www.haomeiwen.com/subject/lihrcctx.html