PostgreSQL 并行vacuum patch - 暨为什么需要并行vacuum或分区表

本文涉及的产品
云原生数据库 PolarDB MySQL 版,Serverless 5000PCU 100GB
云原生数据库 PolarDB 分布式版,标准版 2核8GB
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介:

标签

PostgreSQL , vacuum , freeze , 分区表 , 并行vacuum


背景

我们之前做过一个这样的测试,单表数据从1000万到10亿,对其进行增删改查的压测,性能几乎没有衰减。

数据量 写入吞吐 查询tps 更新tps
1000万 58万行/s 67万 23.1万
1亿 53.2万行/s 63.4万 24.5万
10亿 162.6万行/s 60.6万 23.4万

《HTAP数据库 PostgreSQL 场景与性能测试之 45 - (OLTP) 数据量与性能的线性关系(10亿+无衰减), 暨单表多大需要分区》

是不是就意味着我们不需要对数据库进行分表了呢?

实际上单表太大,还可能引入其他问题,例如:

1、创建索引,大表创建索引时间会更久,当然PostgreSQL 11已经支持单表并行创建索引了,所以这个问题逐渐会不存在。

《PostgreSQL 11 preview - 并行排序、并行索引 (性能线性暴增) 单实例100亿TOP-K仅40秒》

2、加字段并加默认值,或者不能online DDL的操作。单表越大,操作时间会越久。

这个问题的解法:1 支持更多的ONLINE DDL(类似 pg_repack 的原理)。2 支持DDL并行。

3、垃圾回收,因为单表的垃圾回收目前只支持串行,所以单表越大,垃圾回收的时间越长。

这个问题的解法:支持并行VACUUM。社区已经在做这个PATCH。

4、FREEZE表,与垃圾回收类似的问题,单表的垃圾回收,目前只能串行。而FREEZE如果很慢,并且慢过产生TXID的速度,可能导致数据库因为XID耗尽,需要停止业务来进行冻结。

这个问题的解法:1 支持并行VACUUM。社区已经在做这个PATCH。 2 skip clean page(9.6开始已经支持),使得freeze效率高了很多。3 支持64BIT txid,完全杜绝freeze操作。

5、单表可能打爆文件系统,因为单个表只能放在单个表空间中,表空间对应文件系统,所以单表的大小也受到文件系统大小的限制。

这个问题的解法:1 使用类似LVM,ZFS这样的卷管理,使得单个文件系统很大很大。 2 使用分区表。

以上问题是单表很大时,可能出现的问题。

所以单表多大需要使用分区表呢?主要考虑几个方面:

1、表上的DML频率。

2、数据库的硬件性能指标。

3、查询方面的优化需求,例如是否可以通过分区来降维,优化SQL性能。

比较傻瓜式的建议(SSD,多核):

不频繁更新、删除的表:记录数20亿,表占用空间200 GB。就可以考虑分表了。

平反更新、删除、插入的表:记录数2亿,表占用空间20 GB。就可以考虑分表了。

如何平滑将单表切换为分区表?

1、pg_pathman提供了平滑切换到分区表的API。

https://github.com/postgrespro/pg_pathman

《PostgreSQL 9.5+ 高效分区表实现 - pg_pathman》

vacuum的内核改进

针对前面提到的垃圾回收,freeze操作,内核层面可以做出的改进。

1、并行vacuum

https://www.postgresql.org/message-id/flat/CAD21AoD1xAqp4zK-Vi1cuY3feq2oO8HcpJiz32UDUfe0BE31Xw@mail.gmail.com#CAD21AoD1xAqp4zK-Vi1cuY3feq2oO8HcpJiz32UDUfe0BE31Xw@mail.gmail.com

https://commitfest.postgresql.org/13/954/

目前这个PATCH还没有提交到主干。

2、跳过clean page(根据vm文件标记位),9.6开始,就支持了SKIP CLEANUP PAGE,freeze性能大幅提升。

《PostgreSQL 9.6 vacuum freeze大幅性能提升 代码浅析》

3、64bit xid,治本的方法。

https://commitfest.postgresql.org/17/1178/

PostgresPRO 版本引入了64BIT的txid,所以不再需要全局freeze操作。

https://postgrespro.com/docs/enterprise/10/routine-vacuuming.html#VACUUM-FOR-WRAPAROUND

将数据库的PAGE转换为兼容postgrespro的PAGE,可以使用如果工具。

对于FREEZE操作来说,方法1和2都是治标不治本的方法,3是社区正在改进的方向,可以看到社区的commitfest已经在加快做64bit txid 的 refact了。

https://github.com/postgrespro/pg_pageprep

参考

https://www.postgresql.org/message-id/flat/CAD21AoD1xAqp4zK-Vi1cuY3feq2oO8HcpJiz32UDUfe0BE31Xw@mail.gmail.com#CAD21AoD1xAqp4zK-Vi1cuY3feq2oO8HcpJiz32UDUfe0BE31Xw@mail.gmail.com

《HTAP数据库 PostgreSQL 场景与性能测试之 45 - (OLTP) 数据量与性能的线性关系(10亿+无衰减), 暨单表多大需要分区》

《PostgreSQL 11 preview - 并行排序、并行索引 (性能线性暴增) 单实例100亿TOP-K仅40秒》

pg_repack

《PostgreSQL 9.5+ 高效分区表实现 - pg_pathman》

《PostgreSQL 9.6 vacuum freeze大幅性能提升 代码浅析》

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
5月前
|
消息中间件 存储 关系型数据库
PostgreSQL技术大讲堂 - 第33讲:并行查询管理
PostgreSQL从小白到专家,技术大讲堂 - 第33讲:并行查询管理
287 1
|
4月前
|
关系型数据库 MySQL 分布式数据库
PolarDB MySQL版并行查询技术探索与实践
PolarDB MySQL版并行查询技术探索与实践 PolarDB MySQL版在企业级查询加速特性上进行了深度技术探索,其中并行查询作为其重要组成部分,已经在线稳定运行多年,持续演进。本文将详细介绍并行查询的背景、挑战、方案、特性以及实践。
107 2
|
6月前
|
SQL 监控 关系型数据库
PostgreSQL普通表转换成分区表
如何使用pg_rewrite扩展将普遍表转换成分区表
269 0
|
4月前
|
SQL 关系型数据库 分布式数据库
深度解析PolarDB数据库并行查询技术
深度解析PolarDB数据库并行查询技术:加速SQL执行的关键问题和核心技术 随着数据规模的不断扩大,用户SQL的执行时间越来越长,这不仅对数据库的优化能力提出更高的要求,并且对数据库的执行模式也提出了新的挑战。为了解决这个问题,许多数据库系统,包括Oracle、SQL Server等,都开始提供并行查询引擎的支持,以充分利用系统资源,达到加速SQL执行的效果。本文将深入探讨基于代价进行并行优化、并行执行的云数据库的并行查询引擎的关键问题和核心技术。
121 2
|
9月前
|
关系型数据库 PostgreSQL
PostgreSQL vacuum可见性
PostgreSQL vacuum可见性
61 0
|
9月前
|
存储 SQL 运维
PolarDB MySQL大表实践-分区表篇
背景:分区表到底是什么?分区作为传统企业级数据库的特性,早已经在很多大数据和数仓场景中得到广泛应用。基于维基百科的解释,分区是将逻辑数据库或其组成元素如表、表空间等划分为不同的独立部分。数据库分区通常是出于可管理性、性能或可用性的原因,或者是为了负载平衡。它在分布式数据库管理系统中很流行,其中每个分区可能分布在多个节点上,节点上的用户在分区上执行本地事务。这提高了具有涉及某些数据视图的常规事务的站
332 0
PolarDB MySQL大表实践-分区表篇
|
11月前
|
关系型数据库 定位技术 数据库
PostgreSQL技术大讲堂 - 第17讲:Vacuum空间管理工具
PostgreSQL从小白到专家,技术大讲堂 - 第17讲:Vacuum空间管理工具
147 0
|
11月前
|
关系型数据库 分布式数据库 PolarDB
|
11月前
|
关系型数据库 分布式数据库 定位技术
PolarDB for PostgreSQL 开源必读手册-VACUUM处理(中)
PolarDB for PostgreSQL 开源必读手册-VACUUM处理
105 0
|
11月前
|
关系型数据库 分布式数据库 数据库
PolarDB for PostgreSQL 开源必读手册-VACUUM处理(下)
PolarDB for PostgreSQL 开源必读手册-VACUUM处理
119 0

相关产品

  • 云原生数据库 PolarDB