首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

PGconf.Asia 2021 主题分享:PostgreSQL 空闲空间管理

在2021年12月14-17日举行的PostgresConf.CN&PGConf.Asia 2021大会上,来自Greenplum原厂的VMware研发工程师王晓冉发表了《PostgreSQL 空闲空间管理》主题演讲。在演讲中,王晓冉结合PostgreSQL存储引擎,分析了FSM的实现机制,并结合源代码,分析了FSM代码中主要数据结构,存储、并发及recovery的实现。

在大会上,王晓冉将整个演讲内容分为了四个部分进行讲解,分别是:

背景

功能

实现机制

源代码分析

FSM出现的背景和Data Pages,MVCC和VACUUM相关。首先我们来看看Data Pages,PostgreSQL的数据是以page为逻辑单位存储于文件系统中的,下图中的存储路径是/data/base/16385/24692。16385对应的数据库OID,24692对应的是表的OID。PostgreSQL中一个页面的大小是8k,数据是以tuple的形式存储在页面中,一个tuple对应了表中的一行数据。

我们再来看看MVCC。PostgreSQL采用MVCC多版本控制协议来实现多版本控制。在删除数据时,只标记,不删除。在写新数据时,旧数据不删除,而是把新数据插入。例如图中的更新操作,原数据中只有Tuple1一行数据,在更新时,并不删除Tuple1,而是插入更新后的Tuple2。Tuple1这样的旧数据很快会对所有事务不可见,变为过期无用的数据,它们所占用的空间将被释放。VACUUM进程就是负责释放过期数据占用的空间。

更新前Tuple

更新后Tuple

VACUUM进程把page中这些不可见数据占用的空间标记为可用,当有新数据插入时,优先使用这些空间。FSM负责管理这些page中的空闲空间。当执行INSERT/COPY/UPDATE 操作,需要在页面插入一行数据时,调用FSM获取可用page。

FSM的功能主要包括以下四个方面:

查找可用page

更新page的可用空间

持久化(FSM FORK)

并发 & Recovery

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20220121A07X3600?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券