Postgresql vacuum 和 vacuum full
转载自 https://www.modb.pro/db/63663
dead tuples
tuple:元组,也就是一行数据
首先,简要解释什么是"死元组"和"膨胀".
当您在PostgreSQL中执行DELETE时,行不会立即从数据文件中删除.而是仅通过在页头中设置xmax字段将其标记为已删除.同样对于UPDATE,它可能在PostgreSQL中被视为DELETE+INSERT.
这是PostgreSQL MVCC背后的基本思想之一,因为它允许更大并发,在不同的进程之间最小的锁定.这个MVCC实现的缺点是留下了已删除的元组,即使在所有可能看到这些版本的事务完成之后也是如此.
如果没有清理,那些"死元组"(对于任何事务实际上是不可见的)将永远留在数据文件中.对于DELETE和UPDATE比较多的的表,死元组可能占据很多磁盘空间.同时,死元组也将从索引中引用,进一步增加了浪费的磁盘空间量.这就是我们在PostgreSQL中称之为“膨胀”的东西,同时因为查询也会变慢。
下面主要介绍vacuum清理dead tuples的过程。 在清理dead tuples时,系统有两种处理方式:vacuum 和 vacuum full。主要区别在如下:
vacuum
只是把表中的dead tuples进行删除标记,并没有真正物理删除;vacuum过程中,可以正常访问数据表
vacuum full
物理删除表中的dead tuples,释放空间给操作系统;vacuum full过程中,表被锁定,不允许访问
Vacuum 做了什么
1 扫描所有表,或者特殊表,得到dead tuples
2 如果需要会固化需要清理的dead tuples
3 清理与dead tuples有关的index tuple
4 清理页面中的dead tuples 并将清理后的空间释放
5 更新对应表的FSM 和 VM 文件
6 更新相关的系统表
Vacuum FULL 做了什么
1 对于表使用了独占锁 exclusive lock
2 创建一个并行的空的存储文件
3 将目前的标记为存活的tuples(行)拷贝到了新的存储中(其实就是新的物理文件)
4 在将原有的数据都拷贝后,开始释放原有的存储数据的文件
5 释放独占锁
Postgresql vacuum 和 vacuum full相关推荐
- PostgreSQL中的VACUUM
最近搞了一个公众号PostgreSQL运维技术,欢迎来踩~ 悄悄放一张: PostgreSQL运维技术 我在之前的一篇介绍MVCC的文章中提到,MVCC有事务ID回卷的问题,它的解决方案是VACUUM ...
- Vacuum和Vacuum Full的处理过程
对于数据库系统的并发控制,PostgreSQL采用MVCC(多版本并发控制)进行处理.这种机制有一个缺点,就是随着时间的推移,数据文件中积累的dead tuples会越来越多.怎么去清理这些dead ...
- Postgresql垃圾回收Vacuum优化手册
1 Vacuum启动频率太低 参数 建议 autovacuum_vacuum_scale_factor 当update,delete的tuples数量超过 autovacuum_vacuum_scal ...
- postgresql源码学习(53)—— vacuum②-lazy vacuum之heap_vacuum_rel函数
一. table_relation_vacuum函数 1. 函数定义 前篇最后(https://blog.csdn.net/Hehuyi_In/article/details/128749517),我 ...
- Postgresql之Vacuum和Vacuum full的区别
参考文章:Postgresql关于Vacuum的作用和操作方法,Vacuum full锁表并生成新的relfilenode_ITPUB博客 简单说明 在PostgreSQL中,一次行的UPDATE或D ...
- PostgreSQL 怎么通过vacuum 加速事务ID回收的速度 (翻译)
此文为翻译文字原文连接在文字最下方 经历上次transaction id 回收报警的问题后,除了上次总结后,发现对于transaction id 的回收的问题还是处于一个急需在学习的过程,所以有了下面 ...
- mysql vacuum_PostgreSQL vacuum原理—vacuum揭秘
在前面两个章节中,我们讲了vacuum的一些重要参数"PostgreSQL vacuum原理一功能与参数"以及PG发起vacuum的流程"PostgreSQL vacuu ...
- vacuum和vacuum full区别
1:vacuum full会lock table ,vacuum不会. 2:vacuum只是将deadtuple的行的空间转换为能够使用的状态,vacuum full会将这些空间碎片后面的数据上移. ...
- PostgreSQL 并行vacuum patch - 暨为什么需要并行vacuum或分区表
标签 PostgreSQL , vacuum , freeze , 分区表 , 并行vacuum 背景 我们之前做过一个这样的测试,单表数据从1000万到10亿,对其进行增删改查的压测,性能几乎没有衰 ...
最新文章
- PubChem的Python接口PubChemPy
- 使用自定义UISlider控制View亮度
- 456. 132 Pattern | 456. 132 模式(单调栈)
- Spring Cloud构建微服务架构:分布式配置中心【Dalston版】
- Git仓库迁移,包括所有的分支、标签、日志
- python3生成二维码实例fromm_Python使用mqtt极简例子
- 你知道他们的输出结果吗?
- SQL查询提速秘诀,避免锁死数据库的数据库代码
- java 改为matlab_用面向对象的方法将一段JAVA代码转化为matlab
- Qt4_在Qt设计师中集成自定义窗口部件
- python 类 探索
- 4.程序员的自我修养---静态链接
- windows XP小技巧
- c语言数组指针定义方法,C语言数组指针定义方法
- 大气生活用品电商网站模板
- C++ —— 句柄类的实现方式 —— 类实现的隐藏
- 手写一个识别旺旺/千牛,手机在线/电脑在线状态的小工具
- 数据库之系统的三级模式结构
- PHP实现文件下载功能,提示压缩包损坏及打不开的解决方法
- 使用 OneDrive 对电脑内的任意文件进行备份
热门文章
- php-2612硒鼓加墨_HP2612A硒鼓加粉图解
- html中如何引用其外部字体,css引入外部字体
- 排查线上问题的9种方式
- 光流文件(.flo)转成图片(.png)
- [HSCSEC 2023] rev,pwn,crypto,Ancient-MISC部分
- e签宝认证服务API PHP请求签名鉴权生成
- 为何优秀的程序员不断离开?,中高级Java面试中你不得不会的知识点
- 用python打印购物小票和证书
- 点心、MIUI、乐众OS架构师讲Android底层故事
- 工行银企互联(NC模式)中间件开发模式