天天看點

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>

繼續閱讀