天天看点

PostgreSQL 10.0 preview 性能增强 - mergesort(Gather merge)

postgresql , 10.0 , merge sort , gather merge

在数据库中,经常会有多个节点append,然后sort的情况。

例如一张表有10个分区,查询所有分区,并按某列排序输出,常规的做法是所有的记录append,然后sort。

postgresql 10.0 将支持append node的并行计算,也就是说所有的分区表可以并行的sort,然后返回,此时就可以使用merge sort来提高排序的速度。

另外,像单表的并行计算,如果需要排序输出的话,每个worker process可以并行的排序,然后在merge sort输出结果。

在许多分布式数据库中,merge sort也是必备的,否则排序都收到上层节点做是非常耗费cpu和内存的。

merge sort原理,首先要保证下层的所有节点返回的数据是有序的(例如每个node都按id的顺序返回),以轮询所有下层node的方式组装并返回有序结果。

merge sort和merge join的原理也类似。

merge sort的性能提升示例

讨论

这个patch的讨论,详见邮件组,本文末尾url。

postgresql社区的作风非常严谨,一个patch可能在邮件组中讨论几个月甚至几年,根据大家的意见反复的修正,patch合并到master已经非常成熟,所以postgresql的稳定性也是远近闻名的。

<a href="https://commitfest.postgresql.org/13/810/">https://commitfest.postgresql.org/13/810/</a>

<a href="https://www.postgresql.org/message-id/flat/cagpqqf09opx-cqrpbks0gq49z+m6kbxgxd_p9gx8ckk_d75hoq@mail.gmail.com#cagpqqf09opx-cqrpbks0gq49z+m6kbxgxd_p9gx8ckk_d75hoq@mail.gmail.com">https://www.postgresql.org/message-id/flat/cagpqqf09opx-cqrpbks0gq49z+m6kbxgxd_p9gx8ckk_d75hoq@mail.gmail.com#cagpqqf09opx-cqrpbks0gq49z+m6kbxgxd_p9gx8ckk_d75hoq@mail.gmail.com</a>

继续阅读