PostgreSQL中page页结构

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信息的原因:

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

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


总的来讲,PG中页的结构大体上Oracle的Block结构是比较类似的,都是采用向上涨的方式来存储记录。但是在小细节上还是分别比较大的。Oracle的Block中还有ITL等事务相关信息等。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/30088583/viewspace-1387177/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/30088583/viewspace-1387177/

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值