ETL 效能分析

2021-10-01 17:29:20 字數 1939 閱讀 8418

etl過程中難免遇到效能問題,執行很慢是一件較常見的事情,遇到這些問題時,我們該如何分析,解決呢?首先我們要找到問題出在**,也就是系統的瓶頸在哪.

確定環境是否有瓶頸:檢查資源是否有效配置,也就是要確定是由cpu、記憶體、i/o和網路等產生的瓶頸,還是由etl處理過程產生的瓶頸。

根據資料特徵,確定分區分桶:

分割槽字段選擇:一般原則為根據系統的業務型別來分則分割槽字段。通常來講事實表是資料都包含時間屬性,而報表業務也多在一定的時間範圍內做統計分析,那麼根據時間字段進行分割槽是常用的選擇。而如果業務更多按照部門做統計分析,那麼更適合按照部門**,地域**進行分割槽。所以貼近業務的特點擊擇分割槽是第一要素。

分割槽個數:分割槽個數的選擇需要綜合考量資料的特性,在選擇好分割槽欄位後,我們需要根據資料的特點確定分割槽個數的可選擇區間。分割槽個數不宜太少,需要根據業務特點來確定,並保證分割槽裡面不會太多的冷熱資料混合。譬如sql業務大部分都是操作2~3個月的資料,那麼我們就盡量按照3個月做乙個分割槽,如果我們選擇1年做乙個分割槽的話,每個sql業務實際執行的時候就會多讀取前面9個月的資料,這這部分的資源和io開銷都是沒有必要的。

實際情況中我們看到的更多的ddl設計都是分割槽數量過多,譬如單個分割槽的資料量不超過1gb,或者按照天來分割槽,這些都是不合適的設計。分割槽過多的壞處是會導致過多的系統資源占用。

分桶字段選擇:一般遵循的原則為,選擇離散度高的字段進行分桶。可以通過收集的資料特徵,如distinct value來做參考,值越大的可以優先作為考慮物件。分桶字段選擇時,注意盡量使記錄分布均勻,避免資料傾斜。

分桶個數:針對不同的儲存型別,分桶個數的標準稍微有所差別。以orc表舉例,對於普通orc表,單分桶大小可以在200m以內;對於orc事務表,標準適當降低,檔案大小限制在100m以內,記錄條數限制在幾百萬條左右。在考慮分桶個數的時候,同時要考慮是否已經分過區。對於已經分過區的表,要按照單區的大小和條數進行桶數的估計,而不是依照原始表。例如某執行商專案中,我們發現某些表進行分區分桶後,分桶數量過大,導致每個桶的檔案大小僅僅為幾十k,這樣就會使單個task的執行效率很低,同時總體任務數過大也對系統資源造成極大浪費,併發度上不去。調整方案是根據實際情況,將原桶數降低數量級。

依次分析抽取、計算、查詢表、聚集、過濾、載入等環節的處理操作.

先將抽取部分隔離出來,去掉轉換和交付,可以將資料直接抽取到檔案中。如果這一步效率很差,基本確定是抽取sql的問題。

針對全抽取,在etl處理中進行過濾的處理方式而言。在etl處理中做過濾處理有時會產生瓶頸。可以先將過濾去掉,如果確定為這個原因,可以考慮在抽取時進行資料過濾。

參照資料在etl處理過程中通常會載入到記憶體中,目的是做**和名稱的查詢替換,也稱查詢表。有時查詢表的資料量過大也會產生瓶頸。可以逐個隔離查詢表,來確定是否是這裡出現問題。

排序和聚集操作都是非常費資源的操作。對這部分隔離,如果你對大資料開發感興趣,想系統學習大資料的話,可以加入大資料技術學習交流扣群:458數字345數字782獲取學習資源,來判斷是否因為它們引起效能問題。如果確定是因為這個,需要考慮是否可以將排序和聚集處理移出資料庫和etl工具,移到作業系統中來處理。

有時轉換過程中的處理操作也會引起etl工作的效能。逐步隔離移除它們來判斷**出了問題。要注意觀察像預設值、資料型別轉換等操作。

更新操作在資料量非常大時是效能非常差的。隔離這部分,看看是否這裡出了問題。如果確定是因為大批量更新出了效能問題。應該考慮將insert、update和delete分開處理。

如果前面各部分都沒有問題,最後需要檢測是目標資料庫的效能問題。可以找個檔案代替資料庫,如果效能提高很多,需要仔細檢測目標資料庫的載入過程中的操作。例如是否關閉了所有的約束,關閉了所有的索引,是否使用了批量載入工具。如果效能還沒有提高,可以考慮使用並行載入策略。

結合task運**況做監控幫助分析問題.

觀察task數量是否存在task數量過多或者過少的情況,這一般是有上面說的分區分通不合理導致的.

task傾斜導致拖尾,一般是計算或聚集環節不當操作導致.

通過觀察同時併發執行的stage數量確保執行的合理性.

ETL概念,ETL流程

etl是將業務系統的資料經過抽取 清洗轉換之後載入到資料倉儲的過程,目的是將企業中的分散 零亂 標準不統一的資料整合到一起,為企業的決策提供分析依據。etl是bi專案重要的乙個環節。通常情況下,在bi專案中etl會花掉整個專案至少1 3的時間,etl設計的好壞直接關接到bi專案的成敗。etl的設計分...

mysql 效能分析 Mysql效能分析

優化mysql資料庫效能的十個引數 1 max connections 允許的同時客戶的數量。增加該值增加 mysqld 要求的檔案描述符的數量。這個數字應該增加,否則,你將經常看到 too many connections 錯誤。預設數值是100,我把它改為1024 2 record buffer...

etl學習1 認識etl

etl即資料抽取 extract 轉換 transform 裝載 load 的過程,它是構建資料倉儲的重要環節。etl是將業務系統的資料經過抽取 清洗轉換之後載入到資料倉儲的過程,目的是將企業中的分散 零亂 標準不統一的資料整合到一起,為企業的決策提供分析依據。etl是bi專案重要的乙個環節。通常情...