《TDSQL-PG開源版的特性升級與演進(38頁).pdf》由會員分享,可在線閱讀,更多相關《TDSQL-PG開源版的特性升級與演進(38頁).pdf(38頁珍藏版)》請在三個皮匠報告上搜索。
1、TDSQL-PG開源版的特性升級與演進騰訊云數據庫高級工程師陳再妮目錄01 開源發展歷程03 開源重磅升級02 開源特性回顧04 開源生態發展未來計劃第一章TDSQL-PG開源發展歷程TDSQL-PG(原TBase)的定位TDSQL-PG(原TBase)是騰訊自主研發的新一代分布式國產數據庫,其具備業界領先的HTAP能力。無共享MPP兼容SQL2011標準高性能HTAP三權分立安全體系品牌升級后的TBase全稱騰訊云企業級分布式數據庫 TDSQL:Tencent Database SQLT TD DS SQ QL L分布式T TD DS SQ QL L-C C云原生T TD DS SQ QL
2、L-A A 分析型TDSQLMySQL版TDSQLPG版(原TBaseV2/V5)TDSQL-A(原TBaseV3)TDSQLMySQL版(原CynosDBforMySQL)TDSQLPG版(原CynosDBforPG)騰訊云品牌升級:品牌統一為TDSQLTDSQL-PG總體架構DataFunSummit|TDSQL-PG7LocalDataLocalcatalogDatanode1GlobalcatalogCoordinatorTransactionInfoGlobalobjectGTM-MTransactionInfoGlobalobjectGTM-SGlobalcatalogCoordi
3、natorGlobalcatalogCoordinatorLocalDataLocalcatalogDatanode2LocalDataLocalcatalogDatanode3LocalDataLocalcatalogDatanode4DataForwardBus集群數據交互總線Coordinator(協調節點CN)業務訪問入口,每個節點對等,對外提供一致視圖Datanode(數據節點DN)業務數據存儲節點GTM(事務管理器)全局事務管理器,協調集群集群事務,并管理全局對象指標監控運維管理實時告警安全審計數據治理統一資源管理平臺TDSQL-PG發展歷程u 騰訊游戲u 兼容PostgreSQL
4、u 騰訊廣點通u 騰訊視頻u 基于PGXCu 騰訊大數據u PGXZ正式發布u 微信支付商戶系統u 正式更名為TBaseu 接入TCE云平臺u 接入Tstack云平臺u 接入TBDS大數據套件20082012201420152018nowl十數年的深耕互聯網領域l數百技術人員,數十個專利l涵蓋社交、娛樂、游戲、支付等眾多場景服務的數億類用戶l 依托騰訊技術,實現成熟互聯網技術云端產品化l 高彈性、低成本云技術助力企業信息化建設l 基于騰訊云技術產品實現金融級自主可控技術體系l 自主設計的高可用分布式架構l 自動化運維體系實現金融級DEVOPS生態依托騰訊云技術體系,構建全面的金融級數字化技術體
5、系沉淀升華應用全面開放2019u 中標PICC保險行業國內第一個國產分布式數據庫u 11月份上架公有云u 正正式式開開源源某頭部保險集團2019.11.07騰訊正式宣布TDSQL-PG開源開源地址:https:/ 2021.7月騰訊自研的分布式HTAP數據庫TDSQL-PG(開源代號TBase)正式發布了開源V2.2.0版本騰訊開源TDSQL-PGV2.2.0TDSQL-PGV2.2.0開源特性解讀內內存存管管理理優優化化分分布布式式調調優優增增強強執執行行器器/優優化化器器優優化化分分布布式式執執行行可可視視化化 提供會話內存占用詳情查詢視圖 自動釋放內存過大的空閑連接,使得所有空閑連接的內
6、存占用減少89.3%提供LRU替換,使得會話內的內存占用減少55.7%完善了explainanalyze功能,可詳細展示各個DN節點上各個算子的執行信息 方便找到運行較慢的算子,為sql性能優化提供方向 CTE查詢、子查詢優化為關聯查詢,性能提升上百倍 快速SQL下推能力增強,性能提升數十倍 SQL語句兼容性增強(支持分布式場景下帶關聯查詢的UPDATE/DELETE語句等)新增全局session視圖功能 從CN查詢到整個集群的所有會話的運行情況 提供函數能中止或殺死特定會話所屬的進程 方便運維和前端API開發,節省人力成本,加強了用戶對系統的控制力TDSQL-PGV2.2.0開源特性子查詢優
7、化IDVALUE110002200033000.10001000IDVALUE150011000240027000表A1000條記錄213表B這里表B全表掃描需要執行1000次IDVALUE110002200033000.10001000IDVALUE150011000240027000表A這里表B只需要被掃描1次表BIDMIN15002400聚集聚集表HASHHASH JOINBefore:子查詢執行,復雜度O(N2),每條對應記錄,都需要重新執行子查詢一遍。After:我們通過預計算提前獲取結果,使用HashJoin算法,使得每個表僅僅被掃描一次。TDSQL-PGV2.2.0開源特性dis
8、tinct性能優化Before:Distinct語句在CN執行的,CN單節點執行,處理較慢。CNDISTINCT計算datadataDN1DN2CNdatadataDN1DN2PARITALDISTINCT計算PARITALDISTINCT計算FINALDISTINCT計算 DN先計算部分聚集結果 DN將中間計算結果發送給CN CN再進行最后匯總計算并行化中間結果數據量較小,減少大量網絡傳輸After:TDSQL-PGV2.2.0開源特性性能提升現在TPCDS 10之前 TPCDS 10現在TPCDS 35之前 TPCDS 35現在TPCDS 45之前 TPCDS 452H2H2H11.4ms
9、33.57ms35ms性能提升上千倍0100200300400500600現在TPCDS 38之前 TPCDS 38現在SQL 41之前 SQL 41現在SQL 54之前 SQL 54現在SQL 87之前 SQL 87提升547%提升132%提升1239%提升520%平均提升5.5倍TDSQL-PGV2.2.0開源特性內存優化提供內存使用詳情視圖 實例內存詳情 展示實例名稱 內存類型 內存大小 連接內存詳情 展示內存上下文名稱 內存上下文層級 父內存上下文名稱 當前內存上下文的大小 已釋放內存大小 已使用大小TDSQL-PGV2.2.0開源特性內存優化使用情況分析多表訪問后空閑連接進程占用內存
10、大:一個連接訪問1萬張表后的內存占用情況TopMemoryContext 無 4299 58785 數量級增長CacheMemoryContext TopMemoryContext 2252 50921 數量級增長。訪問前占TopMemoryContext的52%,訪問后占87%。LOCALLOCK hash TopMemoryContext 1031 3063 3倍增長,但總量不大Relcache by OID TopMemoryContext 1047 1527 1.5倍增長,但總量不大其他 TopMemoryContext 68 101 總量不大TDSQL-PGV2.2.0開源特性節點內
11、內存優化連接內存使用過大,優先進行LRU替換,使得會話內的內存占用減少55.7%新LRUch_lrulistch_ntup超過ch_maxtup時從后往前遍歷ch_lrulist,把引用計數為0的項刪除,從而釋放內存新LRU項置于ch_lrulist最前面CatCacheLRU新LRURelation LRU ListLRU項目超過MaxRelCacheRelations時從后往前遍歷LRU,釋放引用計數為0的Relation內存項新LRU項置于最前面RelCacheLRU新增配置參數MaxRelCacheRelations新增RelCache LRU結構新增配置參數MaxCatCacheTu
12、plesCatcacheheader結構中新增兩項Int32_t ch_maxtup;Dllist ch_lrulist;TDSQL-PGV2.2.0開源特性分布式內存管理PoolerCoordinator1PostgresDatanode1PostgresDatanode2PostgresPostgresPostgresApp控制連接的內存使用,防止快速增長 實時檢測空閑連接已經使用的內存大小,只要大于pool_session_memory_limit就釋放內存。min_free_size外的空閑連接的內存使用過大,則自動釋放內存 系統空閑連接的內存占用減少89.3%TDSQL-PGV2.2
13、.0開源特性內存優化效果優優化化前前優優化化后后CN內存DN內存總內存CN內存DN內存總內存4.9*2=9.8M20.8*2=41.6M9.8+41.6=51.4M2.7*2=5.4M05.4+0=5.4M測試場景:DN和CN數都是2個;設定訪問10000張表,統計訪問完成后連接占用的內存優化結果:1.自動釋放了內存過大的DN連接,空閑連接內存減少:89%2.提供Relcache LRU替換,CN連接內存減少:55%9.841.651.45.405.40102030405060CN內存DN內存連接總內存優化前后對比圖優化前優化后TDSQL-PGV2.2.0開源特性分分布布式式執執行行原原理理C
14、Ndn1重分布:XXdn2重分布:XX Remote Subquery Scan on all 執執行行流流程程dn1 Seq Scan on tbl_b dn1dn2dn2 Seq Scan on tbl_b Remote Subquery Scan on all 圖中dn1,dn2代表dn1,dn2上具體執行執行計劃的進程DN1不是復制DN2tbl_b的全部數據,而是通過SharedQueue對tbl_b做重分布DN1上兩個進程會同時綁定SharedQueue,先綁定的成為生產者,后綁定的成為消費者,DN2也是一樣的情況DN1DN2Hash Join SharedQueue XXBinds
15、qXXasproducerBindsqXXasconsumerBindsqXXasproducerBindsqXXasconsumerDistribute Remote Subquery Scan on all Hash Join DistributeSharedQueue XXpostgres=#explain select*from tbl_a,tbl_b where tbl_a.f1=tbl_b.f2;QUERY PLAN -Remote Subquery Scan on all(db1,db2)(cost=140.38.503.73 rows=9112 width=16)-Hash J
16、oin (cost=140.38.503.73 rows=9112 width=16)Hash Cond:(tbl_b.f2=tbl_a.f1)-Remote Subquery Scan on all(db1,db2)(cost=100.00.141.05 rows=1350 width=8)Distribute results by S:f2 -Seq Scan on tbl_b (cost=0.00.23.50 rows=1350 width=8)-Hash (cost=23.50.23.50 rows=1350 width=8)-Seq Scan on tbl_a (cost=0.00.
17、23.50 rows=1350 width=8)(8 rows)TDSQL-PGV2.2.0開源特性分分布布式式執執行行可可視視化化增增強強 新增全局session視圖功能 在所有的CN和DN節點的postgresql.conf中增加配置shared_preload_libraries=pg_stat_cluster_activity 創建插件 createextensionpg_stat_cluster_activity;從CN上查詢整個集群的所有會話所屬進程的運行情況selectxxxfrompg_stat_cluster_activity;提供函數能中止或殺死特定會話所屬的進程selec
18、tpg_terminate_session($sessionid);TDSQL-PGV2.2.0開源特性分分布布式式執執行行過過程程可可視視化化增增強強select*from tbl_a,tbl_b where tbl_a.f1=tbl_b.f2;第三章TDSQL-PG開源重磅升級TDSQL-PGV2.3.0開源特性解讀分分區區表表能能力力增增強強分分布布式式死死鎖鎖檢檢測測功功能能多多活活易易用用性性增增強強2PC殘殘留留自自動動清清理理 新增hash分區表、default分區功能 分區鍵可update修改功能 支持多級分區,分區父表索引自動同步子表功能 分區剪枝優化性能提升30%分區joi
19、n性能提升近10倍 EXTENSION模式,安裝便捷 pg_unlock_check_deadlock死鎖檢測 pg_unlock_execute死鎖解除 pg_unlock_check_dependency事務依賴關系 EXTENSION模式,安裝便捷 tbase_subscription訂閱并行度自由配置 多CN負載均衡訂閱,靈活指定 EXTENSION模式,安裝便捷 pg_clean_check_txn檢測2PC殘留 pgxc_get_record_list查查看殘留事件 pg_clean_execute自動清理2PC殘留TDSQL-PGV2.3.0開源特性分區表能力增增強強tbltbl
20、_202001tbl_202002tbl_defaultdatevalue201912xxx202003yyy202003zzztbl hash(id)tbl_0(modulus 3,remainder 0)tbl_1(modulus 3,remainder 1)tbl_2(modulus 3,remainder 2)除range和list外新增hash分區表 需要指定hash模數和余數 存儲不屬于其他子分區的所有數據 僅range和list分區支持,hash分區不支持新增hash分區類型新增default分區TDSQL-PGV2.3.0開源特性分區表能力增增強強tbltbl_202001tb
21、l_202002tbl_default 自動將此修改后的數據加入30-60范圍的子表 而刪除0-30范圍子表中的舊數據 支持父表上創建唯一索引(需要包含分區鍵)以前只支持子表普通索引,父表不能創建索引分區鍵可Update分區父表建索引自動同步子表tbl為父表,i id d為為分分區區鍵鍵-tbl_id_part_0_30為id 0-30的子表;-tbl_id_part_30_60為id 30-60的子表;tbl_id_part_0_30tbl_id_part_30_60idname10lili20judy25lucyidname30jim40kiki50lucyUpdate tbl set i
22、d=50 where id=25;Create index idx1 on tbl(id);idx1 btree(id)tbl_202001_id_idx btree(id)tbl_default_id_idx btree(id)tbl_202002_id_idx btree(id)TDSQL-PGV2.3.0開源特性分區表能力增增強強partition-wise join 關閉 partition-wise join 打開 1186719020406080100120140查詢耗時(單位:s,7個分區,共10G數據)Join性能對比v2.2.0v2.3.0(wise_join=off)v2.
23、3.0(wise join=on)TDSQL-PG開源特性-異地多活北京廣州北方備庫同步復制同步復制雙向復制南方備庫北方服務北方主庫南方服務南方主庫多中心多活兩地三中心單活北京廣州北方備庫同步復制南方備庫北方服務南方服務南方主庫異步復制延遲大單單活活多多活活時延跨地域接入,時延大就近接入,時延小故障切換流程服務 和 數據庫都需要切換,流程復雜只需服務層切換,流程簡單,RTO秒級地域容災南北網絡故障時,北方用戶不可用業務在一個中心閉環,南北網絡故障時,服務不受影響TDSQL-PG開源特性-異地多活架構深圳CNCNIDC1DN001備DN002備DN001主主DN002主主上海CNCNIDC2DN
24、001備DN002備DN001主主DN002主主雙雙向向同同步步GTM主GTM備GTM主GTM備業務應用服務業務應用服務TDSQL-PGV2.3.0開源特性多活易用性增增強強 新增tbase_subscription工具,安裝便捷 CREATEEXTENSIONtbase_subscription;多通道并行訂閱CREATETBASESUBSCRIPTIONxxxWITH(parallel_number=$n);多CN負載均衡CN1CREATETBASESUBSCRIPTIONsub_dn001CONNECTIONdn1鏈接信息;CN2CREATETBASESUBSCRIPTIONsub_dn
25、002CONNECTIONdn2鏈接信息;使用指導https:/ a;Begin;Select*from b;獲得a表的ACCCESS SHARE 鎖獲得b表的ACCCESS SHARE 鎖Drop table b;Drop table a;請求b表的ACCESS EXCLUSIVE鎖;請求a表的ACCESS EXCLUSIVE鎖;鎖沖突鎖沖突至此,兩個事務間形成分布式死鎖(CN1上的事務和CN2上的事務死鎖)TDSQL-PGV2.3.0開源特性分布式死鎖檢查 新增pg_unlock工具,安裝便捷 CREATEEXTENSIONpg_unlock;查找事務間鎖依賴關系 查找集群中的死鎖 解開死
26、鎖(回滾了cn001上的事務)TDSQL-PGV2.3.0開源特性2PC殘留DN2上的事務為abort狀態,其他節點的還為prepare狀態,出現2PC殘留CN1DN1DN2CN2begin;create table a(id int);prepare transaction create_a;set xc_maintenance_mode=on;execute direct on(dn002)rollback prepared create_a;set xc_maintenance_mode=off;qCN1DN1DN2CN2begin;create table a(id int);prep
27、are transaction create_a;TDSQL-PGV2.3.0開源特性2PC殘留清理 新增pg_clean工具,安裝便捷 CREATEEXTENSIONpg_clean;查找2PC殘留 查看殘留事務及參與的節點 清理2PC殘留(因為dn002為aborted狀態,因此回滾了此事務)第四章TDSQL-PG開源生態未來發展計劃TDSQL-PG新特性Roadmap分分布布式式狀狀態態可可視視化化分布式session可視化分布式query可視化分布式事務狀態可視化分布式鎖可視化存存儲儲能能力力加加強強數據存儲透明壓縮能力Direct IO能力優優化化器器能能力力提提升升分布式子查詢性能優化分布式關聯join性能提升更準確的執行計劃生成索索引引優優化化全局索引能力提供非分布建查詢性能提升