【PostgreSQL 】PostgreSQL 12的8大改进,性能大幅度提升

本文涉及的产品
云原生数据库 PolarDB PostgreSQL 版,标准版 2核4GB 50GB
云原生数据库 PolarDB MySQL 版,通用型 2核8GB 50GB
简介: 【PostgreSQL 】PostgreSQL 12的8大改进,性能大幅度提升

 

PostgreSQL 12专注于性能和优化。此版本的发布并未考虑到全新的闪亮功能;相反,它是对现有PostgreSQL功能的微调和精心设计的实现。因为PostgreSQL每年都会发布新版本,所以并不是每一个新功能都完全具备。在发布了几个版本之后,当该功能有机会从其最初的实现中发展出来时,其性能将得到改善,边缘情况将得到支持,缺失的功能将得到实现。

这是PostgreSQL 12中发现的八个最重要的改进。

1.分区性能

分区并不是一项新功能,它已经存在了好几年了,但是分区开销却降低了性能。PostgreSQL 11引入了一些分区性能改进,而PostgreSQL 12提供了完善的实现。对于从具有数千个分区的其他数据库迁移来的用户,PostgreSQL 12现在通过提供可同时有效处理数千个分区的功能而带来性能优势。分区性能增强可以提高查询性能,尤其是INSERT和COPY语句的性能。此外,用户现在可以更改分区表而不会阻止查询,并可以使用外键引用分区表。

2. B树增强

B-Tree功能是近年来对PostgreSQL添加的最复杂的功能之一。使用B树的好处是减少了访问的磁盘块的数量。考虑到B-Tree技术可以追溯到1970年代,很难对已经存在数十年的可靠功能进行改进。但是PostgreSQL 12团队致力于提供可自动启用的重大性能改进,旨在避免某些极端情况和B树代码中曾经存在的“病理行为”。现在,通过更有效地利用空间,多列索引大小最多可减少40%,从而节省了磁盘空间。具有重复项(非唯一B树索引)的索引的性能得以提高,并且从索引中删除元组(行)的真空运行效率更高。此外,索引更新期间的锁定要求有所降低。

3.多列最有价值(MCV)统计信息

此更新已经进行了几年的开发,旨在解决多年来引起投诉的问题:查询中相关列的边缘情况。以俄亥俄州辛辛那提为例-您有一个标记为“城市”的字段,另一字段称为“州”,其中“辛辛那提”位于一列,而俄亥俄州则在另一列。俄亥俄州的辛辛那提市将相当普遍,但亚利桑那州的辛辛那提市却很少见。在此功能之前,PostgreSQL仅记录了多个列的单个相关值。从本质上讲,它将俄亥俄州的辛辛那提和亚利桑那州的辛辛那提视为同一件事。现在,您可以比较多个列并关联组合以优化查询索引。

4.公用表表达式(CTE)

正确实现的另一个过期功能是通用表表达式(带有查询内联)。公用表表达式充当优化障碍,公用表表达式中的查询首先执行,然后PostgreSQL将在查询中执行之后的任何操作。一些用户采用通用表表达式来提高SQL的可读性和调试,而不是优化SQL的执行。这些用户不可避免地会遇到优化行为。PostgreSQL 12使用关键字“ MATERIALIZE”实现了一项新功能,该功能允许用户打开优化围栏。如果您不使用MATERIALIZE,则不会获得优化范围,并且可能会看到更快的查询。

5.准备好的计划控制

一项重要的新功能使用户可以控制PostgreSQL优化器的行为,并有可能提高性能。早期版本的PostgreSQL将使用自定义计划五次,第六次创建一个通用计划,并在与自定义计划一样好的情况下使用它。现在,可以通过名为“ plan_cache_mode”的新变量手动控制此行为,该变量允许用户立即强制执行通用计划。这为那些知道其参数恒定并且知道通用计划将起作用的用户带来了显着的性能优势。

6.即时编译

PostgreSQL 11最初引入的一项功能是现在在PostgreSQL 12中默认启用即时复杂功能。即时编译允许处理大量数据的数据仓库查询来更有效地运行执行程序。由于许多用户启用了此功能,因此该功能现已成为PostgreSQL 12的默认功能。

7.校验和控制

追溯到2013年,PostgreSQL引入了一种校验和功能,用于识别数据损坏。首次初始化数据库时必须打开此功能,否则用户必须转储,打开该功能并重新加载数据。这使得某些用户几乎无法使用该功能。在PostgreSQL 12中,通过一个称为“ pg checksums”的命令(以前称为pg verify checksum),用户可以在不转储和重新加载数据的情况下将群集从无校验和更改为校验和。当前,在此更改期间,群集必须处于脱机状态,但是正在开发联机校验和支持。

8.并发重新编制索引

索引并发功能已经存在多年,允许用户创建索引而又不阻止写入索引。重新索引不允许您在写入数据库时创建索引。同时使用reindex,通过在同一位置创建新索引来替换现有索引。同时使用Reindex可以写入索引并保留原始索引名称。显然,当替换索引时,最小的锁定将发生,直到实现替换为止。长期以来要求的功能很难开发,但最终在PostgreSQL 12中交付。

升级到PostgreSQL 12

这八个功能只是PostgreSQL 12中许多改进中的几个。从分区改进到公用表表达式的实现,PostgreSQL 12提供了显着的可用性增强,将使许多新用户和长期用户满意。

 

Postgres已成为数据库领域的巨头。根据2019年Stack Overflow对近90,000名开发人员的调查,Postgres的部署现在比SQL Server部署得更为普遍。

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
9月前
|
存储 关系型数据库 数据库
postgresql|数据库|提升查询性能的物化视图解析
postgresql|数据库|提升查询性能的物化视图解析
824 0
|
监控 关系型数据库 数据库
《PostgreSQL性能大提升:实用优化技巧》
《PostgreSQL性能大提升:实用优化技巧》
803 0
|
存储 SQL 监控
22 PostgreSQL 监控3PostgreSQL 性能快照和图形化分析工具 pg_stats_info 的使用|学习笔记
快速学习22 PostgreSQL 监控3PostgreSQL 性能快照和图形化分析工具 pg_stats_info 的使用
22 PostgreSQL 监控3PostgreSQL 性能快照和图形化分析工具 pg_stats_info 的使用|学习笔记
|
6月前
|
缓存 关系型数据库 数据库
PostgreSQL性能
【8月更文挑战第26天】PostgreSQL性能
84 1
|
5月前
|
缓存 关系型数据库 数据库
如何优化 PostgreSQL 数据库性能?
如何优化 PostgreSQL 数据库性能?
208 2
|
4月前
|
存储 关系型数据库 MySQL
四种数据库对比MySQL、PostgreSQL、ClickHouse、MongoDB——特点、性能、扩展性、安全性、适用场景
四种数据库对比 MySQL、PostgreSQL、ClickHouse、MongoDB——特点、性能、扩展性、安全性、适用场景
|
5月前
|
缓存 关系型数据库 数据库
PostgreSQL的性能
PostgreSQL的性能
231 2
|
6月前
|
缓存 关系型数据库 数据库
PostgreSQL 查询性能
【8月更文挑战第5天】PostgreSQL 查询性能
99 8
|
6月前
|
关系型数据库 Java 数据库
PostgreSQL性能
【8月更文挑战第5天】PostgreSQL性能
164 7
|
6月前
|
监控 关系型数据库 数据库
如何优化PostgreSQL的性能?
【8月更文挑战第4天】如何优化PostgreSQL的性能?
304 7