通過在24核CPU,64G內(nèi)存的機(jī)型上進(jìn)行測試,9000W數(shù)據(jù)的排序在最短可以在25 ms內(nèi)完成,QPS最高可達(dá)5400。
六.并行優(yōu)化
隨著當(dāng)前硬件的發(fā)展,系統(tǒng)資源越來越豐富,多CPU大內(nèi)存成了系統(tǒng)標(biāo)配,充分利用這些資源可以有效的提升的處理效率優(yōu)化性能。騰訊在2014年底開始進(jìn)行PostgreSQL多核執(zhí)行優(yōu)化。
目前PostgreSQL9.6社區(qū)版也會(huì)包含部分并行化特性,但是沒有我們這邊這么豐富,下面介紹下騰訊PostgreSQL并行化的原理和效果:

系統(tǒng)創(chuàng)建一個(gè)全局的共享內(nèi)存管理器,使用bitmap管理算法進(jìn)行管理
系統(tǒng)啟動(dòng)時(shí)創(chuàng)建一定數(shù)據(jù)的Executor,這些Executor用來執(zhí)行執(zhí)行計(jì)劃的碎片
系統(tǒng)會(huì)創(chuàng)建一個(gè)計(jì)劃隊(duì)列,所有的Executor都會(huì)在任務(wù)隊(duì)列上等待計(jì)劃
每個(gè)Executor對(duì)應(yīng)一個(gè)任務(wù)結(jié)果隊(duì)列,Executor在輸出結(jié)果時(shí)就把結(jié)果的指針掛到結(jié)果隊(duì)列中去
計(jì)劃隊(duì)列,結(jié)果隊(duì)列,計(jì)劃分片執(zhí)行結(jié)果都存放在共享內(nèi)存管理器中,這樣所有的進(jìn)程都可以訪問到這些結(jié)構(gòu)
Postgres會(huì)話進(jìn)程在收到sql時(shí),判斷是否可以并行化,并進(jìn)行任務(wù)的分發(fā);在結(jié)果隊(duì)列中有結(jié)果時(shí)就讀出返回
我們完成優(yōu)化的算子:
Seqscan
Hash join
Nestloop join
Remote query
Hash Agg
Sort Agg
Append
通過在24核CPU,64G內(nèi)存的機(jī)型下測試,各個(gè)算子的優(yōu)化結(jié)果:





整體來說性能普遍是優(yōu)化前的10-12倍,優(yōu)化的效果比較明顯。
七.騰訊PostgreSQL-XZ的兩地三中心容災(zāi)
兩地三中心容災(zāi)是金融級(jí)數(shù)據(jù)庫的必備能力,對(duì)于金融類業(yè)務(wù)數(shù)據(jù)安全是最基本也是最重要訴求,因此我們?yōu)榱吮U细咝Х€(wěn)定的數(shù)據(jù)容災(zāi)能力,也為PostgreSQL-XZ建設(shè)了完善的兩地三中心自動(dòng)容災(zāi)能力。具體的兩地三中心部署結(jié)構(gòu)如下:

同城節(jié)點(diǎn)間采用強(qiáng)同步方式,保障數(shù)據(jù)強(qiáng)一致;異地采用專網(wǎng)異步同步。
節(jié)點(diǎn)內(nèi),每臺(tái)物理機(jī)上部署CAgent,agent收集機(jī)器狀態(tài)并進(jìn)行上報(bào),并進(jìn)行相應(yīng)的告警和倒換執(zhí)行功能。
每個(gè)IDC至少部署一個(gè)JCenter,JCenter負(fù)責(zé)收集上報(bào)每個(gè)agent上報(bào)的狀態(tài)到ZK集群。這么多個(gè)JCenter中只有一個(gè)是主用,主用的JCenter除了進(jìn)行狀態(tài)上報(bào)還進(jìn)行故障裁決和倒換。在主用的JCenter異常后,系統(tǒng)通過ZK自動(dòng)裁決挑選一個(gè)備用的JCenter升主。
JCenter和CAgent是兩地三中心的控制和裁決節(jié)點(diǎn)。
對(duì)于數(shù)據(jù)庫節(jié)點(diǎn),CN在每個(gè)IDC至少部署一個(gè)。DN在每個(gè)中心部署一個(gè),一個(gè)為主,另外兩個(gè)并聯(lián)作為備機(jī)放在主機(jī)上,一個(gè)為同步備機(jī),另外一個(gè)為異步備機(jī)。
在主機(jī)故障宕機(jī)時(shí),JCenter優(yōu)先選擇同城的備機(jī)升主。
目前,騰訊云已經(jīng)提供云數(shù)據(jù)庫PostgreSQL的內(nèi)測使用,并將提供內(nèi)核優(yōu)化版和社區(qū)版兩個(gè)版本來滿足更多客戶的要求。