AnalyticDB for MySQLは、Spark SQL診断機能を提供します。 Spark SQLクエリにパフォーマンスの問題がある場合は、診断情報を使用してパフォーマンスのボトルネックをすばやく特定、分析、解決し、Spark SQLクエリを最適化できます。 このトピックでは、Spark SQL診断を実行する方法について説明します。
前提条件
AnalyticDB for MySQL Data Lakehouse Editionクラスターが作成されます。
AnalyticDB for MySQLクラスターのジョブリソースグループが作成されます。 詳細については、「リソースグループの作成」をご参照ください。
AnalyticDB for MySQLクラスター用のデータベースアカウントが作成されます。
Alibaba Cloudアカウントを使用する場合は、特権アカウントを作成する必要があります。 詳細については、「データベースアカウントの作成」トピックの「特権アカウントの作成」セクションをご参照ください。
RAM (Resource Access Management) ユーザーを使用する場合は、特権アカウントと標準アカウントの両方を作成し、標準アカウントをRAMユーザーに関連付ける必要があります。 詳細については、「データベースアカウントの作成」および「データベースアカウントの関連付けまたは関連付けの解除」をご参照ください。
AnalyticDB for MySQLは、AliyunADBSparkProcessingDataRoleロールを引き受けて他のクラウドリソースにアクセスする権限があります。 詳細については、「権限付与の実行」をご参照ください。
使用上の注意
診断は、過去14日間に正常に実行されたSpark SQLクエリに対してのみ実行できます。
手順
AnalyticDB for MySQL コンソールにログインします。 ホームページの左上でリージョンを選択します。 左側のナビゲーションウィンドウで、クラスターリスト をクリックします。
[Data Lakehouse Edition] タブで、管理するクラスターを見つけ、クラスターIDをクリックします。
左側のナビゲーションウィンドウで、
を選択します。クエリリストには、診断用のSQLクエリに関する情報が表示されます。 次の表に、SQLクエリのパラメーターを示します。
パラメーター
説明
アクション
SQL文や診断結果などの実行の詳細を表示できる診断操作。
SQL
実行されたSQL文。
クエリID
クエリのID。
実行ID
Spark SQLアプリケーションのSQL文のシーケンスID。
ステータス
SQL文の実行ステータス。 有効な値:
完了しました
Running
失敗した
開始日
クエリが送信された時刻。
実行期間
SQL文の実行に費やされた時間。
最大演算子専用時間
オペレータがリソースを排他的に使用する最大実行時間。
ピークメモリ
クエリのピークメモリ使用量。
スキャンされたデータ
ストレージ層から計算層に返されるデータの量。
診断するSQLクエリを見つけて、[操作] 列の [診断] をクリックします。
[クエリのプロパティ] ページで、[実行計画] タブをクリックして、クエリの実行計画ツリーの階層グラフを表示します。
実行プランツリーの右側にある [クエリレベルの診断結果] をクリックして、クエリレベルの診断結果を表示します。
クエリレベルの診断結果
AnalyticDB for MySQLは、診断のためのSQLクエリに関するクエリレベルの統計を収集し、最適化の提案を提供するSQL診断機能を提供します。
結合でデータが膨らむ
問題の説明:
結合演算子の出力行の数が入力行の数よりも大きい場合、結合演算は不合理であると見なされるため、データ膨張が発生します。 その結果、多数のコンピューティングリソースとメモリリソースが占有され、クエリが遅くなります。
提案:
結合演算に関与しないデータを事前にフィルタリングして処理するデータ量を減らすなど、コードを最適化します。
スキャンデータ量のスキュー
問題の説明:
Spark SQLクエリの実行中に複数のテーブル間でスキャンしたデータ量に大きな差がある場合、ロングテール効果によりデータの読み込みに時間がかかり、最終的なクエリのパフォーマンスに影響します。
提案:
適切な配布キー列を選択して、スキャンデータの量を減らします。