笔记草稿
chap1 介绍了一下基本的内容,但是很多都是后面讲的,能接受多少接受多少
chap2 感觉是需要介绍但是又很蛋疼的,根据 fndbs07,主要是早期做这套东西的时候,os 不能很好提供线程抽象。也就算拿到一个大概印象把
chap3 感觉需要先了解下 System-R optimizer,主要基本上是那套 + QGM?感觉还是比较绕。都做了基于代价的优化比较厉害。这一节有些地方印刷错了,很蛋疼。
chap4 没啥内容。话说 FDW是不是很好和HTAP一起画饼?
chap5 介绍比较细,不过没啥新意,不考虑 SSI 就是 MVTO,考虑的话带上 2PL,结构是 AppendOnly,O2N 这部分还是没有介绍的,残念。
chap6 比较有意思,用 free 和 id 系统来避免回环、VM/FSM 来处理空间(话说我感觉 VM 刷盘是不是要做到同一个事务?还是不用这么敏感?之后看看代码?)然后 GC实现了 Tuple Level GC,GC 会做freeze,并且把Tuple的空间回收,但是不会变更Header,也基本不会减小磁盘占用。有的时候是不会变更空间的,除非走到 Vacuum。Vacuum 会整个 rebuild index
chap7 比较混杂,涉及一些mvcc和存储有关的逻辑。PG采取了 O2N 的实现。在使用 HOT 的情况下,索引会走到 N2O链上(数据处在的 HeapPage 不同 的话,会分开来存)。还有一些不回表的逻辑,比较简单。
chap8 介绍了 PG的 bufferpool,比较 trivial
chap9 介绍的是 Log 系统。这里好像是只有redolog的。这点会限制事务层。系统为了原子写Page,会把 8K Page也落log。数据Log也以Page的形式组织。此外这里用wal的逻辑对备份恢复进行了支持(话说有没有 binlog?)