O uso do MaxCompute gera tarifas. Se o seu gasto diário costuma ser estável, mas sofre um aumento repentino sem relação com o crescimento normal dos negócios, realize uma análise de custos para identificar os projetos e jobs responsáveis pelo pico. Em seguida, otimize e ajuste os jobs rapidamente para controlar os custos. Este artigo descreve como solucionar um aumento inesperado nas tarifas pay-as-you-go do MaxCompute usando os detalhes da fatura e o service de metadados do MaxCompute (Information Schema).
Contexto
Para solucionar um aumento inesperado nas tarifas pay-as-you-go do MaxCompute, siga estas etapas:
No console de Expenses and Costs, identifique a data do aumento inesperado de custos. Em seguida, determine qual projeto e item faturável gerou as tarifas elevadas naquele dia.
-
Analise o motivo específico do aumento de custos:
Se as tarifas de computação estiverem acima do esperado, visualize
TASKS_HISTORYno Information Schema para analisar o volume de jobs e identificar os jobs de maior custo.Caso a tarifa de armazenamento esteja acima do esperado, baixe um registro de uso para analisar as mudanças nos custos de armazenamento.
Se as tarifas de tráfego de saída pela rede pública estiverem acima do esperado, visualize
TUNNELS_HISTORYno Information Schema para rastrear as mudanças nas tarifas de download.
Etapa 1: Obter o Information Schema
A partir de 1º de março de 2024, o MaxCompute deixou de instalar automaticamente o Information Schema no nível do projeto para novos projetos. Se precisar consultar metadados, use o Information Schema no nível do tenant para obter informações mais abrangentes. Para obter detalhes sobre o uso do Information Schema no nível do tenant, consulte Information Schema no nível do tenant.
Para projetos existentes do MaxCompute, execute as seguintes ações antes de usar o service Information Schema:
Como proprietário do projeto ou usuário RAM com a role de gerenciamento
Super_Administrator, instale o pacote de permissões do Information Schema para obter acesso aos metadados do projeto. Para mais informações sobre como conceder roles a usuários, consulte Conceder roles a usuários.-
Utilize um dos seguintes métodos de instalação. Para mais informações sobre os recursos e limitações do Information Schema, consulte Visão geral do Information Schema.
-
Método 1: Faça login no cliente MaxCompute e execute o seguinte comando:
install package Information_Schema.systables; -
Método 2: Faça login no console do DataWorks e acesse a página ad hoc query. Para mais informações sobre como executar consultas ad hoc, consulte Executar instruções SQL em uma consulta ad hoc (opcional). Em seguida, execute o seguinte comando:
install package Information_Schema.systables;
-
Caso precise analisar metadados de vários projetos do MaxCompute, instale o pacote de permissões do Information Schema separadamente para cada projeto. Depois, insira os backups de metadados de cada projeto em uma única tabela para uma análise centralizada.
Recomendamos o uso do Information Schema no nível do tenant. Ele permite consultar metadados e o histórico de uso de todos os projetos que o usuário atual pode acessar.
(Opcional) Etapa 2: Conceder permissões a usuários que não sejam o proprietário do projeto
As views no Information Schema contêm todos os dados do usuário no nível do projeto. Por padrão, o proprietário do projeto pode visualizar esses dados. Se outros usuários ou roles precisarem de acesso, eles deverão ser autorizados. Para mais informações, consulte Acessar recursos entre projetos usando um Package.
A sintaxe para conceder autorização é a seguinte:
grant <actions> on package Information_Schema.systables to user <user_name>;
grant <actions> on package Information_Schema.systables to role <role_name>;
actions: A permissão a ser concedida. O valor deve ser read.
-
user_name: Uma conta Alibaba Cloud ou um usuário RAM no projeto.
Execute o comando
list users;no cliente MaxCompute para listar as contas de usuário. -
role_name: Uma role no projeto.
Execute o comando
list roles;no cliente MaxCompute para listar os nomes das roles.
Exemplo:
grant read on package Information_Schema.systables to user RAM$Bob@aliyun.com:user01;
(Opcional) Etapa 3: Baixar e fazer backup dos metadados
O MaxCompute retém o histórico de jobs concluídos em um projeto pelos últimos 14 dias. Se você precisa consultar dados com mais de 14 dias com frequência, recomendamos configurar um backup agendado dos seus metadados para uma tabela do projeto. Pule esta etapa se precisar apenas executar consultas ad hoc no histórico de jobs dos últimos 14 dias.
-
Faça login no cliente MaxCompute e execute o seguinte comando para criar as tabelas de backup de metadados.
-
No console do DataWorks, acesse a página DataStudio, crie um nó ODPS SQL chamado
history_backupe configure um agendamento para gravar dados periodicamente nas tabelas de backuptasks_historyetunnels_history. Após concluir a configuração, clique em no ícone
no canto superior esquerdo para salvar.Os seguintes comandos de exemplo são executados no nó ODPS SQL:
-- <project_name> is the name of your MaxCompute project. USE <project_name>; -- Back up tasks_history. 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}'; -- Back up tunnels_history. 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}';A variável
${datetime1}é um parâmetro de agendamento no DataWorks. No lado direito do nó ODPS SQL, clique em na aba Properties. Na seção Basic Properties, defina os Parameters comodatetime1=${yyyymmdd}.NotaPara analisar metadados de vários projetos do MaxCompute, crie vários nós ODPS SQL e grave os metadados de cada projeto na mesma tabela de backup.
Etapa 4: Analisar projetos e itens de alto custo
Faça login no console de Expenses and Costs. Utilize os métodos a seguir para analisar os projetos e itens faturáveis que estão gerando custos elevados. Para mais detalhes, consulte Visualizar detalhes da fatura.
-
No painel de navegação à esquerda, escolha . Defina Statistic Item como Instance e Statistical Period como Day.
Método 1: Identifique o projeto (ID da instância) que gerou as tarifas elevadas. Se o custo de um projeto estiver significativamente acima do esperado, concentre sua análise nesse projeto.
Método 2: Identifique o item faturável que gerou as tarifas elevadas. Pesquise um projeto específico usando Resource Instance Name/ID e analise seus itens faturáveis de alto custo.
No painel de navegação à esquerda, escolha Cost Analysis. A página Cost Analysis oferece uma forma visual de identificar itens faturáveis com custos crescentes.
Etapa 5: Investigar a causa raiz
Analise os projetos e itens faturáveis de alto custo para investigar o motivo do aumento.
Tarifas elevadas de computação SQL
Um custo geral alto para jobs SQL, incluindo jobs em tabelas externas, pode ser causado por um único job de alto custo, execuções repetidas de jobs ou propriedades de agendamento mal configuradas.
-
Consulte o ID da instância (inst_id) do job de alto custo para visualizar seus detalhes de execução.
-
Faça login no cliente MaxCompute , use o comando
usepara alternar para o projeto de alto consumo identificado na Etapa 4 e consulte os detalhes de consumo do job no TASKS_HISTORY. Um exemplo de comando é o seguinte.-- Enable the MaxCompute V2.0 data type edition. For more information, see MaxCompute V2.0 data types. SET odps.sql.decimal.odps2=true; SELECT inst_id --- Instance ID ,input_bytes --- Data input size ,complexity ,CAST(input_bytes/1024/1024/1024 * complexity * 0.3 AS DECIMAL(18,5) ) cost_sum ,GET_JSON_OBJECT(settings, "$.SKYNET_ID") SKYNET_ID --- DataWorks scheduling task ID FROM information_schema.tasks_history -- If you are querying metadata older than 14 days, query the backup table created in Step 3, which is named <project_name>.tasks_history WHERE task_type = 'SQL' OR task_type = 'SQLRT' AND ds = 'date_partition_to_query' ORDER BY cost_sum DESC LIMIT 10000 ;NotaA tarifa de computação para um único job SQL é calculada como: Tamanho dos Dados de Entrada × Complexidade do SQL × Preço Unitário (USD 0.0438 por GB).
No exemplo, task_type = 'SQL' indica um job SQL padrão, e task_type = 'SQLRT' indica um job de aceleração de consulta SQL.
-
Visualize o
SKYNET_ID(ID da tarefa de agendamento do DataWorks) dos jobs SQL de alto consumo.Se existir um ID, verifique os detalhes de execução do nó no DataWorks.
-
Caso não haja um ID disponível, isso indica que a tarefa não foi iniciada por um nó de agendamento do DataWorks. Visualize as informações específicas de execução com base no
inst_id, conforme mostrado no seguinte exemplo de comando.SELECT operation_text FROM information_schema.tasks_history WHERE ds='<date_partition_of_job_execution>' AND inst_id='<instance_id>';
-
-
Encontre jobs que se repetem com frequência.
-
Faça login no cliente MaxCompute, use o comando
usepara alternar para o projeto de alto custo identificado na Etapa 4 e consulte os jobs em execução repetida usando o TASKS_HISTORY. O comando de exemplo é o seguinte.-- Analyze the job growth trend. SELECT signature ,ds ,COUNT(*) AS tasknum FROM information_schema.tasks_history --If you are querying metadata older than 14 days, query the backup table created in Step 3, which is named <project_name>.tasks_history. where task_type = 'SQL' OR task_type = 'SQLRT' AND ds >= 'date_partition_to_query' GROUP BY ds ,signature ORDER BY tasknum DESC LIMIT 10000 ; -- After identifying an abnormal signature, view the recent execution history of the corresponding SQL job. SELECT * FROM information_schema.tasks_history --If you are querying metadata older than 14 days, query the backup table created in Step 3, which is named <project_name>.tasks_history. where signature = 'abnormal_signature' AND ds >= 'date_partition_to_query' ;
-
Tarifas elevadas de computação Spark
Como os jobs Spark podem ter um consumo geral alto, consulte o inst_id dos jobs com consumo anormal para visualizar informações detalhadas de execução.
-
Faça login no cliente MaxCompute , use o comando
usepara alternar para o projeto de alto consumo identificado na Etapa 4 e consulte os detalhes de consumo do job usando o TASKS_HISTORY. O exemplo de comando é o seguinte.-- Enable the MaxCompute V2.0 data type edition. For more information, see MaxCompute V2.0 data types. SET odps.sql.decimal.odps2=true; SELECT inst_id -- Instance ID ,cost_cpu -- CPU consumption of the job (100 indicates 1 core-second. For example, if 10 cores run for 5s, cost_cpu is 10 * 100 * 5 = 5000). ,CAST(cost_cpu/100/3600 * 0.36 AS DECIMAL(18,5) ) cost_sum FROM information_schema.tasks_history -- If you are querying metadata older than 14 days, query the backup table created in Step 3, which is named <project_name>.tasks_history. WHERE task_type = 'CUPID' AND status='Terminated' AND ds = 'date_partition_to_query' ORDER BY cost_sum DESC LIMIT 10000 ;NotaA tarifa diária de computação para um job Spark é calculada como: Total de Horas de Computação por Dia × Preço Unitário (USD 0.1041 por hora por tarefa).
task_type = 'CUPID' indica um job Spark.
-
O exemplo a seguir mostra o comando para visualizar informações detalhadas de execução para um
inst_idespecífico.SELECT operation_text FROM information_schema.tasks_history WHERE ds='date_partition_of_job_execution' AND inst_id='<instance_id>';
Custos elevados de jobs MapReduce
Como os jobs MapReduce podem ter um consumo geral alto, consulte o inst_id de um job com consumo anormal para visualizar suas informações detalhadas de execução.
-
Faça login no cliente MaxCompute . Use o comando
usepara alternar para o projeto de alto consumo identificado na Etapa 4 e consulte o consumo do job usando o TASKS_HISTORY. O comando a seguir é um exemplo.-- Enable the MaxCompute V2.0 data type edition. For more information, see MaxCompute V2.0 data types. SET odps.sql.decimal.odps2=true; SELECT inst_id -- Instance ID ,cost_cpu -- CPU consumption of the job (100 indicates 1 core-second. For example, if 10 cores run for 5s, cost_cpu is 10 * 100 * 5 = 5000). ,CAST(cost_cpu/100/3600 * 0.36 AS DECIMAL(18,5) ) cost_sum FROM information_schema.tasks_history -- If you are querying metadata older than 14 days, query the backup table created in Step 3, which is named <project_name>.tasks_history. WHERE task_type = 'LOT' AND status='Terminated' AND ds = 'date_partition_to_query' ORDER BY cost_sum DESC LIMIT 10000 ;SELECT operation_text FROM information_schema.tasks_history WHERE ds='date_partition_of_job_execution' AND inst_id='<instance_id>'; -
O exemplo a seguir mostra o comando para visualizar informações detalhadas de execução para um
inst_idespecífico.-- Enable the MaxCompute V2.0 data type edition. For more information, see MaxCompute V2.0 data types. 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_query' GROUP BY ds ,operate_type ORDER BY download_fee DESC ;
Tarifas elevadas de armazenamento
Use a página de registros de uso para consultar as tarifas de armazenamento.
Baixe o registro de uso. Para mais informações, consulte Baixar registros de uso.
Faça o upload do registro de uso. Para mais informações, consulte Fazer upload de dados de registro de uso para o MaxCompute.
Analise os dados usando SQL. Para mais informações, consulte Analisar detalhes de uso da fatura do MaxCompute.
Tarifas elevadas de tráfego de saída
Se o custo geral do tráfego de saída pela rede pública for alto, siga as etapas abaixo para analisar qual categoria de download está gerando tarifas elevadas e quando isso ocorre.
-
Faça login no cliente MaxCompute , use o comando
usepara alternar para o projeto de altos custos identificado na Etapa 4 e consulte os custos de download usando o TUNNELS_HISTORY. Um comando de exemplo é o seguinte.odps@ sz_mc>tunnel show history; 20xxx success 'download inttable inttable.txt' 20xxx success 'upload /Users/xxx.csv maxcomputefee -c "UTF-8" -h "true" -dfp "yyyy-MM-dd HH:mm:ss"'NotaA tarifa para um único download é calculada como: Tamanho dos Dados de Download × Preço Unitário (USD 0.1166 por GB).
-
Analise a tendência dos custos de download ao longo de um período específico com base nos resultados da execução. Use também o comando tunnel show history para visualizar informações históricas detalhadas. Para mais informações, consulte Comando Tunnel.
odps@ sz_mc>tunnel show history; 20xxx success 'download inttable inttable.txt' 20xxx success 'upload /Users/xxx.csv maxcomputefee -c "UTF-8" -h "true" -dfp "yyyy-MM-dd HH:mm:ss"'
Mais informações
Para mais artigos sobre otimização de custos, consulte Visão geral da otimização de custos.