最近搞了一个公众号PostgreSQL运维技术,欢迎来踩~
悄悄放一张:
PostgreSQL运维技术
原文:https://www.interdb.jp/pg/pgsql5.html
典型的特性有:
逻辑复制支持分区表
Btree索引优化(引入Deduplication
技术)
增量排序(Incremental Sorting
)
支持并行VACUUM
索引
数据库管理
下面分别看下
逻辑复制支持分区表
PostgreSQL 13 版本的逻辑复制新增了对分区表的支持,如下:
-
可以显式地发布分区表,自动发布所有分区。
-
从分区表中添加/删除分区将自动从发布中添加/删除。
Btree索引优化(引入Deduplication技术)
PostgreSQL 13 版本的Btree索引在存储层面引入了一个重要的技术,名为Deduplication,是指索引项去重技术。
表中的列如果不是唯一的,可能会有很多相同的值,对应的B树索引也会有很多重复的索引记录。在Postgresql13中索引借鉴了GIN索引的做法,将相同的key指向的对应行的ctid链接起来。
好处:
Deduplication技术的引入能够减少索引的存储空间和维护开销,同时提升查询效率。
索引的Deduplication选项默认是开启的,如果想关闭指定索引的Deduplication,设置存储参数deduplicate_items为off即可。
增量排序(Incremental Sorting)
当对一组数据集(x,y)按照x、y列进行组合排序,如果当前数据集已经按x进行了排序。这时,只需要对数据集按照X分组,并在每组中对y列继续排序,就可以得到按照x、y排序的结果集。
好处:对于特别大的数据集来说,这样会减少每次排序的数据量,这里可以通过一定的策略控制让每次排序的数据量更适应当前设置的work_mem。另外一方面,在postgresql的瀑布模型执行器中,我们可以不用全部数据的排序结果,就可以得到部分结果集,非常适合带Limit关键字的top-N查询。
坏处:如果每个分组较大,分组数量较少的话,增量排序的代价会比较高。如果每个分组较小,分组数量较多的话,我们使用增量排序利用之前排好序的结果需要的代价比较小。为了中和两者的影响,PostgreSQL 13 中采用了2种模式:
-
抓取相对安全的行数不需要检查之前的排序键进行全排,这里的安全是基于一些代价的考虑。
-
抓取所有的行,基于之前的排序键上再进行分组排序。
PostgreSQL 优化器是优先会去使用模式1,然后启发式地使用模式2。
并行VACUUM
在之前的版本中,每个表的VACUUM 操作并不能并行,当表比较大的时候,VACUUM 的时间就会很长。在PostgreSQL 13中,支持了对索引的并行VACUUM,目前有很多的限制:
-
目前仅限于索引,每个索引可以分配一个vacuum worker。
-
不支持在加上FULL选项后使用。
-
只有在至少有2个以上索引的表上使用parallel选项才有效。
数据库管理优化
-
reindexdb 命令增加--jobs 选项,允许用户并行重建索引。
-
引入了“可信插件”的概念,它允许超级用户指定一个普通用户可以安装的扩展,当然,该用户需要具有CREATE权限。
-
增强数据库状态的监控,跟踪WAL日志的使用统计、基于流式备份的进度和ANALYZE指令的执行进度。
-
支持pg_basebackup 命令生成辅助清单文件,可以使用pg_verifybackup 工具来验证备份的完整性。
-
可以限制为流复制槽所保留的WAL空间。
-
可以为standby 设置临时流复制槽。
-
pg_dump 命令新增了--include-foreign-data参数,可以实现在导出数据时导出外部数据封装器所引用的其他服务器上的数据。
-
pg_rewind 命令不仅可以在宕机后自动恢复,并且可以通过--write-recover-conf选项来配置PostgreSQL备库。 支持在目标实例上使用restore_command来获取所需的WAL日志。
参考:
https://www.postgresql.org/about/news/postgresql-13-beta-1-released-2040/
https://developer.aliyun.com/article/764721?spm=a2c6h.14164896.0.0.38b7e81aiA6Eiw