高效的并行計算能力
更新時間 2025-02-05 09:36:31
最近更新時間: 2025-02-05 09:36:31
分享文章
本頁介紹天翼云TeleDB數據庫高效的并行計算能力。
TeleDB支持兩級并行,從而實現高效的并行計算能力。兩級并行分別為多節點之間的并行和節點內的并行。
- 多節點之間并行執行:分布式事務需要多節點一起完成。多個節點之間是并行的,例如:所有DDL語句,涉及元數據變更,需在所有CN、DN節點上執行。批量INSERT語句、不帶分布鍵的SELECT、UPDATE、DELETE語句,需在所有DN節點上執行。
- 節點內基于數據頁的并行計算:對于大表查詢,為充分利用服務器多核處理能力,在節點內同時啟動多個進程并行計算,協同完成一個任務。
說明TeleDB支持設置參數,通過參數來顯示表的大小。當表的數據量超過一定閾值時,會啟用并行。當需要并行計算的時候,優化器會根據表大小得出并行度,啟動多個進程并行執行。如果有更多的資源,執行速度可以根據并行度實現線性擴展。
實際使用中常見的是join關聯,和aggregate數據匯聚(也就是group by),下面以hash join和aggreagte為例,介紹TeleDB的并行計算能力。
- hash join
仍以TBL_A關聯TBL_B表查詢為例,兩表大小相當時,優化器會優先選擇hash join方式關聯,流程如下:
- 獲取TBL_B表所有數據。
- TBL_B表的每一行計算哈希值,構建一張哈希表。
- 訪問TBL_A表每一行數據。
- TBL_A表每一行計算哈希值。
- TBL_A表每一行哈希值,匹配哈希表,得到匹配結果。
- 并行hash join
對于大表關聯,優化器根據資源估算,可以啟動多個進程,并行掃描數據,然后并行hash join,流程如下:
- 多個進程并行訪問TBL_B表的一部分數據。
- 每個進程各自構建一張哈希表。
- 合并所有進程的哈希表,構建出一張共享哈希表。
- 多個進程并行訪問TBL_A表的一部分數據。
- 多個進程并行計算出TBL_A表每一行的哈希值。
- 多個進程并行匹配共享哈希表,得到匹配結果。
相比沒有開啟并行hash join的查詢,并行hash join的性能提升,主要有并行掃描和并行hash join,而在構建哈希表和哈希表匹配部分的并行計算能力,可以讓查詢性能隨著并行度的提升而提升。
- aggregate匯聚計算
例如:TBL_A表的簡單sum、avg等匯聚計算。
左圖為沒有開啟并行時的執行流程,只需要查詢、匯聚兩步。
- 并行aggregate匯聚計算
右圖為開啟并行后的執行流程,流程如下:
- 多個進程并行訪問TBL_A表的一部分數據。
- 多個進程并行計算aggregate,得到一個中間結果。
- 所有中間結果進行一次數據重分布,將相同group by匯聚列的數據分布在同一個進程中。
- 多個進程并行再做一次最終的aggregate,然后匯總,得到匯聚結果。