0
点赞
收藏
分享

微信扫一扫

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

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

  1. 背景
  2. 功能
  3. 实现机制
  4. 源代码分析

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的功能主要包括以下四个方面:

  1. 查找可用page
  2. 更新page的可用空间
  3. 持久化(FSM FORK)
  4. 并发 & Recovery

点击下面链接观看演讲视频,即可了解FSM功能、实现机制、及源代码分析的具体内容。

PostgreSQL 空闲空间管理_哔哩哔哩_bilibili

举报

相关推荐

0 条评论