このトピックでは、MaxCompute SQL ジョブ向けのインテリジェント診断機能について説明します。この機能は、ジョブエラーの解決やクエリパフォーマンスの向上を支援するための診断結果および最適化の提案を提供し、これらの診断情報を確認・解釈する方法を解説します。クエリパフォーマンスは多くの要因に依存するため、インテリジェント診断では特定の異常のみを検出し、一部の推奨事項を提示します。
より包括的なジョブ診断およびチューニングのガイダンスについては、「Logview 診断ベストプラクティス」および「SQL チューニング」をご参照ください。
使用制限
診断機能は現在、SQL ジョブに対してのみサポートされています。
インテリジェント診断の結果と提案の確認
MaxCompute コンソールにログインし、左上隅でリージョンを選択します。
左側のナビゲーションウィンドウで、 を選択します。
説明ジョブのクエリにおけるデフォルトの時間範囲は 1 時間です。ご利用のプロジェクトの実際のジョブランタイムに基づき、必要に応じてこの範囲を調整してください。
対象ジョブの インテリジェント診断 列にある診断結果タグをクリックします。これにより、求人情報 ページが表示されます。ジョブの概要 タブで、詳細な診断の説明および最適化の提案を確認できます。
診断結果の説明
以下のいずれかの条件に該当する場合、インテリジェント診断列は空になります。
ジョブが正常に実行され、異常が検出されなかった。
ジョブが当日完了した。インテリジェント診断の結果は翌日に生成され、それに応じてタグ付けされる。
ジョブが 2023 年 11 月 1 日以前に実行された。
SQL ジョブが以下のいずれかのリージョンで実行された:中国 (香港)、中国東部 2 Finance Cloud、中国北部 2 Finance Cloud (招待制)、中国北部 2 Ali Gov Cloud 1、中国南部 1 Finance Cloud、日本 (東京)、シンガポール、マレーシア (クアラルンプール)、インドネシア (ジャカルタ)、ドイツ (フランクフルト)、イギリス (ロンドン)、米国 (シリコンバレー)、米国 (バージニア)、UAE (ドバイ)、サウジアラビア (リヤド - パートナー運営)。
詳細な診断情報を確認するには、操作とメンテナンス ページに移動し、対象ジョブの **[操作]** 列にある インサイト をクリックして、診断を手動でトリガーしてください。
赤色のタグはジョブエラーの診断を示します。オレンジ色のタグはパフォーマンス診断を示します。
インテリジェント診断結果の解釈
以下のセクションでは、SQL ジョブのインテリジェント診断結果の意味とその対処方法を説明します。
リソース不足
ジョブの計算リソース使用量が、リクエストされた量の 95 % 未満の状態が 5 分以上継続した場合、そのジョブはリソース不足としてフラグ付けされます。
従量課金ジョブの場合、共有リソースプールでは正確な使用量を指定できません。リソースはユーザプリエンプションを通じてオンデマンドで割り当てられます。同時に多数のジョブが実行されていると、競合が激しくなり、リクエストしたリソースを取得できない可能性があります。
サブスクリプションベースのジョブの場合、データ量が大きいこと、リソースリクエストが多いこと、またはジョブ優先度が低いことが原因で、リソース待機が発生することがあります。
対象ジョブの 求人情報 ページに移動し、リソース消費 タブで、特定の時刻におけるジョブのリソース消費量およびクォータ割り当て状況を確認し、根本原因を特定してください。その後、必要に応じてジョブ優先度を調整したり、計算リソースを管理したりして、タスク実行を最適化してください。
データスキュー
データスキューはビッグデータ処理における一般的な問題です。これは、ジョブの完了率が 99 % で停止しているように見える形で現れ、実行が停止したと誤解されがちです。これはデータ分布が不均一であるために発生し、一部のワーカーはすぐに処理を終える一方で、他のワーカーは非常に長い時間を要します。今日の爆発的なデータ増加の時代において、データスキューは分散プログラムの効率に深刻な影響を及ぼします。早期に検出し、原因を分析し、迅速に対処することが重要です。
MaxCompute では、以下のいずれかの条件を満たす場合、ジョブがデータスキューとしてフラグ付けされます。
最も長く実行されたワーカーのランタイムが、平均ワーカーランタイムの 3 倍以上であり、かつ平均ランタイムが 30 秒を超えている。
少なくとも 1 つのワーカーが、平均ワーカーの入力レコード数の 3 倍以上のレコードを処理している。
MaxCompute は影響を受けたワーカー(ノード)の名前を提供するため、LogView を使用して調査およびチューニングが可能です。詳細については、「Logview を使用したジョブランタイム情報の確認」をご参照ください。
データスキューに関するその他のシナリオおよび解決策については、「データスキューのチューニング」をご参照ください。
データ肥大化
Fuxi タスクの出力レコード数が入力レコード数の 10 倍を超える場合、そのタスクはデータ肥大化としてフラグ付けされます。
MaxCompute は影響を受けた Fuxi タスクの名前を提供するため、LogView を使用して調査およびチューニングが可能です。詳細については、「Logview を使用したジョブランタイム情報の確認」をご参照ください。
データ肥大化の原因および対処法の詳細については、「データ肥大化の最適化」をご参照ください。
モードバックオフ
MaxCompute ジョブは、Query Acceleration (MaxQA) モードまたは標準モードのいずれかで実行できます。
大量のデータを処理し、クエリ結果を返さないジョブは一般モードでのみ実行可能です。通常、これらのジョブのランタイムは安定しています。
小規模なデータ量を対象とするインタラクティブなクエリは、通常 Query Acceleration モードがトリガーされ、一般モードよりも高速に実行されます。ただし、MaxCompute はすべてのジョブが Query Acceleration モードに入ることを保証していません。一般モードにフォールバックした場合、ランタイムが予想以上に長くなる可能性があります。
この動作は自動トリガーを使用する MCQA (Query Acceleration 1.0) に適用されます。MaxQA (Query Acceleration 2.0) では、インタラクティブなクォータグループを明示的に割り当てる必要があり、自動トリガーや自動バックオフのメカニズムはありません。詳細については、「Query Acceleration MaxQA ユーザーガイド」をご参照ください。
MaxCompute は、タスク再実行サブステータスに基づいて、ジョブがモードフォールバックの問題を起こしているかどうかを判断します。クエリアクセラレーションモードの試行による失敗や時間の浪費を回避し、直接一般モードでジョブを実行するには、ジョブコードの最初の行に set odps.service.mode=off; を追加してください。MaxQA では、この方法による無効化はサポートされていません。
MAPJOIN 小テーブルがメモリ上限に近い
MaxCompute で大規模テーブルと小規模テーブルを結合する際、SELECT 文に mapjoin ヒントワードを明示的に指定することで、クエリパフォーマンスを向上させることができます。mapjoin は Map フェーズ中に小規模テーブル全体をメモリにロードします。これは小規模テーブルにのみ有効であり、ロードされるテーブルはメモリ使用量が 512 MB を超えてはなりません。MaxCompute が小規模テーブルがこの上限に近づいていることを検出した場合、mapjoin のメモリリスクの可能性について警告を発します。このような場合は、MAPJOIN HINT を削除するか、DISTRIBUTED MAPJOIN を使用してメモリオーバーフローおよびジョブ失敗を防止することを検討してください。
ジョブエラーメッセージ診断
失敗したジョブについて、MaxCompute はエラーメッセージを既知のエラー分類と照合し、その説明および解決策を提供します。これは現在、一部の SQL 関連エラーにのみ対応しています。診断情報が提供されない失敗については、エラーコード を参照して問題を特定・解決してください。
ご質問がある場合やサポートが必要な場合は、DingTalk グループ申請フォームに記入して、MaxCompute 開発者コミュニティグループ (DingTalk グループ ID: 11782920) に参加するか、専用の DingTalk サポートグループにご連絡ください。
参照
長期期間のメトリック計算を最適化する方法については、「長期期間メトリック計算の最適化ソリューション」をご参照ください。
MaxCompute コンソールの 求人情報 機能を使用してジョブレベルのリソース分析を行い、詳細なリソース消費を把握し、ジョブランタイムを短縮するための推奨事項を取得する方法については、「ジョブレベルリソース分析のベストプラクティス」をご参照ください。