PostgreSQL中page页结构源码解析

2015-07-16 12:08:17 · 作者: · 浏览: 2

PostgreSQL中page页结构源码解析


在PG中,磁盘存储和内存中的最小管理单位都是page,也是通常所说的block。一般PG页的大小为8K,在源码编译时可以设置。此后都不可更改,因为许多PG内存结构设计都是以此为基础的。


在一个page中,表的记录是从page的底部开始存储,然后慢慢向上涨。Page结构图如下:



上图为一个page的结构,主要由5个部分组成:


Page Header:为页头,主要存储LSN,page中空闲空间的开始offset和结束offset等。下面再展开讲。


ItemId data:是page中表记录的索引条目。一个索引条目4个字节,由两部分组成:此记录在page中的offset和记录长度length。


Free space:是此page中剩余可用的空间,不算标记为delete后的空间;是指完全没有被使用的空间,也相当于page中没有被分配的空间。


Item:就是指表实际存储的记录。


Special space: 存储索引访问方法(AM: Access Method)信息,不同的索引访问方法,内容不一样。但如果是表的page,那么这里是空的,没有任何信息。


源码在src/backend/storage/page/bufpage.c中,以下为Page的初始化:



Page header 24个字节说明如下:



PageHeader 源码定义如下:



其中,PageXLogRecPtr为一个结构体,64位。记录xlog信息的原因:


保证buffer manger WAL原则,即写日志先于写数据


脏块checkpoint时,日志先刷出到disk



------------------------------------华丽丽的分割线------------------------------------


------------------------------------华丽丽的分割线------------------------------------