当前位置: fljsyy->优技培训 > PostgreSQL技术大讲堂 - 第17讲:Vacuum空间管理工具

PostgreSQL技术大讲堂 - 第17讲:Vacuum空间管理工具

2023-05-24作者:fljsyy来源:www.fljsyy.com

PostgreSQL从小白到专家,是从入门逐渐能力提升的一个系列教程,内容包括对PG基础的认知、包括安装使用、包括角色权限、包括维护管理、、等内容,希望对热爱PG、学习PG的同学们有帮助,欢迎持续关注CUUG PG技术大讲堂。

Part 17:Vacuum空间管理工具

内容1:VACUUM 概述

内容2:可见性地图作用

内容3:冻结处理

内容4:Autovacuum daemon

内容5:Full VACUUM

 

VACUUM概述

· VACUUM概述Vacuum处理对数据库中的指定表或所有表执行以下任务:

1、移除死元组

 删除死元组并对每个页面的活元组进行碎片整理。

 删除指向死元组的索引元组。

2、冷冻老的Txid

 必要时冻结老元组的Txid 更新冻结的与系统目录(pg_database和pg_class)相关的txid

 如有可能,移除clog中不必要的部分

3、其他

 更新已处理表的FSM和VM。

 更新几个统计数据(pg_stat_all_tables等)

 

VACUUM处理流程

· VACUUM 处理流程

(1) 从指定的表中获取每个表。

(2) 获取表的ShareUpdateExclusiveLock锁。此锁允许读取其他事务。

(3) 扫描所有页面以获取所有死元组,必要时冻结旧元组。

(4) 如果存在,则移除指向相应死元组的索引元组。

(5) 对表的每一页执行以下步骤(6)和(7)。

(6) 移除死元组并重新分配页面中的活元组。

(7) 更新目标表的相应FSM和VM。

(8) 如果最后一页没有元组,则截断最后一页u003c/p>

(9) 更新与目标表的真空处理相关的统计信息和系统目录。

(10) 更新与真空处理相关的统计数据和系统目录。

(11) 如果可能的话,删除不必要的文件和clog的页面

· 第一步

执行冻结处理并删除指向死元组的索引元组

1、扫描目标表,创建死元组列表

2、通过死元组列表删除索引元组,即“清理阶段”

3、如此循环,直到清完为止

· 清理操作流程

· 第二步

更新与每个目标表的真空处理相关的统计信息和系统目录。

此外,如果最后一页没有元组,则从表文件中将其截断。

如果可能的话,它会删除不必要的clog部分

 

可见性地图

· 提高vacuum的效率

可见性地图用来记录含有被删除行的数据块id,以提供给vacuum参考。

 

冻结处理

· 冻结处理流程

冻结处理有两种模式:

lazy mode(惰性模式)

eager mode(急切模式)

 

删除不需要的clog文件

· 删除clog文件

 

Autovacuum Daemon

· Autovacuum 守护进程

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

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

 

Full VACUUM

· Full VACUUM

· Full VACUUM 处理流程

什么时候需要FULL VACUUM?

testdb=# CREATE EXTENSION pg_freespacemap;

CREATE EXTENSION

testdb=# SELECT count(*) as "number of pages",

pg_size_pretty(cast(avg(avail) as bigint)) as "Av. freespace size",

round(100 * avg(avail)/8192 ,2) as "Av. freespace ratio"

FROM pg_freespace('accounts');

number of pages | Av. freespace size | Av. freespace ratio

-----------------+--------------------+---------------------

1640 | 99 bytes | 1.21


FULL VACUUM示例(一)

testdb=# DELETE FROM accounts WHERE aid %10 != 0 OR aid < 100;

DELETE 90009

testdb=# VACUUM accounts;

VACUUM

testdb=# SELECT count(*) as "number of pages",

pg_size_pretty(cast(avg(avail) as bigint)) as "Av. freespace size",

round(100 * avg(avail)/8192 ,2) as "Av. freespace ratio"

FROM pg_freespace('accounts');

number of pages | Av. freespace size | Av. freespace ratio

-----------------+--------------------+---------------------

1640 | 7124 bytes | 86.97

(1 row)


FULL VACUUM示例(二)

testdb=# SELECT *, round(100 * avail/8192 ,2) as "freespace ratio"

FROM pg_freespace('accounts');

blkno | avail | freespace ratio

-------+-------+-----------------

0 | 7904 | 96.00

1 | 7520 | 91.00

2 | 7136 | 87.00

3 | 7136 | 87.00

4 | 7136 | 87.00

5 | 7136 | 87.00


FULL VACUUM示例(三)

testdb=# VACUUM FULL accounts;

VACUUM

testdb=# SELECT count(*) as "number of blocks",

pg_size_pretty(cast(avg(avail) as bigint)) as "Av. freespace size",

round(100 * avg(avail)/8192 ,2) as "Av. freespace ratio"

FROM pg_freespace('accounts');

number of pages | Av. freespace size | Av. freespace ratio

-----------------+--------------------+---------------------

164 | 0 bytes | 0.00

(1 row)


以上就是Part 17 - Vacuum空间管理工具 的内容,欢迎进群一起探讨交流QQ交流群:752027153微信交流群:联系客服拉你进微信PG交流群钉钉交流群:35822460,钉钉群专门有视频讲解

  • PostgreSQL PG夜话(第20期):数据库老陈、德哥、快立方华总,聊一聊数据库内存管理
  • PostgreSQL从入门到精通教程,这样学习postgres
  • PostgreSQL数据库,为什么会异军突起?
  • PostgreSQL中国技术大会 CUUG获得PostgreSQL数据库认证与培训合作伙伴
  • 不懂就问:什么是PostgreSQL数据库管理员认证
  • 是时候解锁一下“PostgreSQL数据库认证专家”了
  • 《PostgreSQL 数据库在国内的发展前景》
  • 2024云栖大会,9月19杭州见:云启智跃·产业蝶变
  • 金蝶集团信创PostgreSQL数据库认证开班啦!!!
  • 万“象”更新 - 看PostgreSQL数据库的前世与今生
  • 炙手可热!信创时代下的PostgreSQL数据库
  • 7月8日,恭喜CUUG 张同学通过19c OCM认证考试,成绩公布!
  • Oracle OCP证书还有用吗 含金量有多高
  • 腾讯云认证级别名称TCA、TCP、TCE升级为TCCA、TCCP、TCCE
  • 怎么报考腾讯云TDSQL数据库工程师认证(TCCA、TCCP、TCCE)
  • ocm认证考试费用多少钱,Oracle OCM考几科
  • OCP认证没有含金量了?来看看Oracle OCP 证书的用处!
  • Oracle OCM证书还值得考吗?哪些人需要考OCM
  • Oracle 数据库认证,数据库领域的金字招牌
  • PostgreSQL技术大讲堂 - 第63讲:duckdb数据库盛宴
  • PostgreSQL技术大讲堂 - 第56讲:老陈与德哥聊“数据库孤儿文件”
  • PostgreSQL技术大讲堂 - 第57讲:老陈与德哥聊“数据库安全”
  • PostgreSQL技术大讲堂 - 第58讲:老陈与德哥聊“txid从32位变成64位的影响与调整”
  • 报名啦!第13届PostgreSQL中国技术大会,”聚焦云端创新 汇聚智慧共享“
  • 汇华学院PG证书来了!工信人才&CUUG PostgreSQL管理员认证!
  • 7月26日,工信部人才交流中心PostgreSQL认证【纸质证书】到了!
  • PostgreSQL PG夜话(第21期):数据库老陈和德哥 聊一聊“Data+AI”
  • PostgreSQL PG夜话(第22期):数据库老陈 与 德哥 聊“DBA的发展”
  • 国家支持!是时候考一个PostgreSQL数据库管理员认证了!
  • 国内备受好评PostgreSQL数据库性能如何?
  • 聊一聊PostgreSQL数据库,以及PostgreSQL认证体系
  • OCM认证烂大街了吗OCM认证还值得投资吗
  • 旧版本的Oracle OCM证书怎么升级到最新版本?
  • 企业还会高薪招聘OCM证书获得者吗?
  • 腾讯云数据库认证官方的考试费是多少钱?
  • PostgreSQL技术大讲堂 - 第62讲:TXID的冻结-拆弹专家2
  • PostgreSQL技术大讲堂 - 第64讲:给pg插上翅膀-pg_quack
  • 如何考取PostgreSQL认证证书?
  • 有序推进合作互补,共建PostgreSQL良好生态环境
  • 【优技教育】Oracle 19c OCP 082认证考试题库(第5题)- 2024年修正版
  • 【优技教育】Oracle 19c OCP 082题库(第1题)- 2024年修正版
  • 【优技教育】Oracle 19c OCP 082题库(第3题)- 2024年修正版
  • 【优技教育】Oracle 19c OCP 082题库(第8题)- 2024年修正版
  • 【优技教育】Oracle 19c OCP 082题库(第13题)- 2024年修正版
  • 【优技教育】Oracle 19c OCP 082题库(第14题)- 2024年修正版
  • Oracle 19c OCP 082认证考试题库(第6题)- 2024年修正版
  • Oracle 19c OCP 082认证考试题库(第7题)- 2024年修正版
  • 8月26日,恭喜CUUG 肖同学获得19c OCM证书!
  • 报名啦!PolarDB数据库创新设计赛(天池杯)等你来战
  • 相约华中科技大学,移动云技术论坛 第四期:打造数智时代新型数据底座