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