• Postgres中表和元组的组织方式


    PG version 9.5.3

    PG中四种堆文件:

    • 普通堆
    • 临时堆
    • 序列堆
    • TOAST表

    PageHeaderData长度为24(截图为8.4版本,20字节)个字节包含的内容如下:

    • 空闲空间的起始和结束位置
    • Special space的开始位置
    • 项指针开始的位置
    • 标志信息,是否存在空闲指针,是否所以元组可见

    LinpItemIdData类型的数组

    Lp_off是元组在文件中的偏移量

    Lp_flags是元组的状态

    Lp_len是元组的长度

    Freespace是值未分配的空间,新插入的元组和对应的linp都会从这部分空间来分配

    linp从freespace的头开始分配,新的元组从尾部开始分配

    Special space

    特殊的空间,主要是用来存储跟索引方法相关的数据,不同的索引方法在special space

    存放的不同的数据。

    TUPLE

    元组中不单单存储元组数据还存储了元组的头数据(HeapTupleHeaderData)

    1. t_choice具有2个成员的联合类型:
      • T_heap 用于记录对元组执行插入/删除操作事物ID和命令ID,这些信息主要用于并发

          控制是检查元组对事物的可见性

      • T_datum一个新的元组在内存中形成的时候,我们不关心事物的可见性,因此在t_choice中需要用DatumTupleFields结构来记录元组的长度等信息,把内存的数据写入到表文件的时候,需要在元组中记录事物和命令ID,因此会把t_choice所占的内存转换成HeapTupleFields结构并且填充响应数据后再进行元组的插入。
    1. T_ctid用于记录当前元组或者新元组的物理位置,块号和块内偏移量,例如(0,1)第一个块内的第一个linp,若tuple被跟新,那么就记录新版本的物理位置
    2. T_infomask2使用其低11位标识当前tuple的attribute的个数,其他位用于HOT以及tuple可见性的标志位
    3. T_infomask用于标识tuple当前的状态,比如是否有OID,是否空的字段,t_infomask每一位代表一种状态,总共16种。

    T_hoff标识tuple中的头的大小

    T_bits[]用来标记该tuple中那些字段是空的

  • 相关阅读:
    redis 系列27 Cluster高可用 (2)
    redis 系列26 Cluster高可用 (1)
    redis 系列25 哨兵Sentinel (高可用演示 下)
    redis 系列24 哨兵Sentinel (中)
    redis 系列23 哨兵Sentinel (上)
    (网页)jQuery判断checkbox是否选中的方法
    (后端)swagger
    (其他)2018下半年目标
    (后端)Sql Server日期查询-SQL查询今天、昨天、7天内、30天(转)
    (网页)HTML中INPUT type="date"标签如何赋值注意问题(转)
  • 原文地址:https://www.cnblogs.com/sangli/p/6404771.html
Copyright © 2020-2023  润新知