如何从零学习PostgreSQL Page结构

关注我们,获得更多资源

640?wx_fmt=jpeg

作者 | 李亮,云和恩墨西区交付工程师,长期服务于运营商、社保、银行、医院、公积金等行业,擅长数据库备份恢复,升级迁移,性能优化,sql优化。


导读:PostgreSQL 号称是“世界上最先进的开源数据库”(The world's most advanced open source database),在DB-Engines的排名中长期处于第四的位置,并且增长趋势明显。开源的优势就是可以直接阅读源码,本文通过源码结合pageinspect对pg的page结构进行解析和学习。


一、Page


pg中的page和Oracle中的数据块一样,指的是数据库的块,操作系统块的整数倍个,默认是8K也就是两个操作系统块(4k的文件系统块)。这个大小在pg编译安装configure的时候通过--with-blocksize参数指定,单位是Kb。


二、Page的内部结构


2.1 page结构


640?wx_fmt=png


2.2 PageHeaderData数据结构 (页头)


可以看到一个Page有 Pager header(页头),后面是linp(行指针),pd_lower和pd_upper分别是空闲空间的开始位置和结束位置;后面就是行数据(pg里面的行就是tuple)和special空间。整个page的结构比Oracle的数据块结构简单多了。


typedef struct PageHeaderData

{

    /* XXX LSN is member of *any* block, not only page-organized ones */

    PageXLogRecPtr pd_lsn;      /* LSN: next byte after last byte of xlog

                                 * record for last change to this page */

    uint16      pd_checksum;    /* checksum */

    uint16      pd_flags;       /* flag bits, see below */

    LocationIndex pd_lower;     /* offset to start of free space */

    LocationIndex pd_upper;     /* offset to end of free space */

    LocationIndex pd_special;   /* offset to start of special space */

    uint16      pd_pagesize_version;

    TransactionId pd_prune_xid; /* oldest prunable XID, or zero if none */

    ItemIdData  pd_linp[FLEXIBLE_ARRAY_MEMBER]; /* line pointer array */

} PageHeaderData;

 

具体的长度和描述也都有详细说明:

Field

Type

Length

Description

pd_lsn

PageXLogRecPtr

8 bytes

LSN: next byte after last byte of WAL record for last change to this page

pd_checksum

uint16

2 bytes

Page checksum

pd_flags

uint16

2 bytes

Flag bits

pd_lower

LocationIndex

2 bytes

Offset to start of free space

pd_upper

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值