理解PostgreSQL中的数据块

PG的数据块大小,默认是8KB,可以调整为16K或者 32K吗?

PostgreSQL的数据块大小默认为8KB,可以将其调整为16KB或32KB。数据块大小需要在‌编译安装‌PostgreSQL时通过配置参数指定,例如使用configure.ac中的--with-blocksize选项进行设置 。需要注意的是,一旦数据库初始化完成,数据块大小就无法再修改 。

数据块的行指针都包括哪些信息?

具体来说,行指针是一个32位的数字,其结构被划分为三个部分:

行内容的偏移量‌ :占用15位(bit),用于定位数据行在块内的具体存储位置。
指针的标记‌ :占用2位。
行内容的长度‌:占用15位。

由于行内容的偏移量字段只有15位,根据二进制计算规则,它能表示的最大数值是 2 的 15 次方,即 32768。这个值定义了单个数据块内可以寻址的最大字节范围。因此,PostgreSQL的数据块大小被限制为最大32KB(因为32768字节等于32KB)。这意味着,即便在编译时尝试配置更大的块大小(如64KB),这个15位的偏移量字段也无法正确表示超出32768字节的地址,从而在物理上约束了块大小的上限。

行指针也会占用数据块的空间吗?

是的,行指针会占用数据块的空间。

在PostgreSQL的数据块(通常为8KB)中,除了存储实际的用户数据行,还有一个专门的结构叫做‌行指针数组(Line Pointer Array)‌,它位于数据块的起始部分。

可以这样理解:

  1. 空间占用‌:每个行指针固定占用4个字节。数据块中每新增一行数据,就会在这个数组里增加一个对应的行指针。
  2. 作用‌:行指针就像是数据块内部的"目录"或"索引"。它存储了对应数据行在块内的‌偏移量‌和‌长度‌。当需要访问某一行时,数据库首先通过行指针找到该行的位置,然后再去读取具体的数据内容。
  3. 总结‌:因此,数据块的总空间可以看作是由"行指针数组占用的元数据空间"和"实际数据行占用的空间"共同组成的。行指针是数据块内部管理机制的必要组成部分,必然会占用一部分存储空间。
相关推荐
银发控、6 小时前
MySQL联合索引
数据库·mysql
予枫的编程笔记6 小时前
【MySQL修炼篇】从踩坑到精通:事务隔离级别的3大异常(脏读/幻读/不可重复读)解决方案
数据库·mysql·后端开发·数据库事务·事务隔离级别·rr级别·脏读幻读不可重复读
一起养小猫8 小时前
Flutter for OpenHarmony 实战:记账应用数据统计与可视化
开发语言·jvm·数据库·flutter·信息可视化·harmonyos
世界尽头与你8 小时前
(修复方案)CVE-2023-22047: Oracle PeopleSoft Enterprise PeopleTools 未授权访问漏洞
数据库·安全·oracle·渗透测试
韩立学长8 小时前
【开题答辩实录分享】以《智能大学宿舍管理系统的设计与实现》为例进行选题答辩实录分享
数据库·spring boot·后端
Henry Zhu1238 小时前
数据库(五):反规范化
数据库
Mr_Xuhhh8 小时前
MySQL函数详解:日期、字符串、数学及其他常用函数
java·数据库·sql
he___H9 小时前
Redis高级数据类型
数据库·redis·缓存
霖霖总总10 小时前
[小技巧60]深入解析 MySQL Online DDL:MySQL Online DDL、pt-osc 与 gh-ost 机制与最佳实践
数据库·mysql
爱学习的阿磊10 小时前
使用PyTorch构建你的第一个神经网络
jvm·数据库·python