AnalyticDB for MySQL推出Spark SQL診斷功能,若您提交的Spark SQL存在效能問題,您可以根據診斷資訊快速定位、分析並解決效能瓶頸問題,最佳化Spark SQL。本文主要介紹如何進行Spark SQL效能診斷以及效能診斷的樣本。
前提條件
叢集的產品系列為企業版、基礎版或湖倉版。
已建立資料庫帳號。
如果是通過阿里雲帳號訪問,只需建立高許可權帳號。
如果是通過RAM使用者訪問,需要建立高許可權帳號和普通帳號並且將RAM使用者綁定到普通帳號上。
已授權AnalyticDB for MySQL扮演AliyunADBSparkProcessingDataRole角色來訪問其他雲資源。
注意事項
僅支援診斷14天以內且執行成功的Spark SQL。
操作步驟
登入雲原生資料倉儲AnalyticDB MySQL控制台,在左上方選擇叢集所在地區。在左側導覽列,單擊集群清單,在企業版、基礎版或湖倉版頁簽下,單擊目的地組群ID。
在左側導覽列,單擊。
查詢列表展示SQL查詢的更多資訊,例如具體的SQL語句、查詢提交時間、執行耗時等,詳細說明如下:
欄位名
欄位說明
操作
單擊診斷,查看執行詳情,包括詳細SQL語句以及診斷結果。
SQL
SQL語句。
查詢ID
查詢ID。
執行ID
Spark SQL應用中該SQL的順序ID。
狀態
SQL語句的執行狀態,包括:
已完成
運行中
失敗
開始時間
查詢提交的時間。
執行耗時
SQL語句的執行耗時。
最大運算元專屬時間
運算元單獨佔用的最大執行時間。
峰值記憶體
查詢消耗的峰值記憶體。
掃描資料
查詢從儲存層返回到計算層的資料量。
單擊SQL語句對應操作列的診斷。
在查詢屬性頁面,單擊執行計畫頁簽來查看目標查詢的執行計畫樹圖。
在執行計畫樹右側,單擊查詢層級診斷結果,即可直接查看Query層級診斷結果。
Query層級診斷結果
AnalyticDB for MySQL的Spark SQL診斷功能可以對Spark SQL查詢的Query層級的資訊進行統計,再在統計資訊的基礎上進行診斷並提供調優建議。
Join存在資料膨脹
問題:
如果Join運算元的輸出行數大於輸入行數,則認為是不合理Join操作,會存在資料膨脹問題。最終導致較多計算資源和記憶體資源被佔用,查詢變慢。
建議:
最佳化代碼,例如提前過濾不參與Join的資料,以減少資料計算量。
掃描資料量傾斜
問題:
Spark SQL運行期間掃描多表資料量之間差距過大,會在讀取資料時間上存在長尾效應,影響最終查詢效果。
建議:
通過選擇合適的分布欄位來減少表掃描的資料量。