今年6月,騰訊云數(shù)據(jù)庫(kù)TDSQL PG版Oracle兼容能力以及TDSQL-A兩大引擎全新升級(jí),Oracle兼容性和海量數(shù)據(jù)查詢分析能力再上新臺(tái)階。為幫助開發(fā)者更清楚的了解到騰訊云數(shù)據(jù)庫(kù)究竟做了什么,特推出"DBTalk數(shù)據(jù)庫(kù)企業(yè)級(jí)能力國(guó)產(chǎn)化”專場(chǎng),就數(shù)據(jù)庫(kù)引擎在Oracle兼容核心能力構(gòu)建、海量數(shù)據(jù)分析引擎構(gòu)架設(shè)計(jì)、下一代列式存儲(chǔ)原理、復(fù)雜查詢執(zhí)行優(yōu)化等方面進(jìn)行深入解讀。
本期帶來(lái)各講師分享精華及直播回顧視頻。
《深入解讀TDSQL的Oracle兼容及管控能力》
騰訊云數(shù)據(jù)庫(kù)高級(jí)產(chǎn)品經(jīng)理李曉慧
TDSQL for PostgreSQL Oracle引擎版全新升級(jí),支持更多的Oracle兼容特性,具有更強(qiáng)的管控能力,同時(shí)提供私有云和公有云兩種服務(wù)方式,并且支持分布式和集中式兩種架構(gòu)。騰訊云數(shù)據(jù)庫(kù)高級(jí)產(chǎn)品經(jīng)理李曉慧分享的內(nèi)容主要有三個(gè)方面,分別為TDSQL PG版的架構(gòu)概覽、Oracle兼容性和重點(diǎn)管控能力。
TDSQL PG版集群分為OSS管理系統(tǒng)和數(shù)據(jù)庫(kù)實(shí)例兩部分,OSS管理系統(tǒng)主要包含如下幾個(gè)組件:
·center運(yùn)維管理中心是OSS的核心部分,負(fù)責(zé)處理用戶對(duì)集群的相關(guān)操作,通過(guò)OSS的WEB端下發(fā)命令到Center,再下發(fā)到各個(gè)Agent或者數(shù)據(jù)庫(kù)節(jié)點(diǎn)執(zhí)行,同時(shí)還負(fù)責(zé)定時(shí)任務(wù)的調(diào)度和執(zhí)行。
·confdb是OSS的配置數(shù)據(jù)庫(kù),負(fù)責(zé)存儲(chǔ)整個(gè)集群的元數(shù)據(jù)信息,例如節(jié)點(diǎn)關(guān)系等。
·etcd集群提供OSS管理系統(tǒng)的高可用支撐,負(fù)責(zé)OSS Center和ConfDB的選主,同時(shí)存儲(chǔ)高可用信息。
·agent是OSS具體任務(wù)執(zhí)行者,在每臺(tái)物理機(jī)上安裝一個(gè),與數(shù)據(jù)庫(kù)節(jié)點(diǎn)一起進(jìn)行混合部署,每臺(tái)部署了數(shù)據(jù)庫(kù)節(jié)點(diǎn)的物理機(jī)上都需要安裝一個(gè)Agent服務(wù)。OSS管理系統(tǒng)通過(guò)Agent實(shí)現(xiàn)對(duì)每個(gè)數(shù)據(jù)庫(kù)節(jié)點(diǎn)的狀態(tài)監(jiān)控和操作。
TDSQL PG版提供分布式形態(tài)和集中式形態(tài)給到客戶靈活選擇。分布式實(shí)例包含GTM、CN、DN節(jié)點(diǎn),集中式只包含DN節(jié)點(diǎn)。
·GTM(Global Transaction Manager)是全局事務(wù)管理,提供實(shí)例范圍的統(tǒng)一時(shí)鐘和支持分布式事務(wù)。
·CN是指協(xié)調(diào)節(jié)點(diǎn),負(fù)責(zé)處理業(yè)務(wù)的讀寫請(qǐng)求,轉(zhuǎn)發(fā)請(qǐng)求到DN,匯聚多個(gè)DN的結(jié)果。
·DN節(jié)點(diǎn)負(fù)責(zé)保存實(shí)例的數(shù)據(jù)。
TDSQL PG版經(jīng)過(guò)多年的行業(yè)打磨,在特定行業(yè)的適配下其兼容性高達(dá)98%及以上,主要體現(xiàn)在接口、功能、語(yǔ)法和生態(tài)四個(gè)大的層面。
·在訪問(wèn)接口上,我們支持JDBC/ODBC、C/C++、OCI、Python等多種訪問(wèn)方式,OCI我們支持100+多個(gè)常用的接口。
·在語(yǔ)法上,兼容全部的內(nèi)置數(shù)據(jù)類型,內(nèi)置函數(shù)包含單行函數(shù)、聚合函數(shù)、分析函數(shù)在內(nèi),共計(jì)100+個(gè);PL/SQL方面,兼容程序的定義、變量的定義、多種控制結(jié)構(gòu)、動(dòng)態(tài)SQL等;系統(tǒng)內(nèi)置包兼容了常用的10多個(gè);系統(tǒng)視圖兼容了常用的40+個(gè)。
·在功能上,分區(qū)表、查詢、同義詞、序列、rownum、rowid等多種特性都進(jìn)行了兼容。
·在生態(tài)上,我們提供了從兼容性評(píng)估、數(shù)據(jù)遷移、數(shù)據(jù)同步、數(shù)據(jù)比對(duì)、業(yè)務(wù)交割等一系列的方案。
李曉慧表示,管控系統(tǒng)主要是負(fù)責(zé)管理整個(gè)數(shù)據(jù)庫(kù)集群,包含非常豐富的功能,它同時(shí)可以管理集中式和分布式的實(shí)例,集租戶管理、服務(wù)器資源管理、實(shí)例監(jiān)控運(yùn)維管理于一體。從集群部署、實(shí)例生產(chǎn)、實(shí)例擴(kuò)容、故障修復(fù)到行優(yōu)化和資源回收,貫穿TDSQL整個(gè)運(yùn)營(yíng)生命周期。
用戶在應(yīng)用遷移到TDSQL PG版之后如何更容易的使用分布式數(shù)據(jù)庫(kù)一直是TDSQL for PG團(tuán)隊(duì)致力于解決的問(wèn)題,以下李曉慧著重分享了三個(gè)方面的企業(yè)級(jí)能力:
·分布式快速擴(kuò)容:能夠解決傳統(tǒng)擴(kuò)容在搬遷數(shù)據(jù)時(shí)需要消耗大量時(shí)間的問(wèn)題,該工具能將分布式的數(shù)據(jù)節(jié)點(diǎn)快速?gòu)?組擴(kuò)容成2組,從而極大減少了變更的時(shí)間窗口。
·分布式備份恢復(fù):提供物理備份恢復(fù)和邏輯備份恢復(fù)的能力,并且能實(shí)現(xiàn)分布式的PITR恢復(fù)。
·全局session視圖:能夠提供分布式下的執(zhí)行狀態(tài)樹,讓分布式數(shù)據(jù)庫(kù)中的進(jìn)程運(yùn)行狀態(tài)一目了然。
《TDSQL-A全新引擎構(gòu)架揭秘》
騰訊云數(shù)據(jù)庫(kù)專家工程師伍鑫
TDSQL-A作為騰訊首款自研MPP分析型數(shù)據(jù)庫(kù),于2021年5月發(fā)布后,在政務(wù),公安,電信,金融等多個(gè)企業(yè)級(jí)項(xiàng)目中嶄露頭角。經(jīng)過(guò)團(tuán)隊(duì)過(guò)去一年的深入探索和改進(jìn),TDSQL-A迎來(lái)全面升級(jí)版本,騰訊云數(shù)據(jù)庫(kù)專家工程師伍鑫強(qiáng)調(diào)在自研列式存儲(chǔ)、向量化引擎、并行執(zhí)行邏輯、計(jì)算層緩存等核心技術(shù)模塊取得重大性能突破,通用場(chǎng)景分析性能提升十倍以上。另外對(duì)產(chǎn)品周邊生態(tài)工具以及易用性上也持續(xù)投入,推出高速數(shù)據(jù)流轉(zhuǎn)工具、查詢瓶頸自動(dòng)分析工具、復(fù)雜查詢自動(dòng)優(yōu)化能力等。
伍鑫表示,TDSQL-A通過(guò)基于heap表的元數(shù)據(jù)實(shí)現(xiàn),將列存的MVCC設(shè)計(jì)與行存表統(tǒng)一,使得TDSQL-A的列存表能夠完美支持DML、分布式事務(wù)一致性、并發(fā)更新等能力。同時(shí)列存表也支持B-Tree/Hash索引,range/hash/list等多級(jí)分區(qū)表能力。用戶使用起來(lái)更加方便,在選擇存儲(chǔ)類型建表后,用戶基本可以無(wú)感知的進(jìn)行行列混合多表關(guān)聯(lián)、基于索引的點(diǎn)查詢加速、多任務(wù)并發(fā)入庫(kù)/查詢。
伍鑫在分享中提到,PostgreSQL和大多通用關(guān)系型數(shù)據(jù)庫(kù)一樣,執(zhí)行引擎選擇適應(yīng)性更強(qiáng)的標(biāo)準(zhǔn)火山模型。數(shù)據(jù)自下而上按tuple元組級(jí)別被一條條的向上流轉(zhuǎn)。本次升級(jí)TDSQL-A主要聚焦向量化執(zhí)行執(zhí)行方向進(jìn)行框架改造和深入優(yōu)化。針對(duì)TPC-DS場(chǎng)景做到所有語(yǔ)句支持向量化執(zhí)行。
作為通用分析型數(shù)據(jù)庫(kù),系統(tǒng)并不會(huì)對(duì)多表關(guān)聯(lián)查詢操作進(jìn)行限制,用戶可以自由根據(jù)業(yè)務(wù)模型進(jìn)行表設(shè)計(jì)及優(yōu)化,而這其中最復(fù)雜的模塊非查詢優(yōu)化器莫屬。TDSQL-A分布式優(yōu)化器結(jié)合CBO與RBO對(duì)MPP分布式計(jì)算進(jìn)行最佳查詢計(jì)劃搜尋,保證查詢?cè)赥PC-DS級(jí)別的語(yǔ)句中,基本可以做到無(wú)需優(yōu)化器參數(shù)調(diào)優(yōu),用默認(rèn)參數(shù)就可以生成最佳執(zhí)行計(jì)劃。而在多個(gè)企業(yè)級(jí)項(xiàng)目的復(fù)雜(20~30張表關(guān)聯(lián))業(yè)務(wù)場(chǎng)景中,也得到了很好的效果驗(yàn)證。
伍鑫強(qiáng)調(diào),TDSQL-A在本次升級(jí)后,提供了增強(qiáng)的資源組(Resource Group)管控能力,為角色Role提供資源組配置能力,相同資源組內(nèi)用戶可以設(shè)置優(yōu)先級(jí)控制。資源組能力控制本身支持基于CGroup的CPU資源管控,基于query_mem的語(yǔ)句級(jí)內(nèi)存資源管控能力。整體保證集群CPU、內(nèi)存等資源完全在內(nèi)核范圍可控,避免因復(fù)雜查詢導(dǎo)致系統(tǒng)資源耗盡帶來(lái)的異常狀況。用戶可以基于資源組支持多租戶能力,靈活進(jìn)行業(yè)務(wù)資源隔離。
TDSQL-A海量數(shù)據(jù)處理情況下,PostgreSQL原生的Copy數(shù)據(jù)導(dǎo)入性能成為瓶頸,如何快速將前端OLTP/ODS數(shù)據(jù)導(dǎo)入到TDSQL-A進(jìn)行分析成為了整個(gè)生態(tài)中關(guān)鍵的一環(huán)。這里我們針對(duì)分析型數(shù)據(jù)庫(kù)多DN節(jié)點(diǎn)進(jìn)行了分布式優(yōu)化,用戶建立基于TDX(TDSQL-A Data Exchanger)的外部表,在數(shù)據(jù)導(dǎo)入導(dǎo)出過(guò)程中,DN并行的從TDX進(jìn)行數(shù)據(jù)分片的收取和發(fā)送,整體性能達(dá)到Copy的數(shù)十倍。
《詳解列存儲(chǔ)設(shè)計(jì)支撐HTAP場(chǎng)景》
騰訊云數(shù)據(jù)庫(kù)高級(jí)工程師呂夫洋
關(guān)于TDSQL-A列存儲(chǔ)的底層架構(gòu)設(shè)計(jì),以及這些設(shè)計(jì)是如何支撐傳統(tǒng)的分析性數(shù)倉(cāng)場(chǎng)景以及HTAP混合負(fù)載場(chǎng)景的,騰訊云數(shù)據(jù)庫(kù)高級(jí)工程師呂夫洋在本次分享中給出了答案。
呂夫洋的分享主要分為三個(gè)部分,數(shù)據(jù)庫(kù)存儲(chǔ)引擎背景,存儲(chǔ)引擎基礎(chǔ)架構(gòu)設(shè)計(jì)以及重要組件以及混合負(fù)載業(yè)務(wù)場(chǎng)景以及引擎內(nèi)部機(jī)制。
行存儲(chǔ)引擎交每行的數(shù)據(jù)連續(xù)的存儲(chǔ)在一起,對(duì)于交易性業(yè)務(wù)、也就是OLTP這樣頻繁以行作為單位存儲(chǔ)表中數(shù)據(jù)的業(yè)務(wù)負(fù)載,行存儲(chǔ)性能比較好,適合于交易型和點(diǎn)操作。但是,呂夫洋重點(diǎn)提到對(duì)于分析性業(yè)務(wù),使用行存儲(chǔ)會(huì)將當(dāng)次查詢不相關(guān)的列數(shù)據(jù)讀入內(nèi)存中,會(huì)帶來(lái)額外的系統(tǒng)資源開銷。使用列存儲(chǔ)模型通過(guò)將表中的列連續(xù)的存儲(chǔ)在一起,能夠很好的解決這個(gè)問(wèn)題,且在對(duì)大數(shù)據(jù)量的范圍操作或者復(fù)雜查詢場(chǎng)景下有著優(yōu)異的表現(xiàn)。
如果一個(gè)系統(tǒng)中需要同時(shí)承載交易性和分析型兩種混合的業(yè)務(wù)負(fù)載,一般簡(jiǎn)稱HTAP,針對(duì)OLTP優(yōu)勢(shì)的傳統(tǒng)的行存與針對(duì)OLAP優(yōu)勢(shì)的列存都無(wú)法很好單一的同時(shí)應(yīng)對(duì)兩種類型。呂夫洋表示,業(yè)界實(shí)現(xiàn)往往無(wú)法避免以下問(wèn)題:需要額外的系統(tǒng)資源(存儲(chǔ)資源、計(jì)算資源)、難以兼顧數(shù)據(jù)的實(shí)時(shí)性和強(qiáng)一致性、業(yè)務(wù)需要對(duì)存儲(chǔ)進(jìn)行感知。
帶著使用一套存儲(chǔ)、一套資源,來(lái)同時(shí)滿足混合業(yè)務(wù)負(fù)載的目標(biāo),呂夫洋及其團(tuán)隊(duì)設(shè)計(jì)了TDSQL-A的新存儲(chǔ)引擎,Effective_Storage_Engine,簡(jiǎn)稱Estore。Estore引擎中一張Estore表主要由三部分組成:
·Silo是Estore的存儲(chǔ)數(shù)據(jù)的單位,也是處理的最小單位。每個(gè)Silo包含一組數(shù)據(jù)(默認(rèn)65535行)中其中一列的數(shù)據(jù),方便系統(tǒng)對(duì)其進(jìn)行批量操作、壓縮、存儲(chǔ)。Silo是一個(gè)完全自描述的存儲(chǔ)單元,Silo頭部獨(dú)立存儲(chǔ)了Silo數(shù)據(jù)相關(guān)的讀取與解析信息,因此也允許Silo可以根據(jù)自身的數(shù)據(jù)類型、數(shù)據(jù)特征以及表級(jí)別/列級(jí)別指定使用對(duì)應(yīng)的壓縮算法,選擇針對(duì)自身數(shù)據(jù)特征最合適的壓縮算法或壓縮算法的組合。
·registry表作為Estore表的元信息表,是Estore表的主體組織結(jié)構(gòu)。registry每一行對(duì)應(yīng)一個(gè)存儲(chǔ)單元Silo進(jìn)行元數(shù)據(jù)管理,即為一個(gè)Silo的“代理”,存儲(chǔ)其元信息、預(yù)處理信息、以Silo的存儲(chǔ)位置信息。
·Stash表是Estore表創(chuàng)建后同步創(chuàng)建的一張行存表,與原表有著相同的表定義,但使用行存表作為存儲(chǔ)。Stash表的作用為充當(dāng)Estore表的“臨時(shí)區(qū)“角色,針對(duì)單次行數(shù)在一定閾值下的操作,其相關(guān)數(shù)據(jù)會(huì)先行被放入Stash表中,以行存儲(chǔ)的形式存儲(chǔ)起來(lái),一方面應(yīng)對(duì)碎片化沖擊,保證registry/silo存儲(chǔ)以及相關(guān)機(jī)制的高效運(yùn)作。同時(shí),由于放在Stash表中的都是近期單條/小批量插入或更新的數(shù)據(jù),Stash表也就在實(shí)際上起到了Estore表類似“熱數(shù)據(jù)分片”的概念。
在混合負(fù)載場(chǎng)景中,呂夫洋用兩種比較常見(jiàn)的場(chǎng)景來(lái)舉例說(shuō)明混合負(fù)載場(chǎng)景中引擎內(nèi)部的作用。
一種是碎片化的增量數(shù)據(jù),即非bulkload方式將數(shù)據(jù)供給到數(shù)據(jù)庫(kù)內(nèi)核。單個(gè)事務(wù)內(nèi)新增行數(shù)或者數(shù)據(jù)量涉及少,單操作次數(shù)頻繁。這種情況下,Estore表的Stash回優(yōu)先承載碎片化數(shù)據(jù),然后統(tǒng)一批量合并至Silo存儲(chǔ),避免碎片化數(shù)據(jù)對(duì)Silo產(chǎn)生直接沖擊。
又比如用戶可能選擇使用一套系統(tǒng),在日間其業(yè)務(wù)高峰時(shí)間處理正常的交易型業(yè)務(wù)負(fù)載,在夜間或凌晨業(yè)務(wù)低峰期在同一套系統(tǒng)中針對(duì)相關(guān)數(shù)據(jù)或全量歷史數(shù)據(jù)產(chǎn)生報(bào)表或進(jìn)行進(jìn)一步BI分析。
在主要以交易型業(yè)務(wù)負(fù)載下,引擎內(nèi)部面對(duì)短事務(wù)新增的數(shù)據(jù)以及從臨時(shí)數(shù)據(jù)中點(diǎn)更新的數(shù)據(jù)的新版本,數(shù)據(jù)自動(dòng)的流向了Stash表,整體業(yè)務(wù)負(fù)載集中在Stash表的行存儲(chǔ)結(jié)構(gòu)上;
在夜間或者凌晨進(jìn)行跑批、報(bào)表和統(tǒng)計(jì)的業(yè)務(wù)負(fù)載下,經(jīng)過(guò)批量操作以及配置呢,數(shù)據(jù)由stash自動(dòng)的流向silo,由silo的存儲(chǔ)結(jié)構(gòu)來(lái)承載復(fù)雜的分析型業(yè)務(wù)查詢,利用silo批量、壓縮、元數(shù)據(jù)過(guò)濾以及各類加速的能力,并提供很好的批量操作以及很多性能優(yōu)化。
《大數(shù)據(jù)場(chǎng)景下的復(fù)雜查詢執(zhí)行優(yōu)化》
騰訊云數(shù)據(jù)庫(kù)專家工程師張倩
騰訊云數(shù)據(jù)庫(kù)專家工程師在分享中提到了TDSQL-A數(shù)據(jù)庫(kù)的分布式架構(gòu)中有三種節(jié)點(diǎn):協(xié)調(diào)節(jié)點(diǎn)CN,用來(lái)接收用戶發(fā)過(guò)來(lái)的查詢;數(shù)據(jù)交互節(jié)點(diǎn)FN,用來(lái)做數(shù)據(jù)交換;數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)DN,用來(lái)存儲(chǔ)業(yè)務(wù)數(shù)據(jù)。其中,CN的主要職責(zé)是接收查詢并生成一個(gè)全局的查詢計(jì)劃,根據(jù)查詢計(jì)劃創(chuàng)建DN執(zhí)行進(jìn)程,下發(fā)對(duì)應(yīng)的計(jì)劃分片,并在執(zhí)行過(guò)程中管控各個(gè)執(zhí)行進(jìn)程,返回最終的查詢結(jié)果。FN節(jié)點(diǎn)的職責(zé)是負(fù)責(zé)DN之間、以及CN和DN之間的數(shù)據(jù)傳遞,DN節(jié)點(diǎn)的職責(zé)是執(zhí)行CN下發(fā)的計(jì)劃分片。
張倩表示,基于這樣的分布式架構(gòu),TDSQL-A數(shù)據(jù)庫(kù)的優(yōu)化器采用分布式的計(jì)劃策略,包含兩個(gè)方面:
第一是正確性,在不同的數(shù)據(jù)分布情況下,優(yōu)化器應(yīng)該選擇一個(gè)正確的數(shù)據(jù)重分布方式,來(lái)保證計(jì)算結(jié)果的正確性;
第二是代價(jià)最優(yōu),在正確性的前提下選擇一個(gè)性能最優(yōu)的數(shù)據(jù)重分布方式。
張倩強(qiáng)調(diào),除了分布式計(jì)劃策略,優(yōu)化器還采用并行的計(jì)劃策略。并行執(zhí)行具有一定的額外代價(jià),優(yōu)化器會(huì)根據(jù)代價(jià)來(lái)選擇不同的并行策略,包括是否開啟并行和選擇并行worker數(shù)?;诖鷥r(jià)模型,結(jié)合分布式和并行的計(jì)劃策略,優(yōu)化器在計(jì)劃分片內(nèi)根據(jù)代價(jià)來(lái)選擇不同的并行策略,在計(jì)劃分片間解耦并行策略。在這基礎(chǔ)上,優(yōu)化器進(jìn)一步支持向量化的計(jì)劃策略。針對(duì)HTAP場(chǎng)景,支持行列混合的計(jì)劃和執(zhí)行,其中行處理和向量化可以互相轉(zhuǎn)換。基于代價(jià)模型,在并行、分布式和向量化計(jì)劃策略的基礎(chǔ)上,優(yōu)化器綜合考慮各方面因素,生成一個(gè)全局代價(jià)最優(yōu)計(jì)劃。
對(duì)于并行計(jì)劃,執(zhí)行器中會(huì)由gather、gathermerge以及remote subplan算子來(lái)負(fù)責(zé)啟動(dòng)并行執(zhí)行,包括啟動(dòng)執(zhí)行worker、子查詢執(zhí)行、還有執(zhí)行worker的管控等。此外remote subplan算子還支持并行的數(shù)據(jù)收發(fā),同時(shí)支持上下層計(jì)劃分片的并行執(zhí)行解耦。
并行執(zhí)行的設(shè)計(jì)包含兩個(gè)原則,一是支持共享的數(shù)據(jù)處理,二是支持不確定的、隨機(jī)的數(shù)據(jù)處理。當(dāng)前TDSQL-A數(shù)據(jù)庫(kù)的執(zhí)行器中支持大部分scan、agg、join、以及cte算子等的并行執(zhí)行。在此基礎(chǔ)上,張倩團(tuán)隊(duì)進(jìn)一步開發(fā)了向量化的執(zhí)行引擎,支持scan、agg、join、以及remote subplan等算子的向量化執(zhí)行,同樣支持串行執(zhí)行和并行執(zhí)行兩套執(zhí)行流程。TDSQL-A數(shù)據(jù)庫(kù)的向量化設(shè)計(jì),既有批量執(zhí)行的優(yōu)勢(shì),又能靈活地處理短路場(chǎng)景,從而達(dá)到執(zhí)行效率最優(yōu)。
最后,張倩分享了TDSQL-A數(shù)據(jù)庫(kù)的SQL引擎全面優(yōu)化表現(xiàn)在,在優(yōu)化器方面,基于代價(jià)估算,結(jié)合分布式、并行、子查詢優(yōu)化、向量化等策略,生成一個(gè)全局最優(yōu)的查詢計(jì)劃;在執(zhí)行器方面,優(yōu)化整合分布式、并行以及向量化執(zhí)行,進(jìn)一步提升查詢執(zhí)行性能,實(shí)現(xiàn)通用場(chǎng)景下查詢性能較上一版本的十倍提升。