開発にMaxComputeを使用すると、料金が発生します。 毎日の消費量がほとんどの時間安定しているが、特定の期間に料金が急増する場合は、この問題の原因を特定する必要があります。 コスト分析を実行して、ビジネスの成長によるサージを除いて、サージの原因となるプロジェクトとジョブを特定できます。 次に、できるだけ早い機会にジョブを最適化および調整して、コストを最適化できます。 このトピックでは、請求書の詳細とMaxCompute情報スキーマに基づいて、MaxComputeの後払い料金の予想外の急増をトラブルシューティングする方法について説明します。
背景情報
このトピックでは、次の一般原則を使用して、MaxComputeの後払い料金の予想外の急増をトラブルシューティングします。
経費とコストコンソールでコストが急増した日付を確認し、その日に予期しない急増が発生した請求可能なアイテムまたはプロジェクトを特定します。
予想外のコスト急増の理由を分析します。
計算料金が予想よりも高い場合は、[情報スキーマ] ビューのTASKS_HISTORYデータを使用して、ジョブの数と最もコストの高い上位N個のジョブを取得できます。
ストレージ料金が予想よりも高い場合は、使用状況レコードをダウンロードしてストレージ料金の変更を分析できます。
インターネット経由でのデータダウンロードの料金が予想よりも高い場合は、[情報スキーマ] ビューのTUNNELS_HISTORYデータを使用して、ダウンロード料金の変更を取得できます。
手順1: 情報スキーマサービスの取得
2024年3月1日以降、MaxComputeは新しいプロジェクトに対してプロジェクトレベルの情報スキーマサービスを自動的に提供しなくなりました。 デフォルトでは、2024年3月1日以降に作成されたプロジェクトでは、プロジェクトレベルの情報スキーマサービスのパッケージを使用できません。 メタデータをクエリする場合は、テナントレベルの情報スキーマサービスを使用して、より包括的な情報を取得できます。 テナントレベルの情報スキーマサービスの使用方法の詳細については、「テナントレベルの情報スキーマ」をご参照ください。
既存のプロジェクトに情報スキーマを使用する前に、プロジェクトメタデータにアクセスする権限を付与する必要があります。 権限を取得するには、プロジェクト所有者として、またはSuper_Administratorロールが割り当てられているRAMユーザーとして、Information Schema権限パッケージをインストールします。 詳細については、「プロジェクトレベルの役割に基づくアクセス制御の実行」の「ユーザーへの役割の割り当て」をご参照ください。 次のいずれかの方法を使用して、Information Schema権限パッケージをインストールできます。 情報スキーマの機能と制限の詳細については、「プロジェクトレベルの情報スキーマ」をご参照ください。
MaxComputeクライアントにログインし、次のコマンドを実行します。
install package Information_Schema.systables;DataWorksコンソールにログインし、アドホッククエリページに移動します。 アドホッククエリの詳細については、「アドホッククエリ機能を使用したSQL文の実行 (オプション) 」をご参照ください。 以下のコマンドを実行します。
install package Information_Schema.systables;
複数のMaxComputeプロジェクトのメタデータを収集するには、各MaxComputeプロジェクトにInformation Schema権限パッケージをインストールする必要があります。 次に、統計分析のために各MaxComputeプロジェクトのバックアップメタデータを同じテーブルに挿入する必要があります。
テナントレベルの情報スキーマサービスを使用して、現在のユーザーアカウントのすべてのプロジェクトのメタデータと使用履歴を照会することを推奨します。 詳細については、「テナントレベル情報スキーマ」をご参照ください。
(オプション) 手順2: プロジェクト所有者以外のユーザーに権限を付与する
情報スキーマによって提供されるビューには、プロジェクトレベルのすべてのユーザーデータが含まれます。 既定では、プロジェクトの所有者はこのプロジェクトのユーザーデータを表示できます。 プロジェクト内の他のユーザーまたはロールに、データを表示するために必要な権限を付与する必要があります。 詳細については、「パッケージに基づくクロスプロジェクトリソースアクセス」をご参照ください。
ユーザーまたはロールに権限を付与するために使用されるステートメントの構文:
grant <actions> on package Information_Schema.systables to user <user_name>;
grant <actions> on package Information_Schema.systables to role <role_name>;actions: 付与する権限。 値を [読み取り] に設定します。
user_name: プロジェクトに追加されたAlibaba CloudアカウントまたはRAMユーザー。
MaxComputeクライアントでlist users; コマンドを実行して、ユーザーアカウントを取得できます。
role_name: プロジェクトに追加されるロール。
MaxComputeクライアントで
list roles;コマンドを実行して、ロールの名前を照会できます。
例:
grant read on package Information_Schema.systables to user RAM$Bob@aliyun.com:user01;(オプション) 手順3: メタデータのダウンロードとバックアップ
プロジェクトで完了した履歴ジョブの場合、MaxComputeは過去14日間に生成されたデータを保持します。 過去14日間に生成されたデータを頻繁に照会する必要がある場合は、定期的にメタデータをプロジェクトにバックアップすることをお勧めします。 過去14日間のジョブの実行履歴に対してのみアドホッククエリを実行する必要がある場合は、この手順をスキップしてください。
MaxComputeクライアントにログインします。
次のコマンドを実行して、メタデータのバックアップテーブルを作成します。
-- project_name specifies the name of the MaxCompute project. -- Create the tasks_history backup table. create table if not exists <project_name>.tasks_history ( task_catalog STRING ,task_schema STRING ,task_name STRING ,task_type STRING ,inst_id STRING ,status STRING ,owner_id STRING ,owner_name STRING ,result STRING ,start_time DATETIME ,end_time DATETIME ,input_records BIGINT ,output_records BIGINT ,input_bytes BIGINT ,output_bytes BIGINT ,input_tables STRING ,output_tables STRING ,operation_text STRING ,signature STRING ,complexity DOUBLE ,cost_cpu DOUBLE ,cost_mem DOUBLE ,settings STRING ,ds STRING ); -- Create the tunnels_history backup table. create table if not exists <project_name>.tunnels_history ( tunnel_catalog string ,tunnel_schema string ,session_id string ,operate_type string ,tunnel_type string ,request_id string ,object_name string ,partition_spec string ,data_size bigint ,block_id bigint ,offset bigint ,length bigint ,owner_id string ,owner_name string ,start_time datetime ,end_time datetime ,client_ip string ,user_agent string ,object_type string ,columns string ,ds string );DataWorks DataStudioページに移動し、history_backupという名前のODPS SQLノードを作成し、定期的なスケジューリングを設定して、データをtasks_historyおよびtunnels_historyバックアップテーブルに定期的に書き込むようにします。 左上隅の
アイコンをクリックして、テーブルデータを保存します。 ODPS SQLノードの作成方法の詳細については、「MaxCompute SQLタスクの開発」をご参照ください。
次のサンプルコマンドを使用して、ODPS SQLノードを実行します。
-- project_name specifies the name of the MaxCompute project. use <project_name>; -- Insert data into the tasks_history table. insert into table <project_name>.tasks_history select task_catalog,task_schema ,task_name,task_type STRING,inst_id,`status`,owner_id,owner_name,result,start_time,end_time,input_records,output_records,input_bytes,output_bytes,input_tables,output_tables,operation_text,signature,complexity,cost_cpu,cost_mem,settings,ds from information_schema.tasks_history where ds ='${datetime1}'; -- Insert data into the tunnels_history table. insert into table <project_name>.tunnels_history select tunnel_catalog,tunnel_schema,session_id,operate_type,tunnel_type,request_id,object_name,partition_spec,data_size,block_id,offset,length,owner_id,owner_name,start_time,end_time,client_ip,user_agent,object_type,columns,ds from information_schema.tunnels_history where ds ='${datetime1}';${datetime1}はDataWorksのスケジューリングパラメーターです。 ODPS SQLノードタブの右側で、[プロパティ] タブをクリックします。 [プロパティ] パネルの [全般] セクションで、${datetime1} パラメーターを追加し、このパラメーターに${yyyymmdd}の値を割り当てます。説明複数のMaxComputeプロジェクトのメタデータを同時に収集および分析するには、複数のODPS SQLノードを作成し、これらのMaxComputeプロジェクトのメタデータを同じデータバックアップテーブルに書き込むことができます。
ステップ4: 経費とコストコンソールで予期しないコストの急増を引き起こすプロジェクトと請求可能な項目を分析します
経費とコストコンソールに移動し、次のいずれかの方法を使用して、予期しないコストの急増を引き起こすプロジェクトと請求可能な項目を分析します。 費用と費用コンソールに移動する方法の詳細については、「請求の詳細の表示」をご参照ください。
[請求書の詳細] ページの [請求書の詳細] タブで、[統計項目] の [インスタンス] を選択し、[統計期間] の [日ごと] を選択して請求書を検索し、インスタンスIDに基づいて高コストのプロジェクトを特定します。 プロジェクトのコストが予想よりも高い場合は、プロジェクトを分析します。
[請求書の詳細] ページの [請求書の詳細] タブで、[統計項目] の [請求書の詳細] を選択し、[統計期間] の [日別] を選択して、請求書を検索し、高額な請求書を生成する請求可能な項目を特定します。 インスタンスIDに基づいてプロジェクトを検索し、高コストを発生させる請求項目を分析できます。
[コスト分析] ページで、コストサージの原因となる請求項目を特定します。

ステップ5: コストサージの問題のトラブルシューティング
プロジェクトと請求項目に基づいて、コストサージの問題を分析してトラブルシューティングします。
SQLジョブのコンピューティング料金の予期しない急増のトラブルシューティング
外部テーブルを含むSQLジョブを含むSQLジョブの全体的なコストが高い場合、1つのジョブ、ジョブの繰り返し実行、またはスケジューリングプロパティの無効な設定によって、予期しないコストの急増が発生する可能性があります。
高コストジョブのインスタンスID (inst_id) を照会し、ジョブの実行情報を表示します。
MaxComputeクライアントにログインします。
.
useコマンドを実行して、ステップ4で識別された高コストプロジェクトに切り替え、TASKS_HISTORYを使用してジョブ料金を照会します。 サンプルコマンド:-- Enable the MaxCompute V2.0 data type edition. For more information about the data types supported by the MaxCompute V2.0 data type edition, see the "MaxCompute V2.0 data type edition" topic. set odps.sql.decimal.odps2=true; select inst_id --- Instance ID , input_bytes --- Amount of input data ( ,complexity ,cast(input_bytes/1024/1024/1024 * complexity * 0.3 as DECIMAL(18,5) ) cost_sum ,get_json_object(settings, "$.SKYNET_ID") SKYNET_ID --- ID of the DataWorks scheduling task from information_schema.tasks_history -- If you want to query metadata that was generated in the previous 14 days, you must query the table that is backed up in Step 3. The table name is in the <project_name>.tasks_history format. where task_type = 'SQL' OR task_type = 'SQLRT' AND ds = 'Date partition to be queried' ORDER BY cost_sum DESC LIMIT 10000 ;説明SQLジョブの計算料金=入力データ量 × SQL文の複雑さ × 単価 (
USD 0.0438/GB
この例では、
task_type = 'SQL'はSQLジョブを示し、task_type = 'SQLRT'はSQLクエリ加速ジョブを示します。
高コストSQLジョブの
SKYNET_IDを表示します。 SKYNET_IDは、DataWorksスケジューリングタスクのIDを示します。IDが利用可能な場合は、DataWorksコンソールでノードの実行の詳細を表示します。
利用可能なIDがない場合、タスクは特定のDataWorksスケジューリングノードによって開始されません。
inst_idに基づいて実行情報を表示できます。 サンプルコマンド:select operation_text from information_schema.tasks_history where ds='<Task-mapped date partition>' and inst_id='<inst_id>';
繰り返し実行中のジョブを見つけます。
MaxComputeクライアントにログインします。
. useコマンドを実行して、ステップ4で識別された高コストプロジェクトに切り替え、TASKS_HISTORYを使用して繰り返し実行中のジョブを照会します。 サンプルコマンド:
-- Analyze the trend of the number of jobs.
SELECT signature
,ds
,COUNT(*) AS tasknum
FROM information_schema.tasks_history
-- If you want to query metadata that was generated in the previous 14 days, you must query the table that is backed up in Step 3. The table name is in the <project_name>.tasks_history format.
where task_type = 'SQL' OR task_type = 'SQLRT'
AND ds >= 'Date partition to be queried'
GROUP BY ds
,signature
ORDER BY tasknum DESC
LIMIT 10000
;
-- Confirm the abnormal signature and view the recent execution status of the SQL job.
SELECT *
FROM information_schema.tasks_history
-- If you want to query metadata that was generated in the previous 14 days, you must query the table that is backed up in Step 3. The table name is in the <project_name>.tasks_history format.
where signature = 'Abnormal signature'
AND ds >= 'Date partition to be queried'
;Sparkジョブのコンピューティング料金の予期せぬ急増のトラブルシューティング
Sparkジョブの全体的なコストが高い場合は、高コストジョブのインスタンスID (inst_id) を照会して、ジョブに関する実行情報を表示できます。
MaxComputeクライアントにログインします。
.
useコマンドを実行して、ステップ4で識別された高コストプロジェクトに切り替え、TASKS_HISTORYを使用してジョブ料金を照会します。 サンプルコマンド:-- Enable the MaxCompute V2.0 data type edition. For more information about the data types supported by the MaxCompute V2.0 data type edition, see the "MaxCompute V2.0 data type edition" topic. set odps.sql.decimal.odps2=true; select inst_id -- Instance ID ,cost_cpu -- CPU consumption of the job (100 indicates 1 core × s) For example, if 10 CPU cores run for 5 seconds, the value of cost_cpu is 5000, which is calculated by using the following formula: 10 × 100 × 5. ,cast(cost_cpu/100/3600 * 0.66 as DECIMAL(18,5) ) cost_sum from information_schema.tasks_history -- If you want to query metadata that was generated in the previous 14 days, you must query the table that is backed up in Step 3. The table name is in the <project_name>.tasks_history format. where task_type = 'CUPID' and status='Terminated' AND ds = 'Date partition to be queried' ORDER BY cost_sum DESC LIMIT 10000 ;説明当日のSparkジョブの計算料金=当日の合計請求可能時間 × 単価 (
USD 0.1041 /時間 /タスク。
task_type = 'CUPIDはSparkジョブを示します。
inst_idに基づいて実行情報を表示します。 サンプルコマンド:select operation_text from information_schema.tasks_history where ds='Task-mapped date partition' and inst_id='<inst_id>';
MapReduceジョブのコンピューティング料金の予期しない急増のトラブルシューティング
MapReduceジョブの全体的なコストが高い場合は、高コストジョブのインスタンスID (inst_id) を照会して、ジョブに関する実行情報を表示できます。
MaxComputeクライアントにログインします。
.
useコマンドを実行して、ステップ4で識別された高コストプロジェクトに切り替え、TASKS_HISTORYを使用してジョブ料金を照会します。 サンプルコマンド:-- Enable the MaxCompute V2.0 data type edition. For more information about the data types supported by the MaxCompute V2.0 data type edition, see the "MaxCompute V2.0 data type edition" topic. set odps.sql.decimal.odps2=true; select inst_id -- Instance ID ,cost_cpu -- CPU consumption of the job (100 indicates 1 core × s) For example, if 10 CPU cores run for 5 seconds, the value of cost_cpu is 5000, which is calculated by using the following formula: 10 × 100 × 5. ,cast(cost_cpu/100/3600 * 0.46 as DECIMAL(18,5) ) cost_sum from information_schema.tasks_history -- If you want to query metadata that was generated in the previous 14 days, you must query the table that is backed up in Step 3. The table name is in the <project_name>.tasks_history format. where task_type = 'LOT' and status='Terminated' AND ds = 'Date partition to be queried' ORDER BY cost_sum DESC LIMIT 10000 ;inst_idに基づいて実行情報を表示します。 サンプルコマンド:select operation_text from information_schema.tasks_history where ds='Task-mapped date partition' and inst_id='<inst_id>';
ストレージの予期しないコスト急増のトラブルシューティング
でストレージ料金を照会する必要があります。
[請求書の詳細] ページの [使用状況レコード] タブ。
使用記録をダウンロードします。 詳細については、「MaxCompute請求書の使用記録の分析」の「ステップ1: 請求書の使用記録のダウンロード」をご参照ください。
使用記録のアップロード 詳細については、「MaxCompute請求書の使用記録の分析」の「ステップ2 (オプション): 使用記録をMaxComputeにアップロードする」をご参照ください。
SQL分析を実行します。 詳細については、「MaxCompute請求書の使用記録の分析」の「ステップ3: 請求書の使用記録の分析」をご参照ください。
インターネットでのデータダウンロードの予期しないコスト急増のトラブルシューティング
インターネット経由でのデータダウンロードの全体的なコストが高い場合は、次の操作を実行して、高コストのダウンロードの種類と高コストのダウンロードが発生する期間を分析できます。
MaxComputeクライアントにログインします。
. useコマンドを実行して、ステップ4で識別された高コストプロジェクトに切り替え、TUNNELS_HISTORYを使用してダウンロード料金を照会します。 サンプルコマンド:
-- Enable the MaxCompute V2.0 data type edition. For more information about the data types supported by the MaxCompute V2.0 data type edition, see the "MaxCompute V2.0 data type edition" topic.
set odps.sql.decimal.odps2=true;
SELECT ds
,operate_type
,SUM(CAST(data_size / 1024 / 1024 / 1024 * 0.8 AS DECIMAL(18,5))) download_fee
FROM information_schema.tunnels_history
WHERE operate_type = 'DOWNLOADLOG'
OR operate_type = 'DOWNLOADINSTANCELOG'
AND ds >= 'Date partition to be queried'
GROUP BY ds
,operate_type
ORDER BY download_fee DESC
;インターネット経由のデータダウンロード料金=ダウンロードデータ量 × 単価 (
USD 0.1166/GB
実行結果に基づいて、特定の期間にわたるダウンロード料金の傾向を分析することもできます。 tunnel show historyコマンドを実行して、ダウンロード履歴情報を表示できます。 詳細については、「Tunnelコマンド」をご参照ください。
関連ドキュメント
コスト最適化の詳細については、「概要」をご参照ください。