Greenplum ao表和heap表垃圾回收的细微差别

简介:

标签

PostgreSQL , Greenplum , 垃圾回收 , vacuum


背景

在Greenplum中删除、更新数据记录时,会产生新的tuple版本,老的版本通过行头部标记:为已删除以及被哪个事务删除的。

因此频繁的更新后,或者批量的删除数据后,需要回收那些旧的版本。

通过vacuum、vacuum full、alter table redistribute命令,可以回收垃圾。

《如何检测、清理Greenplum垃圾 - 阿里云HybridDB for PG最佳实践》

但是回收AO表与回收HEAP表有些许不一样的地方,因为它们的存储方式有差异。

vacuum ao表

ao表为追加存储,当删除、更新记录时,有一个BITMAP对象来存储对应的记录是否被删除。

每个AO表的每个数据文件对应一条BITMAP信息,每个BIT位对应这个数据文件的一行。

使用vacuum回收AO表的垃圾时,实际上是这样操作的:

1、扫描bitmap,如果发现这个数据文件中被标记为删除的BIT总数大于某个阈值,则收缩这个文件。(每个数据文件默认1GB)

2、收缩这个文件时,因为会导致记录的物理位置编号,所以需要变更对应的索引(可能导致索引膨胀)。

vacuum ao表时,允许INSERT,COPY写入数据,但是不允许UPDATE和INSERT操作。(GPDB中UPDATE和DELETE是锁全表的,另一方面引入了update和delete后AO表收缩会变得更加复杂。)

3、VACUUM对应的索引,索引VACUUM时,只有仅仅包含左右链接的页(即没有实际引用的页)可以拆除复用。并且索引文件大小不会变化。

索引结构可以参考

《深入浅出PostgreSQL B-Tree索引结构》

只有重建索引才能收缩索引大小。

使用alter table redistribute命令,本质上也是需要重建索引的。

vacuum heap表

vacuum heap表,扫描所有数据文件,同时抹除BLOCK内dead tuple的item和tuple占用的空间,同时抹除对应索引ITEM。物理文件大小不会变化,(除了最后一个文件的末尾的没有任何有效记录的块。)

其他因素

vacuum 能回收的垃圾,不能被其他事务依赖。目前PG是这样来判断的,垃圾版本大于当前集群中最老事务的快照号的,都不能被回收。

《PostgreSQL垃圾回收代码分析 - why postgresql cann't reclaim tuple is HEAPTUPLE_RECENTLY_DEAD》

小结

1、Greenplum ao表使用vacuum可以回收部分垃圾(并收缩文件大小)(当某些数据文件垃圾记录超过一定设定比例时),VACUUM时堵塞UPDATE和DELETE,但是不堵塞INSERT。收缩文件大小,可能导致索引膨胀。

2、HEAP表vacuum可以回收垃圾,但是不收缩文件。

如果有维护窗口,还是建议使用这种方法来回收空间。

《如何检测、清理Greenplum垃圾 - 阿里云HybridDB for PG最佳实践》

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍如何基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
目录
相关文章
|
存储 SQL 数据库连接
Seata常见问题之修改大小如何解决
Seata 是一个开源的分布式事务解决方案,旨在提供高效且简单的事务协调机制,以解决微服务架构下跨服务调用(分布式场景)的一致性问题。以下是Seata常见问题的一个合集
693 0
|
人工智能 运维 Cloud Native
给运维工程师的Cheatsheets! 《Shell脚本速查手册》免费下!
Shell 作为 Linux 中的第一语言,几乎每一个使用 Linux 的人都用到或用过 Shell,但绝大多数人都并不能掌握 Shell 编程的基本能力和技巧。
给运维工程师的Cheatsheets! 《Shell脚本速查手册》免费下!
|
网络安全 数据安全/隐私保护
堡垒机上的主机连接本地sftp报错链接被意外关闭
【10月更文挑战第3天】堡垒机上的主机连接本地sftp报错链接被意外关闭
770 1
|
Python
pip批量安装Python库 requirement.txt 离线环境无互联网环境下pip安装Python库
pip批量安装Python库 requirement.txt 离线环境无互联网环境下pip安装Python库
936 3
Bootstrap5 折叠2
默认情况下,折叠内容是隐藏的,可通过添加 `.show` 类使其默认显示。以下示例展示了如何使用卡片组件实现简单的手风琴效果。通过设置 `data-bs-parent` 属性,确保在一个折叠选项显示时,其他选项自动隐藏。
GOLANG MAP 查找
GOLANG MAP 查找
255 3
|
消息中间件 安全 数据库
动手实操!Python IPC机制,打造高效协同的进程军团
【9月更文挑战第10天】在软件开发领域,进程间的高效协作对应用性能与稳定性至关重要。Python提供了多种进程间通信(IPC)机制,如管道、消息队列、套接字、共享内存等,帮助开发者构建高效协同的系统。本文将通过动手实践,使用`multiprocessing`模块演示如何利用队列实现进程间通信。示例代码展示了如何创建一个工作进程从队列接收并处理数据,从而实现安全高效的进程交互。通过实际操作,读者可以深入了解Python IPC的强大功能,提升系统的并发处理能力。
203 1
|
运维 监控 机器人
八爪鱼RPA机器人助您轻松获取建筑钢材市场最新价格!
八爪鱼rpa可以自动化执行价格获取任务,大大节省了人力资源和时间成本。同时,它的数据抓取和整理过程几乎没有误差,确保用户获取到的价格信息是准确可靠的。
|
关系型数据库 MySQL Java
mysql连接池的设计与实现
mysql连接池的设计与实现
464 0
|
存储 弹性计算 安全
《阿里云认证的解析与实战-云计算ACP认证》——云计算ACP训练营第1天——三、实操:如何创建ECS实例
《阿里云认证的解析与实战-云计算ACP认证》——云计算ACP训练营第1天——三、实操:如何创建ECS实例