PostgreSQL13 新特性介绍

举报
大象数据库 发表于 2020/12/14 16:04:21 2020/12/14
【摘要】 PostgreSQL 13已经发布了,其中包含了很多新特性。本文将用实例介绍其中的4个新特性,如索引去重优化,并行vacuum,增量排序, 可信插件等,让读者先睹为快。

PostgreSQL 13.0版本已于2020-09-24发行,目前最新版为PostgreSQL 13.1PostgreSQL 13版本中包含了令人欣喜的新特性和优化,其中典型的有:

  • Btree索引优化(引入Deduplication技术)
  • 支持增量排序
  • 支持并行vacuum index
  • 支持可信插件
  • 支持扩展统计信息
  • 支持hash aggregation使用磁盘存储

 本文我们将选取几个PostgreSQL 13中的重点新特性进行介绍,让读者先睹为快。

1.       Btree索引优化

如果一张表的某些列值不是唯一的,那么将会存在很多重复值,一旦该列上建有索引的话,那么索引也会有很多重复的索引项。在PostgreSQL 13中引入了deduplicate功能,该功能将会定期的将重复的索引项合并,有效地减少了索引的存储空间。随着索引项的减少,重建索引、vacuum索引的速度都将获得提升,查询的效率也会得到提升。

     下面我们分别在PostgreSQL 12  13 版本中创建唯一索引和包含大量重复项的索引,比较一下效果。测试脚本如下:

CREATE TABLE test_tbl (id int4, str varchar(64), time timestamp without time zone);
INSERT INTO test_tbl (id, str, time) SELECT round(100000000*random()), 'test_tbl_000' || num, '2020-12-31 24:00:00' FROM generate_series(1,6000000) num;
CREATE UNIQUE INDEX idx_on_str ON test_tbl USING BTREE(str);
CREATE INDEX idx_on_time ON test_tbl USING BTREE(time);

    idx_on_str是唯一索引;idx_on_time是非唯一索引,存储的索引项都一样。

    PostgreSQL 12.2 查看索引大小,如下:

    p1.png

 在PostgreSQL 13 中查看索引大小:

    p2.png

 根据以上信息可以看出,创建索引后,唯一索引在12版本13版本大小一致,都是232MB;但是非唯一索引的差别较大,13版本的非唯一索引大小约为12版本的1/3不到,减小了很多存储空间。

2.       增量排序

增量排序用在多列排序的场景下来加快排序速度。例如,下面的SQL

SELECT * FROM table ORDER BY c1, c2 LIMIT 10;

如果c1已经排好序,那么只需要在此基础上对c2进行增量排序即可。PostgreSQL 13 版本新增了enable_incrementalsort参数控制是否开启增量排序,此参数默认开启,可以通过set enable_incremental_sort = off 关闭。

下面我们在100万条数据的表上测试一下增量排序的效果:

未打开增量排序:

p3.png

打开增量排序:

p4.png

未打开增量排序前,sql执行时间为222ms,打开增量排序之后,执行时间变为0.213ms,性能相比未开启增量排序时提升了好几个数量级。

3.       支持并行VACUUM

  PostgreSQL 13支持了对索引的并行VACUUM,可以通过指定parallel选项打开该功能。使用该功能存在如下限制:

  • 目前仅限于索引的并行vacuum,每个索引会分配一个vacuum worker
  • 不支持在加上FULL选项后使用。
  • 只有在至少包含有2个及以上索引的表上使用parallel选项才有效。
  • 索引的大小超过min_parallel_index_scan_size

 下面我们准备一张包含300万条数据的表,表上建了两个索引,在PostgreSQL 13上对比下正常vacuum和并行vacuum的效果:

 先看在PostgreSQL 13正常vacuum的情况:

    p5.png

  再看下在pg13下并行vacuum的执行情况:

     p6.png

 从上图比较可以看到,启用并行vacuum之后时间由356ms减少到42ms,提升了8倍多。

4.     可信插件

    PostgreSQL 13允许 superuser安装一些被指定为可信的插件到自己的数据库中,只要该用户拥有 CREATE 权限即可。之前的版本是当用户想安装一个插件的时候,必须具有superuser权限。在pg13里将不需要这样了:只要某个插件被标记为“trusted”,那么就不再需要superuser权限了。插件是否可信,取决于插件的control文件,只要在control文件里设置了trusted = true,那么该插件就是可信的。

   我们创建一个普通用户,然后用该用户登录数据库去创建插件会失败:

   p7.png

    然后我们在pg_stat_statements.control文件里加上trusted = true之后再去尝试就成功了:

   p8.png

5.       总结

    PostgreSQL 13带来了很多令人欣喜的新特性和优化,本文限于篇幅只介绍了其中4个。包括逻辑复制支持分区表,扩展统计信息,跟踪wal使用信息等很多很有意思的功能读者可以自行探索。

    详细说明请参考社区官方Release Noteshttps://www.postgresql.org/docs/13/release-13.html


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。