你有没有想过为什么vacuum不会让你的PostgreSQL表变小?你有没有想过为什么vacuum不收缩数据文件? 好吧,也许这就是你一直在寻找的文章。 重点是:通常情况下,空间不会在清理后返回到操作系统,重要的是要了解原因。 人们经常对vacuum的内部运作做出错误的假设。 深入挖掘并了解真正发生的事情是有意义的。
下面的帖子向用户揭示了关于vacuum的最有用的秘密。
了解元组可见性
要了解PostgreSQL中的vacuum,首先了解PostgreSQL如何处理可见性非常重要。整个概念基于一组隐藏列,这些列是行的一部分。 以下是它的工作原理:
|
我们刚刚创建的表只包含一列--以保持简单。 请注意,数据已使用两个单独的事务加载到表中。 每个事务都插入了3行,这在隐藏的列中清楚地表明:
|
xmin、xmax、cmin和cmax是包含事务Id的隐藏列。如您所见,前三行已由事务号764写入,而其余数据已使用事务号765创建。
隐藏列将处理可见性,PostgreSQL将(通常但不总是)根据这些列确定某一行是否可以被某个事务看到。
运行UPDATE语句将显示这里到底发生了什么:
|
一行已更改。 但是,让我们专注于表示磁盘上行的物理位置的CTID。 请注意,(0,6)已经消失,因为PostgreSQL必须复制该行。如果我们运行第二个更新,该行将再次复制: UPDATE
|
复制这些行很重要,因为我们必须保留旧行。 否则回滚将不起作用-因此旧版本必须保留。
让我们再检查一下该表:
|
5到9之间的所有内容都充满了必须删除的死行。
VACUUM:清理行
请记住,提交也不能杀死死行。 因此,清理过程必须异步完成。 这正是vacuum的作用。 让我们运行它,看看会发生什么:
|
vacuum正在积极寻找不再被任何人看到的行。 这些行可以位于数据文件的中间某处。 发生的事情是VACUUM允许PostgreSQL重用该空间-但是,它不会将该空间返回到操作系统。它不能这样做,因为如果你有一个大小为1GB的数据文件,你不能简单地将"文件的中间"返回给操作系统,以防它为空–没有文件系统操作支持这一点。相反,PostgreSQL必须记住这个可用空间,并在以后重用它。
VACUUM规则的例外
但是,该规则有一个例外。 考虑以下代码片段:
|
即使在DELETE语句之后,表也会保留其大小。请记住:清理是异步完成的。 因此,可以调用VACUUM来删除这些行: DELETEVACUUM
|
这是一个特例。 规则是:如果从表中的某个位置开始,所有行都死了,VACUUM可以截断表。这正是这个例子中发生的事情:
|
毕竟,在大表中,数据文件末尾总是有少数行(在正常情况下)。 出于这个原因,不要指望VACUUM缩小表。
VACUUM FULL vs. pg_squeeze
对抗表膨胀(这是用于描述表不成比例增长的技术术语)的一种方法是使用vacuum full。 但是,问题是VACUUM FULL需要一个表锁,如果您处于关键业务环境中,这可能是一个真正的问题。因此,我们开发了一种在没有广泛锁定的情况下重组大型表的方法。
再更吧。

PG考试咨询

PGCCC,公众号:PostgreSQL考试认证中心PostgreSQL认证考试,2023春节特惠,开始啦!
PostgreSQL-PCP认证专家-上海站、广州站 PGCCC,公众号:PostgreSQL考试认证中心开班通知-PCP认证专家(上海站)培训开班1106
PostgreSQL-PCP认证专家-北京站-精彩花絮 PGCCC,公众号:PostgreSQL考试认证中心PostgreSQL认证专家考试(培训)(10月16日北京站)精彩花絮
PostgreSQL-PCP认证专家-成都站 公众号:PostgreSQL考试认证中心开班通知-PCP认证专家(成都站)培训开班1016
PostgreSQL-PCP认证专家考试-北京站-考试风采 PGCCC,公众号:PostgreSQL考试认证中心PostgreSQL认证专家考试(培训)-北京站-成功举办
PostgreSQL-PCA认证考试-贵阳站-考试风采 PGCCC,公众号:PostgreSQL考试认证中心PostgreSQL PCA+PCP认证考试在贵阳成功举办
PostgreSQL-PCP认证专家考试-上海站-考试风采 PGCCC,公众号:PostgreSQL考试认证中心PostgreSQL PCP认证考试(上海站)成功举办
PostgreSQL认证专家考试-学员考试总结 薛晓刚,公众号:PostgreSQL考试认证中心难考的PostgreSQL认证考试
PostgreSQL-PCM认证大师考试-天津站-考试风采 PGCCC,公众号:PostgreSQL考试认证中心PostgreSQL-PCM认证大师考试(天津站)成功举办
如何在工业和信息化部教育与考试中心官网查询证书 PG考试认证中心,公众号:PostgreSQL考试认证中心如何在工业和信息化部教育与考试中心查询PostgreSQL证书
中国PostgreSQL考试认证体系 PG考试认证中心,公众号:PostgreSQL考试认证中心中国PostgreSQL考试认证体系




