【摘要】 衆所周知,數據量大了之後,性能是大家關注的一點,所以我們在業務開發的時候,特别關注性能,做為一個架構師,必須對性能要了解,要懂。才能設計出高性能的業務系統。
一、GaussDB分布式架構
所謂集群是将多台物理服務器組建成一個邏輯平台,對外展現一個集群平台的形式。
所謂分布式架構是将數據分而治之。以邏輯進行劃分,将數據存放在不同的物理節點。
CN:協調節點 負責接收來自應用的訪問請求,并向客戶端返回執行結果。Coordinator負責分解任務,并調度任務分片在DataNode上并行執行。
CN:SQL語句的解析和任務規劃,把具體的任務下發給DN結構
GTM:生成和維護全局事務ID、事務快照、時間戳等需要全局唯一的信息。
DN:數據節點,負責存儲業務數據(支持行存、列存、混合存儲)、執行數據查詢任務以及向Coordinator返回執行結果。【不單存儲還負責計算】
一台物理機【2-4個DN】
Coorinator做任務的規劃 分發,規劃完之後,把具體的任務抛給計算節點。
Crew3 Worker1和Crew3 Worker2就是任務樹中的葉節點就是數據的掃描任務,接受下級任務的數據輸入,向上級任務輸出數據。
Crew2 Worker1和Crew2 Worker2中間的節點就是各種數據運算任務,如Hash計算,Join操作,聚集操作和排序操作。接受下級任務的數據輸入,向上級任務輸出數據。
在非阻塞的任務流程中,上級任務不需要等待下級完成全部任務返回整體結果級才啟動,下級任務生成一條結果記錄就可以傳遞給上級。
阻塞情況下,上級任務需要等待下級任務完成所有數據處理工作。
二、調優原則與流程
說白了,就是少花錢,多辦事,資源利用最大化,比如我們在點查詢場景的時候盡量使用索引掃描。如果實在不能索引掃描,我們會讀取每一條元組和點查詢條件進行匹配。
在沒有資源瓶頸的情況下,盡量充分利用資源,比如在數據排序的時候,盡量使數據不下盤,在内存進行排序。因為在磁盤中讀寫的速度,肯定是不如内存的。
局部聚簇是列存儲下獨有的手段,通過把表數據按照指定列排序後存儲,配合稀疏索引,可以實現表數據的快速掃描。【華為獨有的科技】
發現一個犯罪嫌疑人,還有他的車輛,我怎麼通過數據挖掘來找到犯罪團夥的場景。
四、調優實踐
Plan Information:在sql語句執行的時候,perf語句會包含非常多的執行動作,也會消耗很多的資源,我們通過perf把這些信息都記錄下來。常用的是前2個。Plan 執行過程中每個算子的執行概要信息。比如:scan,join等。另外一個是算子,with信息。
Predicate Information: 算子信息,每條數據掃描,伴随的filter條件,join伴随的關聯字段。
CUNone:0我忽略了多少個數據段
CUSome:6我需要掃描多少個數據段
Scan的性能提升的兩個主要策略
1)減少實際IO
a)索引
b)pck
c)分區
2)Scan壓力均衡
a)調整分布列
數據批量入庫的時候,按字段做一些排序。排完序之後,再入庫。
導入表數據和統計信息。
Time:10.422ms
不包含PCK大概花了23.902ms
pck建立的場景和索引的建立場景是有點像的。
nestloop的在特定場景下,性能會非常好,比如小表join大表的時候,
hashjoin在大多數場景下,性能最優。大表join大表
hash join一般期望數據量小的表做内表,
hash join:137ms
merge join:775ms
nestloop:1137.9ms
1.truncate和delete快
答: truncate 整個文件都不讀 delete标記元組 删除
2.PCK對入庫的數據做局部排序影響較小。
3.MPP數據庫性能瓶頸在哪些?
答:數據庫性能瓶頸在具體數據處理業務場景,分布式架構場景下,業務CPU吃滿了,瓶頸在CPU,内存吃滿了,瓶頸在内存。
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!