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