云原生數據倉庫 AnalyticDB MySQL 版推出Spark SQL診斷功能,若您提交的Spark SQL存在性能問題,您可以根據診斷信息快速定位、分析并解決性能瓶頸問題,優化Spark SQL。本文主要介紹如何進行Spark SQL性能診斷以及性能診斷的示例。
前提條件
集群的產品系列為企業版、基礎版或湖倉版。
已創建Job型資源組。具體操作,請參見新建資源組。
已創建數據庫賬號。
如果是通過阿里云賬號訪問,只需創建高權限賬號。具體操作,請參見創建高權限賬號。
如果是通過RAM用戶訪問,需要創建高權限賬號和普通賬號并且將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運行期間掃描多表數據量之間差距過大,會在讀取數據時間上存在長尾效應,影響最終查詢效果。
建議:
通過選擇合適的分布字段來減少表掃描的數據量。