物理:database cluseter——>tablespace——>file——>block
逻辑:database cluseter——>database——>schema——>object——>tuple

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字节
- 空闲空间
- 行数据
- 特殊数据:索引访问方法

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)文件管理空闲空间,每个数据表文件都会对应一个<oid>_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 文件使用二进制位图标识需要清理的数据块
网友评论