Postgresql物理存储结构

本文介绍了PostgreSQL数据库不支持裸设备和块设备,并详细解析了其数据页结构,包括默认大小、最大尺寸及内部存储的行指针等关键信息。

Postgresql目前不支持使用设备和块设备。

Postgresql的属于

Relation:表示表或索引。

Tuple:表示表中的行。

Page:表示在磁盘中的数据块。

Buffer:表示在内存中的数据块。

Page结构

Page默认大小为8KB,最大32KB,一个数据块中可存放多行的数据。块中的结构如下图:

1003890-20180202222627468-554176399.png

块头记录了如下信息:

块的checksum值

空闲空间的起始位置和结束位置

特殊数据的起始位置

其他一些信息

行指针是一个32bit的数字,具体结构如下:

行内容的偏移量,占15bit;

指针的标记,占2bit;

行内容的长度,占15bit。

行指针中表示行内容的偏移量是15bit,能表示的最大偏移量是2^15=32768,因此块的最大大小是32768,即32KB。

转载于:https://www.cnblogs.com/baisha/p/8407297.html

### PostgreSQL 存储结构详解 #### 数据库物理存储层次 PostgreSQL物理存储分为四个主要层次:表空间(Tablespaces),数据库(Databases),关系(Relations) 和 表页(Pages)[^1]。 - **表空间 (Tablespaces)** 是操作系统上的目录,用于存储特定于该表空间的数据文件。通过创建不同的表空间,管理员可以在不同磁盘位置上分布负载并管理数据放置策略。 - **数据库 (Databases)** 每个数据库由一组持久化对象组成,这些对象被保存在一个或多个表空间内。每个实例可以拥有多个独立的数据库,它们之间相互隔离。 - **关系 (Relations)** 关系是指逻辑上的表格、索引或其他持久化的集合体,在内部表示为一系列固定大小的块(称为 pages)。每种类型的 relation 都有自己的命名约定和访问方法。 - **表页 (Pages)** 页面是 PostgreSQL 文件系统的最小单位,默认情况下大小为8KB。每一个 page 可能包含多条记录,并且具有自己的头信息来描述其状态和其他属性[^2]。 #### WAL 日志机制 为了确保数据的一致性和可靠性,PostgreSQL 使用 Write-Ahead Logging(WAL) 技术。WAL 记录所有的更改操作之前先写入到日志中,即使发生崩溃也能依据此日志重做未完成的操作以保持一致性[^4]。 ```sql -- 查看当前wal_level设置 SHOW wal_level; ``` #### 缓冲区(Buffer) Buffer Manager 负责管理和维护内存中的缓存池,其中包含了最近使用的页面副本。当查询执行时,如果所需的数据已经在缓冲区内,则可以直接从中读取;否则就需要从磁盘加载相应的页面进入缓冲区[^3]。 #### 系统表与元数据 除了用户定义的关系外,还有许多系统表用来存储关于整个集群的信息,比如 `pg_class` 描述了所有类(即表和索引), `pg_attribute` 列出了所有列及其特性等。这类特殊表对于理解数据库架构至关重要。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值