9.物理层级结构

物理:database cluseter——>tablespace——>file——>block

逻辑:database cluseter——>database——>schema——>object——>tuple

1 (1).png

tablesapce

将不同的表放在不同目录下,通过文件系统的分离,优化存储空间和I/O吞吐
create tablespace tbs2 location '/home/postgres/tbs2';
create table t1 (id int) tablespace tbs2;
alter table t1 set tablespace tbs2;

database

同一cluster database下的数据库是独立的
create database db1 template template0 tablespace tbs1
缺省会以template1作为模板,template1可被修改。建完全干净的库可以template0为模板
tablespace会设置该库的缺省表空间

page

page又称block,内存里称buffer,是pg中I/O的最小单元
缺省大小8kB,可设置范围1~32KB,2^n
数据块结构:(pg tuple进入page是从后往前)

  • 块头:包括LSN、Checksum、空闲空间起止位置等
  • 行指针:包含偏移量和长度,占4字节
  • 空闲空间
  • 行数据
  • 特殊数据:索引访问方法
1 (2).png

tuple(row)

  • tuple头部包括
    • t_xmin
    • t_xmax
    • t_cid
    • t_xvc
    • t_xtid
    • t_infomask2
    • t_infomask
    • t_hoff

空闲空间管理(oid_fsm)

  • PostgreSQL使用Free Space Map(FSM)文件管理空闲空间,每个数据表文件都会对应一个_fsm文件
  • FSM 文件使用一个字节来记录一个数据块的空闲空间大小的范围,即0~255的值表示以 32 字节为间隔区间的空闲空间,该字节若为 N ,那么空闲空间范围为 N32~(N+1)32-1 ,若 N=3 ,那么空闲空间范围为 96~127
  • FSM 文件实际上是一个 3 层的 B TREE 的索引结构,用于快速空间检索

可见性映射文件(oid_vm)

  • 当数据被update/delete后,即使事务提交了也不会马上能够被重复利用,必须要进行空间回收(VACCUM)
  • PostgreSQL 使用可见性映射文件(Visibility Map File)标记需要清理的数据块,即 vm 结尾的文件
  • VM 文件使用二进制位图标识需要清理的数据块

你可能感兴趣的:(9.物理层级结构)