PolarDB for PostgreSQL 开源必读手册-VACUUM处理(中)

本文涉及的产品
云原生数据库 PolarDB PostgreSQL 版,标准版 2核4GB 50GB
云原生数据库 PolarDB MySQL 版,通用型 2核4GB 50GB
简介: PolarDB for PostgreSQL 开源必读手册-VACUUM处理

接上篇 :https://developer.aliyun.com/article/1223091?spm=a2c6h.13148508.setting.21.44ec4f0eNvAByn



做vacuum时,正常情况下需要将表的所有数据扫描一遍。为了提高效率,PolarDB使用了VM(可见性地图)数据文件。

 

如上图,比如当前有三个数据块,第二块里不包含被删除的行,则VM会将其标识为1。后续做vacuum时,会跳过VM=1的页,提高vacuum的效率。

 

9.6版本以后,可见性地图除了提高 vacuum的效率以外,同时也提高了冻结的效率。

 

image.png

 

数据库为了描述事务操作的先后顺序,会为事务分配ID号,即TxID。

 

TxID不会无限增大,而是循环使用。最大的可用事务ID为42亿,PolarDB将其分为两半,前21亿代表“过去的或当前正在用的”,此类事务ID修改的行为对用户可见;而后21亿事务ID代表“未来的”,修改的函数不可见。

 

两个部分的21亿事务ID可以循环使用。比如前面的21亿使用完以后,再用后面的21亿,使用完以后再重新使用前面的21亿。

 

image.png

 

冻结主要针对可见性规则。

 

比如当前正在使用后21亿的TxID,而前21亿中某个数据块里仍有数据,需要对用户可见。因此,将其标记为冻结,使得其可见。

 

冻结处理分为懒惰模式和急切模式。懒惰模式指每次小部分、分批次地进行冻结,类似于日常做卫生;急切模式指大批量地冻结,类似于年终大扫除。

 

image.png

 

惰性冻结的公式中,OldestXmin指当前最小的事务id,vacuum_freeze_min_age是一个固定参数,默认为5000万。

 

image.png

 

以上图为例,假设当前的最小事务id为50002500,意味着要将小于或等于2500的ID都冻结。

 

冻结时,首先会先判断VM值,如果VM为1(当前数据块内不存在被删除的行),则跳过,不对其进行冻结。然后判断每一个块内每一行的事务id,如果id<=2500,则在其某一位上标记为frozen;若id>2500,则跳过。比如上图中Turple9内最后一行id为3000,因此不冻结。

 

image.png

 

急性冻结的触发条件为:自上一次急性冻结后,TxID使用了1亿5000万后会再次触发。

 

image.png

 

如上图,如果从未做过急性冻结,则datfrozenxid默认为560。发生急性冻结后,datfrozenxid会变为该次急性冻结的TxID。

 

image.png

 

如上图所示,当前最小的事务id为150002000,150002000-5000000=100002000,因此事务id小于100002000的行全部进行冻结。

 

比如当前有三个块,PolarDB会对三个块全部进行扫描,事务ID小于100002000的,在该行某一位做frozen标记。

 

可以理解为,只有很早以前的事务修改的行会被冻结,最新修改的行不冻结。


接下篇:https://developer.aliyun.com/article/1223089?groupCode=polardbforpg

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
27天前
|
数据库
|
1月前
|
存储 关系型数据库 MySQL
MySQL vs. PostgreSQL:选择适合你的开源数据库
在众多开源数据库中,MySQL和PostgreSQL无疑是最受欢迎的两个。它们都有着强大的功能、广泛的社区支持和丰富的生态系统。然而,它们在设计理念、性能特点、功能特性等方面存在着显著的差异。本文将从这三个方面对MySQL和PostgreSQL进行比较,以帮助您选择更适合您需求的开源数据库。
118 4
|
2月前
|
人工智能 自然语言处理 关系型数据库
阿里云云原生数据仓库 AnalyticDB PostgreSQL 版已完成和开源LLMOps平台Dify官方集成
近日,阿里云云原生数据仓库 AnalyticDB PostgreSQL 版已完成和开源LLMOps平台Dify官方集成。
|
3月前
|
存储 关系型数据库 分布式数据库
揭秘PolarDB:中国云原生数据库的超级英雄,如何颠覆传统数据存储?
在数字化时代,数据成为企业的核心资产,而云原生数据库则是推动企业转型的关键。PolarDB凭借其先进的存储计算分离架构,在性能、可靠性和易用性方面脱颖而出,成为国内领先的选择。它支持多种数据库引擎,提供多副本存储机制,并采用按量付费模式,有效降低管理和成本压力,助力企业实现高效、可靠的数字化转型。
74 1
|
3月前
|
关系型数据库 分布式数据库 数据库
开源云原生数据库PolarDB PostgreSQL 15兼容版本正式发布
PolarDB进行了深度的内核优化,从而实现以更低的成本提供商业数据库的性能。
|
4月前
|
Cloud Native 关系型数据库 分布式数据库
云原生数据库2.0问题之PolarDB利用云计算技术红利如何解决
云原生数据库2.0问题之PolarDB利用云计算技术红利如何解决
|
4月前
|
Cloud Native 关系型数据库 分布式数据库
云原生关系型数据库PolarDB问题之PolarDB相比传统商用数据库的优势如何解决
云原生关系型数据库PolarDB问题之PolarDB相比传统商用数据库的优势如何解决
42 1
|
4月前
|
存储 关系型数据库 MySQL
再探PolarDB —— PolarDB MySQL 四大场景下的全方位评测
本文全面评测了阿里云PolarDB MySQL在四大关键场景下的表现:Serverless极致弹性、列存索引(IMCI)、弹性并行查询(ePQ)以及无感秒切高可用。通过官方提供的免费体验资源,我们深入了解了PolarDB MySQL的核心能力和性能。Serverless极致弹性列存索引(IMCI弹性并行查询(ePQ)无感秒切高可用此外,文章还介绍了PolarDB MySQL在数据备份和HTAP(混合事务/分析处理)场景下的优势,包括灵活的备份策略、高效的全量和库表恢复方式,以及通过IMCI支持的HTAP能力。这些特性共同构成了PolarDB MySQL作为一款先进的云数据库服务的强大竞争力。
|
18天前
|
SQL 关系型数据库 MySQL
12 PHP配置数据库MySQL
路老师分享了PHP操作MySQL数据库的方法,包括安装并连接MySQL服务器、选择数据库、执行SQL语句(如插入、更新、删除和查询),以及将结果集返回到数组。通过具体示例代码,详细介绍了每一步的操作流程,帮助读者快速入门PHP与MySQL的交互。
32 1
|
20天前
|
SQL 关系型数据库 MySQL
go语言数据库中mysql驱动安装
【11月更文挑战第2天】
35 4

热门文章

最新文章

相关产品

  • 云原生数据库 PolarDB