PostgreSQL 空闲空间映射表(FSM)

news/2024/7/9 21:36:21 标签: postgresql, 数据库

随着数据表中不断插入和删除元组,页内必然会产生空闲空间。当我们需要插入新的元组时,需要优先将元组放到已有页内的空闲空间内,以节约存储空间。如果每次都用新的页来存放新元祖,显然会造成空间利用率的浪费。但我们怎么知道哪个页中有空闲空间、空闲空间的大小是否足够存放新的元组呢?如果没有其他任何技术,则需要遍历页、直到找到足够的空闲空间用于插入新元组,这样开销将会非常大。为了解决这个问题,PostgreSQL使用了空闲空间映射表(FSM)来记录所有表文件的空闲空间信息。

在PostgreSQL中,对于每一个表文件(包括系统表)都会同时存在一个名为OID_fsm的空闲空间映射表,其中OID是对应表的oid。

FSM中存储的并不是实际的空闲空间大小,而是用一个字节来表示一个范围内的空闲空间大小,如下表所示:

字节空闲空间范围(字节)
00 ~ 31
132 ~ 63
2558164 ~ 8192

为了更快的查找,FSM文件也不是使用数组存储每个页的空闲空间,而是使用了一个三层树结构。第0层和第1层是辅助层, 第2层用于实际存放各表页中的空闲空间字节位。


http://www.niftyadmin.cn/n/1842711.html

相关文章

PostgreSQL可见性映射表(VM)和VACUUM操作

PostgreSQL为了实现多版本并发控制(MVCC),当事务删除或者更新元组时,并非从物理上删除,而是将其标记无效,最终再通过VACUUM命令清理这些无效元组,真正的物理删除发生在清理过程。清理无效元组时…

MySQL存储引擎介绍及配置

目录概述各存储引擎的特性MyISAMInnoDBMEMORYMERGE如何选择合适的存储引擎查看当前的默认存储引擎修改默认的存储引擎设置存储引擎概述 插件式存储引擎是MySQL数据库最重要的特征之一,用户可以根据应用的需要选择如何存储和索引数据、是否使用事务等。 MySQL 5.0支…

PostgreSQL插件开发

PostgreSQL中许多控制信息都是以系统表的形式来管理,这个特点决定了PostgreSQL比其他数据库更容易进行内核扩展。PostgreSQL还提供了丰富的数据库内核编程接口,允许开发者以插件的形式将自己的代码融入内核。 PostgreSQL插件开发非常简单,下…

PostgreSQL内存上下文

不管是什么样的数据库系统,存储管理的本质都是一样的:如何减少I/O次数。内存的访问速度至少是磁盘的数十万倍,所以通常读写磁盘所用的时间决定了数据库操作的总时间,而内存的访问时间可以忽略不计。因此,要尽可能的提高…

git重置或还原已提交的代码--git reset和git revert

文章目录背景两种方式git resetgit revert背景 在多人协作时,对代码的管理,难免会出现错误。如果出现错误,我们分析下来是要进行一些回退操作,那么解决办法有如下两种: git reset git revert 两种方式 git reset 在…

PostgreSQL文本搜索(一)——简介

PostgreSQL文本搜索(一)——简介 文本搜索对于数据库系统来说是一个十分重要的功能,它可以在数据库文本文档(包括表中的text字段等)中搜索一个模式,可以是一个或多个单词、短语、短句,并且可以…

git clone时出现error: RPC failed; curl 18 transfer closed with outstanding read data remaining

目录问题原因1解决原因2解决打开下面的网站获取信息配置更新DNS问题 使用git bash 从github clone代码时遇到下面的错误 error: RPC failed; curl 18 transfer closed with outstanding read data remaining fatal: The remote end hung up unexpectedly fatal: early EOF fa…

PostgreSQL文本搜索(二)——表和索引

PostgreSQL文本搜索(二)——表和索引 上一节的例子说明了使用简单的常量字符串进行全文匹配。本节展示了如何搜索表数据,或选择使用索引。 搜索表 可以在没有索引的情况下进行全文检索。一个简单的查询是打印在body字段中包含friend这个词…