PG Vacuum 空间管理工具与pg_freespacemap使用

1.什么是Vacuum:

PG pageinspect使用与块空间清理学习-CSDN博客

之前说过PG块更新的特点:先删除后插入,但老元组并不会真正删除,只是把老元组标记为删除状态,这就导致了PG中会有大量的垃圾数据,update所造成的资源消耗非常高。

Vacum用来整理垃圾的数据,释放垃圾数据。

2.Vacuum的作用:

1.移除死元组:

空间管理的作用,释放垃圾数据(也就是被标记为删除状态的行),并对每个页面的活元组进行碎片整理。

2.冷冻老的Txid:

任何数据库都有一个号码来记录事务的先后顺序,Oracle中叫SCN号(无穷大的整数),PG中叫做Txid(循环使用,最大42亿,到了42亿后,把前42亿冻结,这个冻结操作由Vacuum进行)。

3.其它

更新数据块,更新已处理表的FSM(空闲空间地图)和VM(可见性地图)。

删除不需要的clog文件。

3.Vacuum处理流程:

3.可见性地图

VM,一个表中有成百上千个数据块,为了提高Vacuum的效率,于是有了VM文件(可见性视图)

作用:可见性地图用来记录含有被删除行的数据块id,以提供给vacuum参考,自认为类似于oracle的BMB(位图块)

简单说就是vm后缀文件记录了1247表中哪个数据块有垃圾需要处理。

4.Autovacuum Daemon

自动清理守护进程

默认每分钟执行一次,由autovacuum_naprime参数定义。

默认调用三个worker进程进行工作,由autovacuum_max_workers参数定义。

5.Full Vacuum

常规的vacuum操作,如果遇到一个行占用一个块,也会造成资源浪费。

full vacuum处理流程如下:

 有点像Oracle的Shrinking操作,删除空闲行,然后调低高水位线,最后释放空闲块。

Shringking: Oracle 如何提高空间使用率?-CSDN博客

6.什么时候需要Full Vacuum?

1.创建一个表,随机插入十万条数据,查看当前数据块的使用情况。

当前共935个块,每个块空闲0.39。

2.当表被不断删除或更新:

删除后可用空间还是0.39,说明删除后空间并没有释放。

3.vacuum清理垃圾数据之后:

可以看到块内的可用空间虽然变多了可以用85%,但是块并没有被释放仍然是935个数据块。

说明当前块内的行很少,但是数据块很多,行很松散,如下图:

4.使用full vacuum查看效果

可以看到full vacuum把行变得紧凑,都放到了一个数据块中,导致数据块内可用空间为0。其余的块则被释放了。

学过oracle的话就可以发现,诶?这不是shrinking? 其实大体是一样的,shrinking把行变的紧凑,之把高水位线调低,高于高水位线的数据块则释放。

无非是PG中叫做Full Vacuum,Oracle中叫做shrinking。

Oracle Shrinking实验:Oracle 如何提高空间使用率?-CSDN博客

相关推荐

  1. npm 包管理工具:常用命令详解使用指南

    2024-05-16 08:52:10       35 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-05-16 08:52:10       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-05-16 08:52:10       101 阅读
  3. 在Django里面运行非项目文件

    2024-05-16 08:52:10       82 阅读
  4. Python语言-面向对象

    2024-05-16 08:52:10       91 阅读

热门阅读

  1. Apache Flink典型应用场景全面解析

    2024-05-16 08:52:10       24 阅读
  2. 如何发布与删除npm包

    2024-05-16 08:52:10       36 阅读
  3. python 抓取文档后如何存档的问题

    2024-05-16 08:52:10       29 阅读
  4. 项目-坦克大战

    2024-05-16 08:52:10       28 阅读
  5. Android SDK Setup如何使用

    2024-05-16 08:52:10       26 阅读
  6. 如何把一张图片分割为网页布局

    2024-05-16 08:52:10       30 阅读
  7. Linux mkdir命令参数和选项

    2024-05-16 08:52:10       36 阅读
  8. 基于图扩散嵌入网络的数据表示与学习 笔记

    2024-05-16 08:52:10       37 阅读
  9. 【无标题】

    2024-05-16 08:52:10       32 阅读
  10. leetcode hot100_part28_图论

    2024-05-16 08:52:10       36 阅读