このトピックでは、MaxCompute SQL ジョブのインテリジェント診断機能の概要について説明します。ジョブエラーの解決やクエリパフォーマンスの向上に役立つ診断結果と提案を提供します。このトピックには、診断結果へのアクセス方法と分析の解釈に関するガイダンスが含まれています。クエリの効率性は多面的な性質を持つため、インテリジェント診断では、特定の異常とクエリ全体のパフォーマンスに関する提案のみが特定される場合があります。
ジョブの診断と最適化の詳細については、「Logview の診断ケース」および「SQL 文の最適化」をご参照ください。
制限事項
インテリジェント診断は SQL ジョブ専用です。
インテリジェント診断の結果と提案を表示する
MaxCompute コンソール にログオンし、左上隅から目的のリージョンを選択します。
左側のナビゲーションウィンドウで、 を選択して [ジョブ] ページにアクセスします。
説明ジョブをクエリするためのデフォルトの期間は 1 時間です。これは、プロジェクトのジョブ実行の特定の要件に基づいて調整できます。
目的のジョブの [インテリジェント診断] 列で、診断結果タグをクリックして [ジョブインサイト] ページにリダイレクトします。 [ジョブサマリー] タブをクリックすると、診断結果と最適化の推奨事項の詳細な説明が表示されます。
診断結果の説明
インテリジェント診断列が空の場合、次のいずれかを意味している可能性があります。
ジョブは正常に実行され、診断された異常はありません。
インテリジェント診断結果は、ジョブが完了した翌日に生成されます。
ジョブは 2023 年 11 月 1 日より前に実行されました。
中国 (香港)、中国東部 2 金融、中国北部 2 金融 (プレビュー)、中国北部 2 Ali Gov 1、中国南部 1 金融、日本 (東京)、シンガポール、マレーシア (クアラルンプール)、インドネシア (ジャカルタ)、ドイツ (フランクフルト)、英国 (ロンドン)、米国 (シリコンバレー)、米国 (バージニア)、UAE (ドバイ)、および SAU (リヤド - パートナーリージョン) を含む特定のリージョンで実行された SQL ジョブ。
診断を手動で開始し、詳細な結果を表示するには、[ジョブ] ページの対象ジョブの [アクション] 列にある [インサイト] をクリックします。
赤いタグはジョブのエラーメッセージの診断を表し、オレンジ色のタグはジョブのパフォーマンスの診断を表します。
インテリジェント診断結果の解釈
以下のセクションでは、SQL ジョブのインテリジェント診断結果の意味とその潜在的な解決策について説明します。
リソース不足
ジョブが要求された計算リソースの 95% 未満を 5 分以上連続して使用している場合、リソースが不足していると見なされます。
従量課金制の計算リソースジョブの場合、共有リソースプールは、ジョブがリソースを予約できず、リソースを競合する必要があることを意味します。同時実行ジョブの数が多い場合、ユーザプリエンプションが原因でリソースが不足する可能性があります。
サブスクリプションリソースジョブは、データ量が多い、リソース需要が高い、ジョブの優先順位が低いなどの理由でリソースが不足し、リソースのキューイングが発生する可能性があります。
これを解決するには、該当ジョブの [ジョブインサイト] ページにアクセスします。 [リソース消費] タブをクリックし、「特定の時点におけるジョブリソース消費量と計算クォータのリソース割り当てを表示する」でリソース不足の具体的な原因を特定します。次に、ビジネスニーズに基づいてタスク実行を最適化したり、ジョブの優先順位を調整したり、計算リソースを適切に管理したりできます。
データスキュー
データスキューはビッグデータコンピューティングでよく発生する問題であり、多くの場合、ジョブの実行の進行状況が 99% で停止し、ジョブがスタックしているように見えます。この現象は、データの分布が不均一であることが原因で発生します。一部のワーカーは計算をすぐに完了しますが、他のワーカーは完了するまでに非常に長い時間がかかります。データ量が爆発的に増加している時代において、データスキューは分散プログラムの実行効率に深刻な影響を与える可能性があります。したがって、データスキューの問題をできるだけ早く特定し、その原因を分析し、迅速に対処することが重要です。
MaxCompute は、次の基準に基づいてデータスキューを特定します。
実行時間が最も長いワーカーの時間が、すべてのワーカーの平均時間の少なくとも 3 倍であり、平均時間が 30 秒を超えている。
任意のワーカーの入力レコード数が、すべてのワーカーの平均の少なくとも 3 倍である。
MaxCompute は、データスキューが発生しているワーカーのノード名を提供するため、LogView を使用してトラブルシューティングと最適化を行うことができます。詳細については、「LogView を使用してジョブ情報を表示する」をご参照ください。
データスキューに関連するその他のシナリオとソリューションについては、「データスキューのチューニング」をご参照ください。
データの膨張
ジョブの出力レコード数が入力レコード数の 10 倍を超えると、Fuxi タスクにデータの膨張の問題があると判断されます。
MaxCompute は、データの膨張が発生している Fuxi タスク名を提供するため、LogView を使用してトラブルシューティングと最適化を行うことができます。詳細については、「LogView を使用してジョブ情報を表示する」をご参照ください。
データの膨張の原因と解決策の詳細については、「データ拡張の処理」をご参照ください。
モードフォールバック
MaxCompute ジョブは、MaxCompute クエリ高速化 モードと通常モードの両方で実行できます。
データ量が多く、クエリ結果を返す必要がないジョブは、通常モードのみを使用できます。したがって、リソースとジョブの通常の条件下では、ジョブの実行時間は通常、大きな変動を示しません。
データ量が比較的少ないインタラクティブクエリジョブは、通常、クエリ高速化モードをトリガーします。このモードでは、ジョブの実行速度は通常ジョブよりも高速です。ただし、MaxCompute はすべてのジョブがクエリ高速化モードに移行することを保証するものではありません。そのため、一部のクエリ高速化ジョブが通常ジョブに戻り、ジョブの実行時間が期待どおりにならない場合があります。
モードフォールバックの問題は、Task Rerun サブステータスに基づいて判断されます。クエリ高速化モードの不確実性を回避するには、ジョブスクリプトの先頭に set odps.service.mode=off; を追加して、ジョブを通常モードで実行します。これにより、モードによってトリガーされる障害と時間の損失を防ぐことができます。
MAPJOIN の小さなテーブルがメモリ制限に近づいている
MaxCompute を使用して大小のテーブル間で結合操作を実行する場合、mapjoin ヒントを SELECT 文で明示的に指定することで、クエリのパフォーマンスを向上させることができます。 mapjoin は Map ステージ中に小さなテーブルからすべてのデータをメモリにロードするため、小さなテーブルにのみ適しており、テーブルのロード後の合計メモリ使用量は 512 MB を超えてはなりません。MaxCompute は、小さなテーブルのメモリ使用量がこの制限に近づいていることを検出すると、小さなテーブルが mapjoin のメモリ制限に近づいているリスクについて警告します。このような場合は、MAPJOIN ヒント を削除するか、分散 MAPJOIN を使用して、小さなテーブルがメモリ制限を超えたことによって発生するジョブ実行エラーを回避することを検討してください。
ジョブエラーメッセージの診断
失敗したジョブの場合、MaxCompute はエラーメッセージをエラの種類と関連付け、関連する説明と解決策を提供します。SQL エラータイプのうち、一部のもののみが対象となります。診断結果がない失敗したジョブについては、「エラーコードの概要」を参照して、問題を特定し、対処してください。
ご質問やサポートが必要な場合は、MaxCompute 開発者コミュニティ (DingTalk グループ番号: 11782920) に参加するか、専用の DingTalk グループからお問い合わせください。
参考資料
長期メトリックの詳細については、「長期メトリックの計算を最適化する」をご参照ください。
MaxCompute コンソールの [ジョブインサイト] 機能を使用したジョブレベルのリソース分析により、ジョブリソース消費量を理解し、ランタイムを最適化する方法については、「ジョブレベルのリソース分析のベストプラクティス」をご参照ください。