当前位置: gzslhs->优技培训 > PostgreSQL技术大讲堂 - 第15讲:数据文件与块存储结构

PostgreSQL技术大讲堂 - 第15讲:数据文件与块存储结构

2023-05-10作者:gzslhs来源:www.gzslhs.com

PostgreSQL从小白到专家,是从入门逐渐能力提升的一个系列教程,内容包括对PG基础的认知、包括安装使用、包括角色权限、包括维护管理、、等内容,希望对热爱PG、学习PG的同学们有帮助,欢迎持续关注CUUG PG技术大讲堂。

Part 15:数据文件与块存储结构

内容1:表的OID与数据文件对应关系

内容2:PostgreSQL数据文件存储方式

内容3:数据文件、空闲空间地图和可见性地图

内容4:块空间使用方法


对象OID与数据文件对应关系

· PG数据库的一张表或者索引对应一个数据文件。与Oracle集中式的存储方式不同,各有优缺点

· 作为数据库对象的表和索引在内部由各个oid管理,而这些数据文件则由变量relfilenode管理。

· 表和索引的relfilenode值开始时基本上(但并不总是)与相应的oid匹配

sampledb=# SELECT relname, oid, relfilenode FROM pg_class WHERE relname = 'sampletbl';

relname | oid | relfilenode

-----------+-------+-------------

sampletbl | 18740 | 18740

(1 row)

· 相关表的数据文件路径:

$ cd $PGDATA

$ ls -la base/16384/18740

-rw------- 1 postgres postgres 8192 Apr 21 10:21 base/16384/18740

· TRUNCATE、REINDEX、CLUSTER等操作会造成relfilenode号的改变,因为先删除原来的数据文件,再创建一个新的会更快。

sampledb=# SELECT relname, oid, relfilenode FROM pg_class WHERE relname = 'sampletbl';

relname | oid | relfilenode

-----------+-------+-------------

sampletbl | 18740 | 18812

(1 row)

· 使用内置函数pg_relation_file path查看表的文件路径:

sampledb=# SELECT pg_relation_filepath('sampletbl');

pg_relation_filepath

----------------------

base/16384/18812

(1 row)

· 文件尺寸超过1GB后,新文件的产生规则:

$ cd $PGDATA

$ ls -la -h base/16384/19427*

-rw------- 1 data/base/16384/19427

-rw------- 1 data/base/16384/19427.1


相关联的其它数据文件

· 空闲空间地图和可见性地图(‘_fsm’和‘_vm’):

$ cd $PGDATA

$ ls -la base/16384/18751*

-rw------- 1 base/16384/18751

-rw------- 1 base/16384/18751_fsm

-rw------- 1 base/16384/18751_vm

· 当insert操作时空闲空间文件用来查看哪些数据块有空闲空间存放新行

· 当进行vacuum操作时可见性地图文件用来提高操作的效率

· 相关的三类文件在内部称为每个关系的分岔(fork);数据文件的fork号为0、空闲空间文件fork号为1,可见性地图文件的fork号为2。


数据块内部结构

· 数据文件内部布局

固定长度的页(或块),默认值为8192字节(8kb)

页面的内部布局取决于数据文件类型

· 表中的页包含以下三种数据:

header data -由page header data结构定义的头数据在页面的开头分配。它的长度为24字节,包含有关该页的一般信息。结构的主要变量如下页所述。

line pointer(s) -行指针为4字节长,并保存指向每个堆行的指针。它也被称为项指针。行指针形成一个简单的数组,它起到元组索引的作用。每个索引从1开始按顺序编号,称为偏移量编号。当一个新的行被添加到页面中时,一个新的行指针也被推到数组中以指向新的行

heap tuple(s) -堆元组(行)是记录数据本身。它们从页面底部开始按顺序堆叠。因为PostgreSQL需要同时了解并发控制(CC)和WAL。


INSERT操作

· Writing Heap Tuples:


UPDATE操作

· 更新一行记录:

update操作时,数据库的操作过程是先delete后insert,被删除的行空间不会立刻释放,vacuum操作时会释放。


读操作

· Reading Heap Tuples:

以上就是Part 15 - PostgreSQL 数据文件和块存储结构 的内容,欢迎进群一起探讨交流QQ交流群:752027153微信交流群:联系客服拉你进微信PG交流群钉钉交流群:35822460,钉钉群专门有视频讲解

  • PostgreSQL手册-》sql语法-》值表达式-》聚合表达式
  • 8月份证书来啦!工信人才PostgreSQL能力提升证书!
  • PostgreSQL技术大讲堂 - 第26讲:PG-FDW部署
  • 工业和信息化部人才交流中心与国家发展和改革委员会价格监测中心签署战略合作协议
  • 国内唯一 · PostgreSQL认证红头文件(8月) - 工信人才 [2023] 185号
  • PostgreSQL和MySQL对比:数据复制
  • 国内唯一PostgreSQL认证培训红头文件【2023年】
  • PostgreSQL技术大讲堂 - 第27讲:Oracle-FDW部署
  • PG中级认证 红头文件
  • PostgreSQL认证培训红头文件【2023-08】
  • PostgreSQL技术大讲堂 - 第28讲:索引内部结构
  • 7月20日 恭喜CUUG 韩同学获得Oracle OCP 19c证书
  • 8月,CUUG常同学PostgreSQL能力评价认证证书!
  • 8月,CUUG代同学PostgreSQL能力评价认证证书!
  • 8月,CUUG刘同学PostgreSQL能力评价认证证书!
  • 8月,CUUG马同学PostgreSQL能力评价认证证书!
  • 8月,CUUG王同学PostgreSQL能力评价认证证书!
  • 8月,CUUG于同学PostgreSQL能力评价认证证书!
  • 8月,CUUG臧同学PostgreSQL能力评价认证证书!
  • 8月,CUUG赵同学PostgreSQL能力评价认证证书!
  • PostgreSQL 14中文手册发布
  • 恭喜CUUG 陈同学获得Oracle OCP 19c证书
  • 恭喜CUUG 赵同学获得Oracle OCP 19c证书
  • PG认证--PostgreSQL管理员能力提升培训班
  • PolarDB for PostgreSQL 云原生数据库的优势
  • PolarDB for PostgreSQL简介
  • PolarDB For PostgreSQL跨机并行查询功能
  • PolarDB PostgreSQL版产品架构(图)
  • PolarDB-PG 架构之存储计算分离架构
  • PolarDB MySQL版和PostgreSQL版相同产品架构
  • PolarDB分布式版产品架构
  • PolarDB数据库优势何在
  • 什么是PolarDB数据库
  • PolarDB数据库有几种引擎
  • OceanBase 数据库简介概述
  • OceanBase 体系结构及系统架构
  • OceanBase与Oracle对比:SQL引擎 比较
  • OceanBase与Oracle对比:OB暂不支持的功能
  • OceanBase与Oracle对比:数据字典视图和性能视图
  • OceanBase与Oracle对比:备份恢复
  • OceanBase与Oracle对比:安全特性 比较
  • OceanBase与Oracle对比:数据库对象管理
  • OceanBase与Oracle对比:字符集和字符序【表格】
  • OceanBase与Oracle对比:过程性语言 比较
  • OceanBase与Oracle对比:SQL语法 比较
  • OceanBase与Oracle对比:内建函数【表格比较】
  • PostgreSQL手册-》sql语法-》值表达式-》函数调用
  • PostgreSQL手册-》sql语法-》值表达式-》下标-》域选择-》操作符调用
  • OceanBase与Oracle对比:SQL 数据类型【表格比较】
  • OceanBase企业版和社区版的功能差异