1
、知识准备
1
)
Tuple
格式头
HeapTupleHeaderData
!"
#$%&&'&((
)*+
)
其中
,
:存储的是产生这个元组的事务
,可能是
或者
语句
:存储的是删除或者锁定这个元组的事务
:包含
和
两个字段,分别存储创建这个元组的
和
删除这个元组的
#
:存储的是
$%&&'&((
命令的事务
-./(
主要就是通过
,
,
和
,
,
来唯
一定义一个元组(
,
,
和
,
实际上也是一个表的隐藏的
标记字段)。
2
)
Clog
-./(
在
(01
中维护事务的状态,持久化存储在
目录下,为了访问高
效,会在内存中维护一块共享内存用于缓存
(01
的内容。
-1
定义有四种事务状态:
2*3%4.%04.%&.4-30135.. 666
2*3%4.%04.%&.0''5 667
2*3%4.%04.%&.%8035 669
2*3%4.%04.%&..&80''5 66+
文件以页为单位。数组下标是事务
,参考
1.
这个函数。
数 组 内 容 是 事 务 状 态 , 每 个 事 务 状 态 占 用
9!
即 可 。 一 个 页 面
:;
, 可 以 存 储
:;:9<+9;
个事务状态。
!=
大小为
'>79: '>? 48=@79AA
,
初始化函数为
(01."
。启动时会从
读取事务状态加载到内存。系统
运行过程中,
#
会定时将不再使用的
文件清理。
3
)
Hint
在进行可见性判断时,需要获取事务的状态,即元组中
和
的状态,这些
事务状态保存在
(01
中,为加速获取事务状态的过程,
-./(
引入了
8
。
所有
8
,就是把事务状态直接记录在元组头中(
),避
免频繁访问
(01
,元组头中对应的标识位如下
,BC
评论